2016-03-10 8 views
6

私はiverilogを使ってシミュレーションを行う方法が適切でないことを知りました。合成できない設計をシミュレートすることができ、逆も同様に合成するだけでなく、物理的なハードウェアを対象としており、シミュレーションのためにiverilogと合成しません。私は理想的yosysの出力(BLIFファイル)をとり行うと、私はより良い自信を持つことができるシミュレーション波形(VCD)を作成しているよ何yosysの出力からシミュレーション波形を作成することは可能ですか?

+0

たぶんofftopicが、VHDLの場合オプション、私はghdl波形に問題がなかった。 – xvan

+1

yosysとは何ですか?聞いたことがない。 – Paebbels

+0

yosysはiCEstick&boardのオープンソースVerilogツールチェーンの一部です –

答えて

8

ですから、合成後に実行したいですiCE40 BLIFネットリストのシミュレーション

module test(input clk, resetn, output reg [3:0] y); 
    always @(posedge clk) 
    y <= resetn ? y + 1 : 0; 
endmodule 

とそのテストベンチ(test_tb.v):

module testbench; 
    reg clk = 1, resetn = 0; 
    wire [3:0] y; 

    always #5 clk = ~clk; 

    initial begin 
    repeat (10) @(posedge clk); 
    resetn <= 1; 
    repeat (20) @(posedge clk); 
    $finish; 
    end 

    always @(posedge clk) begin 
    $display("%b", y); 
    end 

    test uut (
    .clk(clk), 
    .resetn(resetn), 
`ifdef POST_SYNTHESIS 
    . \y[0] (y[0]), 
    . \y[1] (y[1]), 
    . \y[2] (y[2]), 
    . \y[3] (y[3]) 
`else 
    .y(y) 
`endif 
); 
endmodule 

合成前のシミュレーションを実行しているもちろん、単純なのです:

$ iverilog -o test_pre test.v test_tb.v 
$ ./test_pre 

は、次の簡単な例デザイン(test.vは)考えてみましょう

合成後のシミュレーションでは、最初にシンセを実行する必要がありますESIS:

$ yosys -o test_syn.v test.blif 

今では合成され、テストベンチからシミュレーションバイナリをビルドすることができます:それはイカルスのVerilogで読み取ることができるよう

$ yosys -p 'synth_ice40 -top test -blif test.blif' test.v 

その後、我々は、VerilogネットリストにBLIFのネットリストを変換する必要がありますデザイン、およびiCE40シミュレーションモデル、およびそれを実行します。

$ iverilog -o test_post -D POST_SYNTHESIS test_tb.v test_syn.v \ 
         `yosys-config --datdir/ice40/cells_sim.v` 
$ ./test_post 

[..]シミュレーションのためのiverilogを合成することはありません。

これは、Verilog規格の適用に関して、Yosysがiverilogほど厳密ではないためです。たとえば、多くの場合、YosysはVerilog標準に基づいてregキーワードを必要とする電線にキーワードregがないVerilogファイルを除きます。例えば、yosysは、それが有効なVerilogコードでなくても、以下の入力を受け入れます:

module test(input a, output y); 
    always @* y = !a; 
endmodule 

イカルスVerilogのためにあなたが不足しているregを追加する必要があります。

module test(input a, output reg y); 
    always @* y = !a; 
endmodule 
+0

正直言って、iverilogのポスト合成チップ(ありがとう、素晴らしいツールはありません!)に感謝します。他の方法と同じように、有効なiverilogコードを合成しないと円形! (これは、私があなたのつま先をカールするようなVerilogの無知を介して物事をしているからです!)BTWはice40/cells_sim.vです.8kのボードは大丈夫ですか? –

+0

@ChrisCamacho動作しているはずだが、yosysによって拒否されていると思われるVerilogコードがある場合は、githubのチケットを開くか、ここでstackoverflowの質問を開きます。そして、yes、 'ice40/cells_sim.v'はiCE40 1K、4K、8KのデバイスでOKです。 – CliffordVienna

関連する問題