通常の合成前(ビヘイビア)シミュレーションで検証するだけでなく、合成後シミュレーションを使用してVerilogデザインを検証することは良い設計方法です。シミュレーションとハードウェアのミスマッチをデバッグする場合は、これは事実上必須です。 iCE40 FPGA用のオープンソースのIceStormフローでは、これをどのように実現できますか?IceStorm iCE40 FPGAフローで合成後シミュレーションを実行する方法
答えて
たとえば、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;
- 1. iCE40アイス・ストームFPGAフロー:双方向IOピン
- 2. Magentoを今後実行するシミュレーション
- 3. Gazeboシミュレーションで実際のロボットコードを実行する方法は?
- 4. ICE40 up5k内部の内部オシレータとipの
- 5. 流星法シミュレーション以外でコードを実行する方法
- 6. SystemCシミュレーションでイベント実行の順序を決定する方法
- 7. 設定したクロックサイクル数でシミュレーションを実行する方法
- 8. iCE40ビットストリームを変更して新しいブロックRAMの内容をロードする
- 9. Omnet ++:inetでシミュレーションを実行
- 10. sumoシミュレーションのためにtraci.startを実行する方法
- 11. simpyシミュレーションを複数回実行する方法
- 12. 例外後にキャメル実行フロー
- 13. アニニックでシミュレーションをN回実行する
- 14. メインスレッドで実行フロー
- 15. 多くのプロデューサとスプリング統合フローを作成する方法
- 16. Nexys ddr 4でオーディオサウンド出力を生成する方法FPGA
- 17. パペット実行フロー
- 18. iCE40 I/Oブロックとパッケージピンの対応
- 19. フロー実行Java JSsh
- 20. GCDシリアルスレッド実行フロー
- 21. laravel MVC実行フロー
- 22. ファイルの作成後にコードを実行する方法は?
- 23. コンテンツタイプの作成後にアクションを実行する方法は?
- 24. ドッカーの作成後にスクリプトを実行する方法は?
- 25. 実行中の合計Pythonを作成する方法
- 26. Talend TRestClient:後で両方のフロー(行)のジオコーディングと組み合わせ
- 27. 実行方法Herokuで生成する
- 28. ウェブストームで「フロー」を統合する方法は?
- 29. IceStormで512x8読み取りモードでiCE40 4KブロックRAMを使用するにはどうすればよいですか?
- 30. ランナークラスを作成する方法/コマンドラインを介して仕様フローを実行する-C#?