FRAMにアクセス (Quartus実行編)
Quartusの論理合成とインプリメントとなります。
ここでは、単に実行するだけになるため、実行結果とSTA結果のみ記載します。
また、FRAM I/FブロックとFRAMデバイス間に遅延を付けて行ったシミュレーション波形も載せています。
TOP構成は、以下をご参照ください。
実行結果
リソース
Input Pin
クロックとリセット以外の入力端子は、「Input Register」を使用していることを確認します。これにより、端子とFF間の配線遅延を小さくすることにより、Setup/Holdをバランスよくします。
以下に入力端子FRAM_MISOとFF(in_miso)の接続関係を示します。
Output Pin
出力端子LED_LOCKを除く信号が「Output Register」を使用していることを確認します。
階層構造とメモリ使用状況
ブロックメモリ(M10K)の使用率は以下の通りです。
STA結果
クロック制約
最高動作周波数
CPU_CLKは50MHz、SYS_CLKは200MHz以上の結果が得られていることが確認できます。
タイミングレポート
各タイミングレポートを確認します。
CPU_CLK(50MHz) 間遅延
FF間が20nsの制約に対し、10ns以上の余裕があることが分かります。
SYS_CLK(200MHz)間遅延
FF間が5nsの制約に対し、0.2ns以上の余裕があることが分かります。
False Path (CPU_CLK → SYS_CLK)
False Path (SYS_CLK → CPU_CLK)
False Path (CPU_CLK間)
False Path (SYS_CLK間)
AC特性
Report Timingを実行し、FRAM制御信号の遅延時間を測定し、AC特性をまとめました。
上記AC特性からFRAMデバイスのAC特性に当てはめると以下となり、各Setup/Holdをカバーすることが分かります。
※tdrMISOの遅延時間 と 基板配線遅延 の 合計がFRAM_SCLKの周期を超えた場合は、基準取り込みタイミングを遅延させる調整が必要になります。(REG_TAK又はPRM_TAK)
シミュレーション
FRAM I/FブロックとFRAMデバイス間の信号に遅延を与えてシミュレーションを行いました。
各信号に上表(AC特性)の遅延値(tdo????,tdi????)を与えてRTLシミュレーションを行いました。
以下が波形となります。
※起点となるFRAM_SCLK↓ から in_misoまでの遅延が18.283nsとなります。
※遅延値の与え方は、前回のテストベンチ内のコメント「FRAM モデル間遅延」で調整できるようになっています。
遅延量18.283に+2nsして20.283nsにした場合の波形を以下に示します。
FRAM_SCLK周期を超えたため、1bitズレたパラレルデータになります。
20.283nsの遅延で取り込みタイミングをPRM_TAK又はREG_TAKで1クロックずらすことにより、周期越えした場合でも取り込むことができます。以下の波形が1クロックずらした場合の波形になります。
尚、同じ遅延量(20.283ns)にして、FRAM_SCLKを50MHzから25MHzにすると、周期越えを起こさないため、取り込みタイミングをずらす必要はなくなります。(以下の波形)
ちなみに、
FRAM_SCLKの周期を最大値(PRM_DIV=15又はREG_DIV=15)にすると、以下のような波形になります。
最後に
リソースの使用率及びSTAによるタイミング解析を行う必要があります。
この結果次第で、再設計など発生します。
本格的に検証を始める前に仮合成して確認しておく必要があります。
※シミュレーションした後に、FPGAに入らない(リソースをオーバーする)、タイミングが間に合わないなどがあれば、シミュレーションが無駄になるためです。
タイミングレポートのFalse Pathでは、遅延が大き過ぎないかを確認します。
特に、ラッチするタイミングまでに値が確定しているか、レジスタ値では、処理が始まるまでに確定しているかなど、遅延量を確認します。