今学期から Verilog のコースを始めたので、試験を受けるために自分を騙すコードを書けばいいやと思ったのですが、実際に動作させずに書くだけでは単なる話に過ぎません。そこで、オンラインの Baidu にアクセスして、シミュレーション ソフトウェアを検索しました。ソフトウェアは 20G もするのに、なぜ私を殺さないのですか? そのため、今学期のコースを解くために軽量のソフトウェアを探す必要がありました。
審査を経て、最終的にvsCode+Icarus Verilog+GTKwaveの組み合わせを決定しました。
コードを書く部分
vsCode を使用してコードを作成する
01vscodeのダウンロード
vsCode 公式 Web サイトにアクセスしてダウンロードします。
02verilogプラグインをインストールする
vsCode 自体は Verilog をサポートしていないため、構文の強調表示を表示するにはプラグインをダウンロードする必要があります。
インストールが完了すると、いくつかの構文が強調表示されます。
特定の機能については、プラグインの説明を参照するか、ここをクリックしてプラグインの機能を表示してください。もちろん、コードを自動標準化してテストコードを自動生成したい場合は、対応するプラグインを検索することもできます。もちろん、うまくいったら…言わなかったことにしてください。
テストコードを自動的に生成する (非推奨):リンク
コードエディターが完成したら、次はシミュレーションです。
シミュレーション部分
シミュレーションにはIcarus VerilogとGTKwaveを使用
01ソフトウェアダウンロード
Icarus Verilog にはすでに GTKwave が含まれているため、Icarus Verilog をダウンロードするだけです。ここをクリックすると Icarus Verilog のダウンロードページにジャンプします。iverilog-v11-20190809-x64_setup.exe [17.0MB]をダウンロードしました。
環境変数はインストール プロセス中に直接設定できるため、.exe で終わるファイルをダウンロードすることをお勧めします。
02基本的な使い方
デモンストレーションの便宜上、最初に前回の課題のコードを貼り付けます。
ファンクションコード、ファイル名:counter.v
module counter(out, clk, enable,reset);
output[7:0] out;
input clk, reset, enable;
reg[7:0] out;
always @ (posedge clk) begin
if(reset) begin
out <= 8'b0;
end else if(enable) begin
out <= out + 1;
end
end
endmodule
テストコード、ファイル名:counter_tb.v
`timescale 1ns/1ns
module counter_tb;
reg clk, enable, reset;
wire [7:0] out;
counter c1(.out(out), .clk(clk), .enable(enable), .reset(reset));
initial begin
enable = 1;
end
initial begin
clk = 0;
forever #10 clk = ~clk;
end
initial begin
reset = 1;
#15 reset = 0;
#1000 $finish;
end
initial
begin
$dumpfile("counter_tb.vcd"); //生成的vcd文件名称
$dumpvars(0, counter_tb); //tb模块名称
end
endmodule
シミュレーション時にテストコードの次の部分を追加しました
begin
$dumpfile("counter_tb.vcd"); //指定VCD文件的名字为counter_tb.vcd,仿真信息将记录到此文件
$dumpvars(0, counter_tb); //指定层次数为0,则counter_tb模块及其下面各层次的所有信号将被记录
end
シミュレーションに Icarus Verilog+GTKwave を使用する場合、これら 2 行のコードが必要です。
1.iverilogの使用。
01) コード ストレージ パスで cmd を開き
、緑色のボックスに「cmd」と入力して、現在のディレクトリのコマンド ライン インターフェイスにすぐに入ります。
2) コマンドラインに入力します
iverilog -o "counter_tb.vvp" counter_tb.v counter.v
-o
出力ファイル名を指定します。ここでは counter_tb.vvp です。
上記のコマンドは vvp ファイルにコンパイルされます。
3) コマンドラインに再度入力します。
vvp counter_tb.vvp
vvp がシミュレーションを開始すると、テスト ファイルで$dumpfile("counter_tb.vcd")
指定されたファイル (counter_tb.vcd)が生成されます。
注: 上記のテスト ファイルに追加したコード行を追加しない場合、vcd ファイルは表示されません。
2.GTKwaveの利用
コマンドラインに入力してください
gtkwave counter_tb.vcd
GTKwave ソフトウェアが開きます。
上記の順序に従って、表示する必要がある信号を選択します。
3.スクリプトを書く*
毎回コマンドラインで入力するのは面倒なので、上記のコマンドをバッチファイルにカプセル化することができます。
- 新しいバッチ ファイルを作成します (Windows では、最初に新しいテキスト ファイルを作成してから、サフィックスを Bat に変更できます)
- 中に以下の内容を入力してください
set source_module=counter
set testbentch_module=counter_tb
iverilog -o "%testbentch_module%.vvp" %testbentch_module%.v %source_module%.v
vvp -n "%testbentch_module%.vvp"
gtkwave "%testbentch_module%.vcd"
source_module
は汎用モジュールのファイル名ですtestbentch_module
テストモジュールファイルの名前- 次回新しいファイルをシミュレートする場合は、そのファイルを開いて、上記の 2 つのファイル名を新しいファイルのファイル名に設定するだけです。
$dumpfile(filename)
テスト ファイルに入力するファイル名が、テスト ファイルと同じ名前の .vcp ファイル名であることを確認してください。
- 次に、このファイルをダブルクリックしてシミュレーションを直接実行します。