【Mac】macでVerilogHDLを動かす


はじめに

ちょうど学校の授業でハードウェア記述言語なるものを習う上で演習を行うらしい。その時VerilogHDLで記述したものをコンパイルするらしいが、sublimeTextでコンパイルできないものかと思って調べたらできたので、メモする。

環境

  • SublimeText3

インストール済みパッケージ一覧
 ・SublimeLinter-contrib-iverilog
 ・SystemVerilog
 ・Verilog Automatic
 ・Verilog
 ・VHDL
とりあえずVerilog系、あるだけ入れてみた。Syntaxハイライトとかあるし、自動補完系もあるから、入れた方が楽だと思う。

  • Icarus Verilog

$ brew install icarus-verilog でインストールすることが可能。関連パッケージも自動インストされる

準備

上記のパッケージをインストールすれば、Verilog系のSyntaxは使えるようになっているが、Sublime上でiverilogを用いてコンパイルすることができない。なので、自分でsublime-buildを作る必要があるようです。SublimeのTools > Build System > New Build Systemを選択。そして以下をそのまま貼り付けて、保存。保存名はなんでもいいけど、拡張子だけは変えないように。

・2017/07/18 追記
brewでインストールした際、インストール先は/usr/local/bin/であり(which iverilogなどで確認可能)、pathが通っていないのでコンパイル・実行できないようでした。El Capitan以降のMacOSではSIPにより/usr/bin//binなどのディレクトリにはroot権限でも変更ができないようになりました。なので、インストールしたiverilogをフルパスで読み込むことで実行できるようにします。

iverilog.sublime-build
{
    "cmd": ["/usr/local/bin/iverilog", "-o", "$file_base_name", "$file"],
    # "cmd": ["iverilog", "-o", "$file_base_name", "$file"],

    "variants":
    [
        {
            "name": "Run",
            "cmd": ["/usr/local/bin/vvp", "$file_base_name"],
            # "cmd": ["vvp", "$file_base_name"],
        }
    ]
}

Tools > Build System > iverilog(保存名によって異なる)を選択すれば、Sublime上でコンパイル・実行することができる。command + bでコンパイルできる。実行したいときはshift + command + bRunを選択すればできる。

実験

以下にサンプル(HA)を書く。コピペして、コンパイル・実行

ha.sv
// 半加算器 ha.sv
module ha(a,b,s,c);
    input       a,b;
    output      s,c;

    assign s=a^c;
    assign c=a&b;
endmodule

// 半加算器haのテストベンチ ha_tb.sv
module ha_tb;
    reg     a,b;
    wire    s,c;

    ha ha_i(.a(a), .b(b), .s(s), .c(c));

    initial begin
        $dumpfile("out.vcd");
        $dumpvars(0,s);
        $monitor ("%t: a = %b, b = %b, s = %b, c = %b", $time, a, b, s, c);
    end

    initial begin
                a=1'b0; b=1'b1;
        #10     a=1'b1;
        #10     b=1'b0;
        #10     a=1'b0;
        #10     $finish;
    end
endmodule

これの実行結果としていかが表示されれば終わりです。(人によって表示形式や内容は変わっているかもしれません)

out.vcd
VCD info: dumpfile out.vcd opened for output.
                   0: a = 0, b = 1, s = 0, c = 0
                  10: a = 1, b = 1, s = 0, c = 1
                  20: a = 1, b = 0, s = 1, c = 0
                  30: a = 0, b = 0, s = 0, c = 0
[Finished in 0.0s]

さいごに

Verilogを使うことでかなり簡単に回路シミュレーションをできるので、マスターできるようになりたいですね