AR# 34089

MIG Spartan-6 FPGA MCB - ES デバイスで、MCB アドレス バス (mcbx_dram_addr) のビットの一部がメモリ デバイスの入力ホールド時間 (tIH) 仕様に違反する場合がある

説明


Spartan-6 のエンジニアリング サンプル (ES) デバイスで、MCB アドレス バス (mcbx_dram_addr) のビットの一部がメモリ デバイスの入力ホールド時間 (tIH) 仕様に違反する場合があります。

これらの tIH 違反がデータ エラーになることがあります。

この問題は、rev 1.0 および 1.1 ES デバイスでのみ発生し、rev 2.0 以降の ES デバイスおよび Spartan-6 プロダクション デバイスでは修正されています。

ソリューション


データ エラーがこのアドレス バスのタイミング問題が原因で発生しているかどうかを確認するには、各アドレス ビット パスに遅延を挿入してウィンドウを移動し、tIH 違反を回避します。

ザイリンクスでは、各アドレス ビットの出力パスに ODELAY を挿入し、遅延を 0 に設定して、この遅延をテストしました。

ODELAY コンポーネントによる追加遅延によりアドレス バスのタイミングがシフトされ、ホールド タイム違反が回避されます。

各アドレス ビットに ODELAY を追加するには、MIG 出力の rtl ディレクトリにある mcb_raw_wrapper.v モジュールを変更する必要があります。

注記: EDK で MPMC mジュールを使用する場合は、ファイルは $XILINX_EDK\hw\XilinxProcessorIPLib\pcores\mpmc_v6_00_a\hdl\verilog にあります。$XILINX_EDK は EDK がインストールされているディレクトリを指します。

手順 1 - 遅延 wire 宣言を追加します。

wire  [C_MEM_ADDR_WIDTH-1:0]ioi_addr_delay;
wire  [C_MEM_ADDR_WIDTH-1:0]t_addr_delay;



手順 2 - アドレス出力ロジックを変更します。
アドレス出力の生成文を検索します (MIG 3.3 では 6300 行目から始まる箇所です)。

次のコードをコメントアウトします。

//// Address

genvar addr_i;
   generate
      for(addr_i = 0; addr_i < C_MEM_ADDR_WIDTH; addr_i = addr_i + 1) begin : gen_addr_obuft
        OBUFT iob_addr_inst
        (.I  ( ioi_addr[addr_i]),
         .T   ( t_addr[addr_i]),
         .O ( mcbx_dram_addr[addr_i])
        );
      end      
   endgenerate



次のコードに置き換えます。

//// Address

genvar addr_delay_i;
  generate
      for(addr_delay_i = 0; addr_delay_i < C_MEM_ADDR_WIDTH; addr_delay_i = addr_delay_i + 1) begin : gen_addr_delay_obuft
        IODELAY2 #(
        .ODELAY_VALUE         (0),  // 0 to 255 inclusive
        .DELAY_SRC ("ODATAIN"),
        .SIM_TAPDELAY_VALUE   (50)  // 10 to 90 inclusive
) delay_addr_inst
        (.DOUT  (ioi_addr_delay[addr_delay_i]),
         .TOUT   (t_addr_delay[addr_delay_i]),
         .ODATAIN (ioi_addr[addr_delay_i]),
         .T ( t_addr[addr_delay_i])
        );
      end
  endgenerate

//// Address

genvar addr_i;
   generate
      for(addr_i = 0; addr_i < C_MEM_ADDR_WIDTH; addr_i = addr_i + 1) begin : gen_addr_obuft
        OBUFT iob_addr_inst
        (.I  ( ioi_addr_delay[addr_i]),
         .T   ( t_addr_delay[addr_i]),
         .O ( mcbx_dram_addr[addr_i])
        );
      end      
   endgenerate



これにより、各アドレス ビットに ODELAY コンポーネントが追加されます。

手順 3 - MIG で提供されている ise_flow.bat ファイルを使用して (example_design/par および user_design/par ディレクトリにある)、MIG デザインを、合成、インプリメンテーション、ビット生成まで実行します。

生成された BIT ファイルをハードウェアでテストし、データ エラーが発生するかどうかを確認します。

データ エラーが発生しない場合は、エンジニアリング サンプルでこのアドレス ビットのホールド違反が発生するということです。

この問題は製品シリコンで修正されています。当面は、上記の ODELAY を挿入する回避策を使用してください。
AR# 34089
日付 10/29/2015
ステータス アクティブ
種類 一般
IP