
現在Verilog HDLを勉強しており、ひと通り勉強は終わりました。
しかしブロッキング代入[=]とノンブロッキング代入[<=]の使い分けをどこまで暗記すれば良いのか分かりません。
皆様は、[=]と[<=]の使い分け、あるいはネット型、レジスタ型への代入をする際の区別をどのように暗記していますか?「このポイントを理解すれば大丈夫!」みたいなことを教えていただけると助かります。
今思いつく例としては↓のとおりです
・assign文では[=]を使用しなければならない。
・assign文の左辺は[ネット型]のみ
・case文のHPによって[=]を使用しなければならない。
・ http://veri.jp/ba_nba.html のHPの最後のほうで『ほかにも「assign 文では NBA "<=" が使えません」という誤った注意書き』と書いてありますが、この記述の意味がわかりません。
・回路記述ではダメなのに、シミュレーション記述では問題がない等等、、、
他にもfunction文やalways文の中で式を書く時にも困っています。
No.1ベストアンサー
- 回答日時:
>
http://veri.jp/ba_nba.htmlこんな良い解説ページを見つけたのに、なぜ質問しているのかがよく分かりませんが・・・。
まずassign文は継続的代入であって、ブロッキング代入でもノンブロッキング代入でもないので、
ブロッキング代入とノンブロッキング代入の使い分けという議論の対象外です。
また、ブロッキング代入とノンブロッキング代入はレジスタ型に対して使う、
継続的代入はネット型に対して使う、
となるため、型でブロッキング代入とノンブロッキング代入の使い分けなんて言う議論は最初からできないです。(どちらもレジスタ型が相手だから)
解説ページにも書かれていますが、
ブロッキング代入とノンブロッキング代入の違いは、
"右辺の評価" と "左辺への代入" が同時に行われるか、別々に行われるかの違いです。
たとえば、
a = x;
b = a;
としたとき普通のプログラミング言語のように、bもxになって欲しいなら、ブロッキング代入を使いますし、
bにxが代入される前のaの値が入って欲しいなら、ノンブロッキング代入を使うことになります。
always文でFFを生成するときは、その時刻においては代入前の値を参照したい(実際の回路を考えると代入後の値を参照できるのは次のクロックがやってきたときだから)ので、
ノンブロッキング代入を普通は使いますね。
(ブロッキング代入だとレーシング=記述順序で結果が変わってしまうという問題があるというのもありますが。)
それ以外(組み合わせ論理を作るalways、function、シミュレーション記述)は、
特に理由がなければブロッキング代入を使っています(変数を直ちに更新して欲しい場合がほとんどだから)が、
前述のノンブロッキング代入の挙動を理解した上でノンブロッキング代入が必要だと思ったなら
使っていけないわけではないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
jsp~jspにhiddenを使って変数...
-
テキストボックスの値を変数に...
-
「%」を使って、偶数か奇数かを...
-
整数xxxが大き過ぎますというエ...
-
stdpicture型の変数に、、
-
int→unsigned int キャスト
-
[VBS]変数を定数に変換する方法...
-
C言語において、=と==の違...
-
JavaScriptをURLから直接実行し...
-
インクリメント演算子の前置(+...
-
定数の設定について。
-
EXCEL/VBA 変数の値をクリップ...
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
excelの、ある数式内の{}の意...
-
Excel-vba 文字列と変数を...
-
ラジオボタンの値の取得につい...
-
Accessで文字列のバイト数読み込み
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jsp~jspにhiddenを使って変数...
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
EXCEL/VBA 変数の値をクリップ...
-
[VBS]変数を定数に変換する方法...
-
Variant型で宣言してるのにEmpt...
-
テキストボックスの値を変数に...
-
processing エラーで、 "cannot...
-
整数xxxが大き過ぎますというエ...
-
Accessコンボボックスにレコー...
-
stdpicture型の変数に、、
-
verilog HDLの[=]と[<=]の使い分け
-
プログラミングで変数と関数の...
-
Borland C++ Compiler 5.5の警...
-
【VBA】複合代入演算子
-
gridViewの行選択解除
-
VBAでコマンドプロンプトの結果...
-
VBA 1行で複数の代入を行った...
-
VB6.0での条件文にある#の意味
-
C言語 アロー演算子について質...
おすすめ情報