ハードウェア実習と論理設計演習でVerilogを習ったので、自習できるように自宅に環境を構築しておこうと思います。
Verilogとは?
Verilog(ヴェリログ)は、デジタル回路の設計用の論理シミュレータであり、そこで使用するハードウェア記述言語でもある。
(Wikipediaより)
僕の学科では、論理設計演習と、ハードウェア実習で使用します。
なんか書いてみる
とりあえず、授業で最初にやった、2進カウンタを書いてみましょうか。
upcount.v
module upcount(clock,reset_N,count); input clock; input reset_N; output [1:0] count; reg [1:0] count; always @(posedge clock or negedge reset_N)begin if(reset_N==0)begin count<=2'b00; end else begin count<=count+2'b01; end end endmodule
上記の回路を動かすためのテストプログラムを書きます。
upcount_test.v
module UPCOUNT_TEST; reg clock; reg reset_N; wire [1:0] out; upcount test(clock,reset_N,out); initial begin $dumpfile("upcount.vcd"); $dumpvars(0,UPCOUNT_TEST); $monitor("%t: clock = %b,reset_N = %b, out = %b",$time,clock,reset_N,out); clock=0 reset_N=0; #10 clock=1; #10 clock=0; reset_N=1; #10 clock=1; #10 clock=0; #10 clock=1; #10 clock=0; #10 clock=1; #10 clock=0; #10 clock=1; #10 clock=0; #10 clock=1; #10 clock=0; #10 clock=1; #10 clock=0; #10 clock=1; #10 clock=0; reset_N=0; #10 clock=1; #10 clock=0; #10 clock=1; #10 clock=0; #10 $finish; end endmodule
シミュレーションしてみる
$iverilog upcount.v upcount_test.v $vvp ./a.out
すると、実行結果が以下のように表示されるはずです。
VCD info: dumpfile upcount.vcd opened for output. 0: clock = 0,reset_N = 0, out = 00 10: clock = 1,reset_N = 0, out = 00 20: clock = 0,reset_N = 1, out = 00 30: clock = 1,reset_N = 1, out = 01 40: clock = 0,reset_N = 1, out = 01 50: clock = 1,reset_N = 1, out = 10 60: clock = 0,reset_N = 1, out = 10 70: clock = 1,reset_N = 1, out = 11 80: clock = 0,reset_N = 1, out = 11 90: clock = 1,reset_N = 1, out = 00 100: clock = 0,reset_N = 1, out = 00 110: clock = 1,reset_N = 1, out = 01 120: clock = 0,reset_N = 1, out = 01 130: clock = 1,reset_N = 1, out = 10 140: clock = 0,reset_N = 1, out = 10 150: clock = 1,reset_N = 1, out = 11 160: clock = 0,reset_N = 0, out = 00 170: clock = 1,reset_N = 0, out = 00 180: clock = 0,reset_N = 0, out = 00 190: clock = 1,reset_N = 0, out = 00 200: clock = 0,reset_N = 0, out = 00
また、同時にupcount.vcdというシミュレーション結果を格納したファイルも生成されます。
波形ビューアを使ってみる
とりあえずインストール
$sudo aptitude install gtkwave