ハードウェアを設計するのに必要になるのがハードウェア言語です。ソフトでいう C 言語などのようなものです。

もちろん FPGA を設計する際にも必要となります。

 

文法の種類は Verilog HDL, VHDL, System verilog などがありますが、今回は Verilog HDL についてご紹介します。

 

研修中に Verilog HDL でを学んで最初に躓いたところが手続代入文と継続代入文の違いでした。違いは以下の通りのようです。

 

手続代入文・・・フリップ・フロップ ( FF ) を使用し、データを一時的に保持する場合に使用。

継続代入文・・・組み合わせ回路が出力したい場合に使用。

たとえば、 if 文や case 文ではデータを保持したのちに出力をします。

 

このように書かれてもわからなかったので、先輩に聞いてみると、デジタル回路では組み合わせ回路と FF の二種類しかないとのことでした。

文法上 always 文は FF と組み合わせ回路の両方の記述が可能であり、 assign 文は組み合わせ回路のみの記述になるそうです。

では、 always 文で FF と組み合わせ回路の記述の区別はどのように行うのでしょうか。

 

それはセンシティビティ・リストの中で区別を行っているそうです。

センシティビティ・リストの中にクロックの記述があればFFを使用した回路となり、センシティビティ・リストの中がクロック以外の入出力であれば組み合わせ回路の記述となります。

言葉だけで書いていても分かりにくいので実際の記述例と RTL Viewer で確認してみました。

こちらが継続代入文の記述と RTL Viewer です。

 

左側が always 文を使用した場合で、右側の図が assign 文を使用した場合です。

 

次に、こちらが手続代入文の記述と RTL Viewer です。

 

確かにFFと組み合わせ回路の違いが一目でわかります。

 

本当に RTL Viewer って便利ですね!

 

このように簡単な回路でも FF を組みたいのか、組み合わせ回路を組みたいのか自分ではっきりさせる必要があるということが、今回学んだことでした。