2020-05-03 ノンブロッキング代入とブロッキング代入という初見殺しの基本事項 max10-lite fpga quartus このブログを始めたきっかけ つまづいたこと(ではない) 表記 ノンブロッキングとブロッキングのちがい 対処法 このブログを始めたきっかけ ここの最初に記載。 darushino.hatenablog.jp つまづいたこと(ではない) ノンブロッキング代入とブロッキング代入は、HDL を扱う上で超重要事項のようです。理解して使わないと意図しない回路が出来上がってしまう。 表記 ノンブロッキング:verilog、VHDL共通で、"<=" ブロッキング:verilogでは "="、VHDL では ":=" ノンブロッキングとブロッキングのちがい fpgainfo.blog.fc2.com ノンブロッキングは同時処理、ブロッキング*1は逐次処理と考えたらよさそう。www.macnica.co.jp ブロッキング代入 (=) : シーケンシャル・ブロック内で上から順番に実行される ノンブロッキング代入 (<=) : シーケンシャル・ブロック内で、ステートメントの記述の順番に関係なく代入できる 一斉に論理が更新されるのがノンブロッキング、前の処理が終了するまで待たなきゃいけないのがブロッキング、と捉えてもよさそう。 対処法 コツは以下っぽい。 ノンブロッキングとブロッキングを必要以上に混合して使わない。 順序回路(always文)ではノンブロッキング、組合せ回路(assign文)はブロッキングを使っておくのが無難そう。 それか、always 文の中ではノンブロッキング(<=)のみ使用する。もしくは、always文で複数のレジスタ処理をしない工夫をする。 *1:ブロッキング代入と呼ばれるのは「現在の操作が完了するまで将来の動作がブロックされている」という意味らしい。なるほど。