vsCode+Icarus verilog+GTKwave を使用して verilog を作成およびシミュレートする方法

今学期から 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を入力してください
、緑色のボックスに「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.スクリプトを書く*

毎回コマンドラインで入力するのは面倒なので、上記のコマンドをバッチファイルにカプセル化することができます。

  1. 新しいバッチ ファイルを作成します (Windows では、最初に新しいテキスト ファイルを作成してから、サフィックスを Bat に変更できます)
  2. 中に以下の内容を入力してください
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 ファイル名であることを確認してください。
  1. 次に、このファイルをダブルクリックしてシミュレーションを直接実行します。

おすすめ

転載: blog.csdn.net/qq_44856695/article/details/105097580