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=0FPGAなどで効率の良い回路を組むためには、もっと勉強しないといけないだろうけれど、自作マイコンのシミュレーターとして使うには、学ぶべき機能は一通りマスターしたように思う。とりあえずは、使ってみよう。プログラミングは習うより慣れろだ。これを使った方が、回路設計が大幅に効率よく進みそうな気がする。HDLとは逆の考え方をするLabViewっていったい何だったのだろう?