iverilogを用いた論理回路シミュレーション

目的

例えば、論理回路のみを用いたロジックの検証などを手動で行うのは、とても大変。 そのため、PC上でそれを確認し、かつ、各組み合わせを視覚的に表現するために、 iverilogを用いる。

今回の対象は以下の図。半加算器であり、x,yがinputでrがsum, cがキャリー。

nand

準備

iverilogをubuntu(on windows)などで入れる。

gtkwaveをWindowsなどに入れる

コード

module HA( input x, y, output r, c);
  logic r11, r21, r22, r23, r31;
  assign r11 = x ~& y;
  assign r21 = x ~& r11;
  assign r22 = y ~& r11;
  assign c = r11 ~& r11;
  assign r = r21 ~& r22;
endmodule

module test;
  logic a, b, c, s;
  HA adder(.x(a), .y(b), .r(s), .c(c));

  initial begin
    $dumpfile("test.vcd");
    $dumpvars(0, test);
    $display("A B C S");
    $monitor("%b %b %b %b", a, b, c, s);
    a = 0; b = 0; #1;
    a = 0; b = 1; #1;
    a = 1; b = 0; #1;
    a = 1; b = 1; #1;
    $finish;
  end
endmodule

   iverilog -g2012 -o test  test.v
   vvp test
   VCD info: dumpfile test.vcd opened for output.
   A B C S
   0 0 0 0
   0 1 0 1
   1 0 0 1
   1 1 1 0

可視化

上記でvcdファイルが生成されるので、/mnt/dなど、windowsからアクセスできるところに置く。 次に、gtkwave d:\test.vcdなどと実行し、 右上のウィンドウからtestの”+”などを掘り下げ、

viewのshow field high valueをチェックすると見やすい。

seq