LoginSignup
5
5

More than 5 years have passed since last update.

【Mac】macでVerilogHDLを動かす

Last updated at Posted at 2017-06-20

はじめに

ちょうど学校の授業でハードウェア記述言語なるものを習う上で演習を行うらしい。その時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を使うことでかなり簡単に回路シミュレーションをできるので、マスターできるようになりたいですね

5
5
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5