Verilogを使ってみた
2011年7月2日
今の時代、デジタル回路を考える際、HDL (Hardware Description Language)を会得するのは必須のようらしい。FGPAなどの応用範囲もある。覚えておいて損はない、言語だろう。
VHDLとVerilogの両方を試してみたが、Verilogの方が自分には合っているようだ。
とりあえず、MacOSXで環境を構築してみた。次の2つのツールが必要。
Icarus Verilog
GTKwave
Verilogの入門としては、以下のサイトが参考になった。
新居良祐サポートページ - Verilog-HDL入門
MacOSXの場合、.bash_profileを編集して、
のようにしておくことが必要。コンパイルは「iverilog -o xxx -s XXX xxx.v 」で、シミュレートは「vvp xxx」で、波形の表示は「gtkwave xxx.vcd」のようにして、すべてコンソールで扱う。GTKwaveでは、波形の表示の際、メニュー:「search」→「signal search tree」から、波形を表示させるシグナルを選択する必要がある。
D-FFも、Verilogでシミュレートできた。ソースコードは以下の通り。
実行結果は、以下の通り。
FPGAなどで効率の良い回路を組むためには、もっと勉強しないといけないだろうけれど、自作マイコンのシミュレーターとして使うには、学ぶべき機能は一通りマスターしたように思う。とりあえずは、使ってみよう。プログラミングは習うより慣れろだ。これを使った方が、回路設計が大幅に効率よく進みそうな気がする。HDLとは逆の考え方をするLabViewっていったい何だったのだろう?
VHDLとVerilogの両方を試してみたが、Verilogの方が自分には合っているようだ。
とりあえず、MacOSXで環境を構築してみた。次の2つのツールが必要。
Icarus Verilog
GTKwave
Verilogの入門としては、以下のサイトが参考になった。
新居良祐サポートページ - Verilog-HDL入門
MacOSXの場合、.bash_profileを編集して、
PATH=/Developer/Simulator/Icarus/bin:/Developer/Simulator/GTKwave/bin:$PATH export PATH
のようにしておくことが必要。コンパイルは「iverilog -o xxx -s XXX xxx.v 」で、シミュレートは「vvp xxx」で、波形の表示は「gtkwave xxx.vcd」のようにして、すべてコンソールで扱う。GTKwaveでは、波形の表示の際、メニュー:「search」→「signal search tree」から、波形を表示させるシグナルを選択する必要がある。
D-FFも、Verilogでシミュレートできた。ソースコードは以下の通り。
module DFFTEST; reg d,c; wire q; DFF bbb (d,c,q); initial begin $dumpfile("dfftest.vcd"); $dumpvars(0,DFFTEST); $monitor("%t; d=%b, c=%b, q=%b",$time,d,c,q); d=1;c=0; #10 d=1;c=1; #10 d=1;c=0; #10 d=0;c=0; #10 d=0;c=1; #10 d=0;c=0; #10 $finish; end endmodule module DFF (D,C,Q); input D, C; output Q; wire nc,nnc,o11,o12,o21,o22,o31,o32,o41,o42; assign nc=!C; assign nnc=!nc; assign o11=!(D&nc); assign o12=!(o11&nc); assign o21=!(o22&o11); assign o22=!(o21&o12); assign o31=!(o21&nnc); assign o32=!(o31&nnc); assign o41=!(o42&o31); assign o42=!(o41&o32); assign Q=o41; endmodule
実行結果は、以下の通り。
VCD info: dumpfile dfftest.vcd opened for output. 0; d=1, c=0, q=x 10; d=1, c=1, q=1 20; d=1, c=0, q=1 30; d=0, c=0, q=1 40; d=0, c=1, q=0 50; d=0, c=0, q=0
FPGAなどで効率の良い回路を組むためには、もっと勉強しないといけないだろうけれど、自作マイコンのシミュレーターとして使うには、学ぶべき機能は一通りマスターしたように思う。とりあえずは、使ってみよう。プログラミングは習うより慣れろだ。これを使った方が、回路設計が大幅に効率よく進みそうな気がする。HDLとは逆の考え方をするLabViewっていったい何だったのだろう?