Posts Issued on June 20, 2018

Lチカの実装 (7)

posted by sakurai on June 20, 2018 #46

Vivadoの操作

  1. シミュレーション シミュレーションにより、動作が正しく行われるかを確認します。左のFlow NavigatorからSIMULATIONの下のRun Simulationをクリックし、Run Behavioral Simulationを実行します。
    図46.1

図46.2

図46.3
図46.4

しばらく待つと以下のようにシミュレーションが動作するが、リセットがうまく入っていないため、カウンタ値が不定となっています。PSからのリセットはソフトで指示しないとかからないのかもしれません。従って、シミュレーションで動作するようにワークアラウンドを行います。

図46.5
まず、ソースを以下のように開きます。
図46.6
design_1の階層でGoto Sourceをクリック。
図46.7
25行目の、blinkモジュールのXRST端子をPSからのリセットを削除し、~glbl.GSRをつなぎます。glblモジュールのGSRは100nsのみtrueとなる信号であるため、反転してXRST端子に入力します。
図46.8
以下の図のようにリセットが正常に入り、回路が動作しました。
図46.9
このままクロックを入れ続けても動作しますが、シミュレーション時間が非常にかかるため、短縮を行います。25bitカウンタを単純にカウントするのではなく、MAX値に近い値をロードした後にカウントを進めます。具体的にはTEST信号をtrueにし25bitカウンタにMAX値に近い値(例えば0x1ffff8)をロードします。この前提としてRTLの25bitカウンタを、TEST信号のtrueにより任意の値をロードできるように修正する必要があります。テスト回路を用いない方法としては、カウント値に強引に上記値をforceするやり方もあります。テスト回路は本番では不要であるため、こちらのほうが良いかもしれません。

tclウインドウから入力するコマンドを示します。

add_force {/design_1_wrapper/design_1_i/blink_0/inst/count25/LD} -radix hex {1fffff8 0ns}
add_force {/design_1_wrapper/design_1_i/blink_0/inst/count25/TEST} -radix hex {1 0ns}
run 10 ns
add_force {/design_1_wrapper/design_1_i/blink_0/inst/count25/TEST} -radix hex {0 0ns}
run 200ns

図46.10
このように動作したので、14進カウンタがすべてカウントするまでこのコマンドを入力します。
図46.11
正しく14進カウンタが動作し、かつLEDパターンが要件に従ったふるまいのとおりデコードされているのがわかります。

テスト回路自体は本来のパス(機能安全用語では主要機能)ではありませんが、このような長いカウンタのテスト容易化設計として常識の回路です。


左矢前のブログ 次のブログ右矢