ソフトウェアエンジニアとして、プロセスを学ぶVerilogの、言語のverilogのいくつかの知識を持っている必要があり、必然的にシミュレートする必要があります。メンター・グラフィックスのModelSimで、ケイデンス社のNC-SIM / NC-VerilogおよびシノプシスVCS:共通のverilogシミュレーションソフトウェアは、プロジェクトの基本的な外国EDA 3つの工場です。
個々の学習が懸念されるために、ソフトウェアのためのこれらの大きな電荷は非常に適していません。イカルスのVerilog +のgtkwave:ここでのverilogシミュレーションプラットフォームの軽量バージョンをお勧めします、それは初心者や小さなシミュレーションを必要とする人に適しています。前者は波形ソフトウェアを見ているシミュレータ、考えることができます。
イカルスVerilogのオープンソース、サポートWindowsおよびLinux。:公式ウェブサイトのアドレスでダウンロードhttp://bleyer.org/icarus/
以下イカルスVerilogの詳細なチュートリアルを:
Windows環境
-
ソフトウェアのダウンロードhttp://bleyer.org/icarus/:ソフトウェアのインストール
gtkwaveを持っていると新しいバージョンのソフトウェアを。インストールされ、デフォルトのインストール。
インストール後、iverilogはCについては手動で追加、システム変数に追加し、そうでない場合されていることを確認してください:\ iverilog \ gtkwave \ binとC:\ binに(デフォルトでは、ここではCドライブにインストール)\ iverilog
Windows環境下では、自由にインストールすることができます直接コピー誰か他の人のセットアップファイルも使用することができます。しかし、また、あなたは、システム変数上のインストールファイルへのパスを追加する必要があります。
-
書き込みコードおよびVerilogテストベンチ。最後に、適用例として。
注:テストベンチは、2つの文、次の必要とされ、2行は主にこのツールをgtkwaveするために使用されている、つまり特定を参照してください
https://zhidao.baidu.com/question/13428173.html
-
シミュレーションコンパイルされた
WindowsでA)、+ Rを獲得、オープンコマンド入力をcmdを、.V CD文書(この工程を省略することができるが、工程bで、ファイルのパスを指定する必要があります)フォルダに
b)はiverilog -oを実行しますDSN icarus_example.vファイルDSNを取得します。(ここでは同じ.Vファイルに書かれたのverilogテストベンチとソースコードである)
c)の実行VVPのDSN
-
オープンVCDのシミュレーション波形は、gtkwave
A)はVCD名は、ここではtest.vcd)シミュレーション波形を開くことですテストベンチで命名された(gtkwave test.vcdを行います
Ubuntuの環境
- ソフトウェアをダウンロードしてインストール、あなたはネットワークを必要としています。root権限で、
Verilogのインストールapt-getを実行
gtkwaveをインストールapt-getを実行します - 書き込みコードおよびVerilogテストベンチ。
- (ウィンドウ環境で)コンパイルされたシミュレーション
A)はiverilog -o DSN icarus_example.v GETファイルDSNを行う。
B)、実行VVPのDSN - オープンVCDのシミュレーション波形は、gtkwave
A)はVCD名は、ここではtest.vcd)シミュレーション波形を開くことですテストベンチで命名された(gtkwave test.vcdを行います
例えば添付のソースicarus_example.v
module encoder(binary_out,encoder_in,enable);
output [3:0] binary_out;
input enable;
input [15:0] encoder_in;
reg [3:0] binary_out;
always @ (enable or encoder_in)
begin
binary_out = 0;
if(enable) begin
if(encoder_in == 16'h0002) begin
binary_out = 1;
end if(encoder_in == 16'h0004) begin
binary_out = 2;
end if(encoder_in == 16'h0008) begin
binary_out = 3;
end if(encoder_in == 16'h0010) begin
binary_out = 4;
end if(encoder_in == 16'h0020) begin
binary_out = 5;
end if(encoder_in == 16'h0040) begin
binary_out = 6;
end if(encoder_in == 16'h0080) begin
binary_out = 7;
end if(encoder_in == 16'h0100) begin
binary_out = 8;
end if(encoder_in == 16'h0200) begin
binary_out = 9;
end if(encoder_in == 16'h0400) begin
binary_out = 10;
end if(encoder_in == 16'h0800) begin
binary_out = 11;
end if(encoder_in == 16'h1000) begin
binary_out = 12;
end if(encoder_in == 16'h2000) begin
binary_out = 13;
end if(encoder_in == 16'h4000) begin
binary_out = 14;
end if(encoder_in == 16'h8000) begin
binary_out = 15;
end
end
end
endmodule
module encoder_te();
reg enable;
reg [15:0] encoder_in;
wire [3:0] binary_out;
initial begin
$dumpfile("test.vcd"); // vcd name
$dumpvars(0,encoder_te); // testbench module name
$monitor("%g\t %b %b %b",
$time,enable,encoder_in,binary_out);
enable = 0;
#5 enable = 1;
#5 encoder_in = 16'h0004;
#6 encoder_in = 16'h0040;
#7 encoder_in = 16'h0400;
#8 encoder_in = 16'h1000;
#10 $finish;
end
encoder en(binary_out,encoder_in,enable);
endmodule
参考ウィキhttp://iverilog.wikia.com/wiki/Main_Page
使用への参照
http://www.cnblogs.com/zhuangzhuang1988/archive/2012/03/30/2425052.html