UniPHY IP は、UniPHY IP 向けにglobal_reset_nまたは信号 low をアサートおよびデアサートした後soft_reset_nキャリブレーションを完了しません。EMIF デバッグ・ツールキットは、そのインターフェイスに接続できません (プロジェクトをデバイスにリンク)。この状態は、後で複数のリセットが発行されても変更されません。 この状態は、デバイスを再構成することによってのみ回復できます。
これらの症状は、EMIF UniPHY IP の内部リセット構造によって発生する可能性があります。 M20K RAM のアドレスバスを駆動するロジックへの非同期リセットアサーションは、非同期ロジックの伝搬を引き起こす可能性があります。 これにより、M20Kアドレス行/列デコーダーの機能に影響を与え、ビットセル間で充電共有される可能性のある複数のワード行を開くと、M20Kのコンテンツが破壊される可能性があります。 非同期リセットアサーションによるM20K破損の確率は非常に低い点に注意してください。
M20K 読み取りまたは書き込み動作中の PLL リセットは、リセット時に PLL ロックが失われる可能性があり、M20K アドレス行 / 列デコーダーの機能に影響を与える可能性があるため、エンベデッド RAM / ROM の破損にも寄与します。
この破損は、UniPHY IP にキャリブレーションに使用されるNios ® II プロセッサーが含まれており、プロセッサーのプログラムコードが M20K RAM に格納されているためです。 Nios ® II プログラムメモリー内で破損が発生した場合、Nios ® II シーケンサーがロックアップし、キャリブレーションが不完全になります。 M20K コンテンツはデバイス・プログラミング中にのみ読み込まれるので、このような状況からのリカバリーは、デバイスの再プログラミングでのみ可能です。
以下に示す一般的な EMIF エラーは、必ずしも M20K RAM が破損したり、Nios ® II シーケンサーがロックされていることを意味するとは限らないことに注意してください。
- キャリブレーションがパスしない場合 (つまり、キャリブレーションが常に失敗します)。
- キャリブレーション・マージンが非常にスリムで、キャリブレーションが失敗する場合があります。
- デザインがキャリブレーションをパスした場合、デザインの実行中に時折データエラーが発生します。
- デザインがキャリブレーションをパスしたと言っている場合、デザインは期待どおりに機能していません。
UniPHY IP コアには 2 つのリセット入力
Global_reset_n: PLL を含む UniPHY IP 内のすべてのものに接続されています。
Soft_reset_n: PLL 以外の UniPHY IP 内のすべてのものに接続されています。
1. Alteraは、常にsoft_reset_nのみを使用することを強く推奨します。 global_reset_nはパワーオンリセット時にのみ使用してください。
電源オン時に PLL をリセットするには、次の手順を使用します。
A。 アサート・Global_reset_n (PLL リセット)
B。 パワーアップとチップの再構成
c. デアサート Global_reset_n
2. この修正により、UNIPHY IP コアの内部リセット・コントローラーとリセット構造が変更され、シンクロナス・リセットを使用するだけでなく、リセット状態中に M20K clock_enableポートを先制的にデアサートします。 これにより、メタステーブル・トランジションが M20K アドレス・デコーダーに伝搬するのを防ぐことができます。
この修正は、13.0dp1、13.0sp1、およびそれ以降のすべてのバージョンの Quartus® の一部として提供されます。 ユーザーは UnipHY IP を再生成し、デザインを再コンパイルする必要があります。 Alteraはこれらのバージョンの Quartus に移行することを推奨します。
修正がより早く必要な場合、または Quartus® バージョン 12.1sp1 で修正が必要な場合は、UniPHY IP コアを手動で更新できます。 以下の手順に従う必要があります。
デザイン内のAltera UniPHY IP のソースファイルを参照します。
5 つのファイルを変更する必要があります。
altera_reset_synchronizer.v
altera_reset_controller.v
altera_mem_if_sequencer_mem_no_ifdef_params.sv
_if0_p0_reset.v
_if0_s0.v
手順
1. 以下のリンクから altera-reset-シンクロナイザー.v をダウンロードし、UniPHY IP ソースファイルと同じディレクトリーに置きます: Altera_reset_synchronizer.v
2. 以下のリンクから altera-reset-controller.v をダウンロードし、UniPHY IP ソースファイルと同じディレクトリーに置きます: Altera_reset_controller.v
3. altera_mem_if_sequencer_mem_no_ifdef_params.sv' で – 入力「s1_clken」が「the_altsyncram」の「クロックエン0」入力に接続されていることを確認します。
4. インスタンス_if0_p0_reset.v では、「dut_if0_p0_reset_sync」インスタンスの defparam ステートメントを変更して、添付されたサンプルファイル (dut_if0_p0_reset.v) に従ってパラメーター「RESET_SYNC_STAGES」と「NUM_RESET_OUTPUT」を設定します。(UniPHY IP ソース・ファイル・ディレクトリーにサンプルファイルをダウンロードしないでください)
5. _if0_s0.v で
(UniPHY IP ソース・ファイル・ディレクトリーにサンプルファイル dut_if0_s0.v をダウンロードしないでください)
dut-if0-s0.v (_if0_s0.v のサンプルファイル)
– 次のポートをトップレベルに追加します。
ワイヤー early_rst_controller_reset_out_reset;
- 「rst_controller」モジュールの出力ポート「m20k_gate」を「sequencer_mem」モジュールの「s1_clken」入力に配線します。 M20k_gate出力はアクティブローなので、以下のように出力を反転する必要があります。
.s1_clken (~early_rst_controller_reset_out_reset)、sequencer_mem、添付サンプルファイルの 785 行目 (dut_if0_s0.v)
.m20k_gate (early_rst_controller_reset_out_reset)、// rst_controller、添付されたサンプルファイルの 2572 行目
6. これらの変更が加えられたら、デザインを再コンパイルする必要があります。