2017-07-18 17 views
1

通常の合成前(ビヘイビア)シミュレーションで検証するだけでなく、合成後シミュレーションを使用してVerilogデザインを検証することは良い設計方法です。シミュレーションとハードウェアのミスマッチをデバッグする場合は、これは事実上必須です。 iCE40 FPGA用のオープンソースのIceStormフローでは、これをどのように実現できますか?IceStorm iCE40 FPGAフローで合成後シミュレーションを実行する方法

答えて

2

たとえば、https://github.com/cliffordwolf/icestorm/tree/master/examples/icestickを参照してください。 「rs232demo」プロジェクトは、テストベンチが付属し、Makefileは前後の合成シミュレーションのためのルールが含まれています

make rs232demo_tb.vcd  # pre-synthesis simulation 
make rs232demo_syntb.vcd # post-synthesis simulation 

この二つのコマンドによって生成されたVCDファイルを表示するためにgtkwaveのようなVCDビューアを使用してください。 yosys -p 'read_blif -wideports example.blif; write_verilog example_syn.v'

このネットリストは、iCE40デバイスプリミティブをインスタンス化します。一つは最初のVerilogネットリストにBLIFネットリスト(合成出力)に変換しなければならない合成後のシミュレーションを実行するために

。 Yosysには、これらのプリミティブのシミュレーションモデルが付属しています。コマンドyosys-config --datdir/ice40/cells_sim.vを実行して、そのシミュレーションライブラリのフルパス名を出力します。シミュレーションをコンパイルするときは、このVerilogファイルを使用してください。

編集:合成後のシミュレーションに関する二つの追加のFAQ:

これはクロックドアップデートを登録し、登録初期化の間に競合状態が発生することができますよう(1)クロックは、タイムスタンプ0でクロックエッジを持つべきではありません。私。クロックを生成するための次のテストベンチコードは問題がある:

reg clk; 
    always #5 clk = (clk === 1'b0); 

(2)一部:

reg clk = 1; 
    always #5 clk = ~clk; 

代わりに、最初の期間のために未定義のクロック信号を残し、次のようなものを、使用する必要があります合成中に信号(またはベクトルの個々のビット)を最適化することができます。このビットは一定値(通常はx)に設定するか、ツールで浮動させたままにします。これは、合成後のシミュレーション結果を検査しようとすると混乱することがあります。ツールに保存するネット上にkeep属性を設定します。

(* keep *) reg [31:0] foobar; 
関連する問題