はじめに
ちょうど学校の授業でハードウェア記述言語なるものを習う上で演習を行うらしい。その時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
をフルパスで読み込むことで実行できるようにします。
{
"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 + b
でRun
を選択すればできる。
実験
以下にサンプル(HA)を書く。コピペして、コンパイル・実行
// 半加算器 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
これの実行結果としていかが表示されれば終わりです。(人によって表示形式や内容は変わっているかもしれません)
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を使うことでかなり簡単に回路シミュレーションをできるので、マスターできるようになりたいですね