UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 64793

Aurora 8B10B v11.0 およびそれ以前のバージョンのデザイン アドバイザリ - Artix-7 GTP をターゲットにしている Simplex RX コアで MMCM のリセットがディアサートされず、RXRESETDONE が HIGH にならない

説明

この問題は、Aurora 8B10B コアで Artix-7 GTP をターゲットしているときに 4 バイト インターフェイス幅および Simplex RX データ フロー モードがコンフィギュレーションされているときのみに発生します。 

RX_STARTUP_FSM に接続されている RXOUTCLK 入力のクロックが user_clk で供給されています。 この user_clk は MMCM から出力されます (入力は txoutclk)。

MMCM のリセットは、RX_STARTUP_FSM で駆動され、これが RXOUTCLK に同期している RXPMARESETDONE 信号に基づいて駆動されています。この信号が High にならず、立ち下がりエッジが検出されています。

ソリューション

この問題は、Vivado 2015.2 でリリースされた Aurora 8B10B v11.0 Rev1 コアで修正されています。

v11.0 より前のバージョンでこの問題を修正する場合は、次のファイルをアップデートしてください。

  • <component_name>_wrapper.v[hd]
  • <component_name>_multi_gt.v[hd]
  • <component_name>_gt.v[hd]
  • <component_name>_rx_startup_fsm.v[hd]
  • <component_name>_clocks.xdc

===========================================================================

Verilog :

===========================================================================

<component_name>_wrapper.v:

次のワイヤを宣言します。

 wire              gt0_txpmaresetdone_o;
 wire              gt_txpmaresetdone_i;
 wire              gt_txoutclk_out;

1. 次に示すように BUFH を TXOUTCLK1_OUT 信号にインスタンシエートします。

次のように変更します。

       BUFH rxout0_buf
           (.O   (gt_txoutclk_out),
            .I   (TXOUTCLK1_OUT));

2. 手順 1 でインスタンシエートした BUFH の出力を RX_STARTUP_FSM インスタンシエーションの RXOUTCLK 入力に接続します。

変更前

.RXOUTCLK                       (RXUSRCLK2_IN),

次のように変更します。

.RXOUTCLK                       (gt_txoutclk_out),

3. <component_name>_multi_gt モジュールのインスタンシエーションで新しいポート接続を追加します。

.gt0_txpmaresetdone_out             (gt0_txpmaresetdone_o),

 

上記のコード例は、シングル レーンの使用例です。

複数レーンを使用する場合は、レーン数に基づいてポート接続を追加する必要があります。

次に、2 レーンを使用した場合のコード例を示します。

.gt0_txpmaresetdone_out             (gt0_txpmaresetdone_o),
.gt1_txpmaresetdone_out             (gt1_txpmaresetdone_o),

 

4. gt_txpmaresetdone_i を RX_STARTUP_FSM インスタンシエーションの TXPMARESETDONE 入力に接続します。

assign gt_txpmaresetdone_i  = gt0_txpmaresetdone_o;

上記のコード例は、シングル レーンの使用例です。 

複数レーンを使用する場合は、レーンから txpmaresetdone ポートへの接続をすべて AND 接続し、gt_txpmaresetdone_i に割り当てる必要があります。

次に、2 レーンを使用した場合のコード例を示します。

assign gt_txpmaresetdone_i  = gt0_txpmaresetdone_o && gt1_txpmaresetdone_o ;

変更前

RXPMARESETDONE                 (tied_to_vcc_i),

次のように変更します。

RXPMARESETDONE                 (gt_txpmaresetdone_i), 

<component_name>_multi_gt.v:

1. gt0_txpmaresetdone_out 信号に新しい出力ポートを宣言します。

output          gt0_txpmaresetdone_out,

2. <component_name>_gt モジュールのインスタンシエーションで新しいポート接続を追加します。

.txpmaresetdone_out             (gt0_txpmaresetdone_out),

上記のコード例は、シングル レーンの使用例です。 

複数レーンを使用する場合は、レーン数に基づいてポート接続を追加する必要があります。 

次に、2 レーンを使用した場合のコード例を示します。

<component_name>_gt_inst のコード例 :

.txpmaresetdone_out             (gt0_txpmaresetdone_out),

<component_name>_gt_inst_lane1 のコード例 :

.txpmaresetdone_out             (gt1_txpmaresetdone_out),

<component_name>_gt.v:

1. txpmaresetdone_out 信号に新しい出力ポートを宣言します。


output          txpmaresetdone_out,

 

2. GTPE2_CHANNEL コンポーネントのインスタンシエーションで TXPMARESETDONE 出力ポートへのポート接続を変更します。

変更前

.TXPMARESETDONE               (),

次のように変更します。

.TXPMARESETDONE               (txpmaresetdone_out),

 

<component_name>_rx_startup_fsm.v:

このモジュールでは、コードを次のように変更する必要があります。

1. rxpmaresetdone_i 関連回路を変更します。

269 行目にある次の割り当てを変更します。

変更前

rxpmaresetdone_i <= `DLY pmaresetdone_fallingedge_detect_s & rxpmaresetdone_rx_s;

次のように変更します。

rxpmaresetdone_i <= `DLY rxpmaresetdone_rx_s;

2. data_valid_sync 関連回路を変更します。

<component_name>_cdc_sync シンクロナイザーを削除して、591 行目で DATA_VALID 信号を data_valid_sync に割り当てます。

変更前

aurora_8b10b_0_cdc_sync
  #(
     .c_cdc_type      (1             ),  
     .c_flop_input    (0             ), 
     .c_reset_state   (0             ), 
     .c_single_bit    (1             ),  
     .c_vector_width  (2             ), 
     .c_mtbf_stages   (3              ) 
   )sync_data_valid_cdc_sync 
   (
     .prmry_aclk      (RXUSERCLK                  ),
     .prmry_rst_n     (1'b1                       ),
     .prmry_in        (DATA_VALID                 ),
     .prmry_vect_in   (2'd0                       ),
     .scndry_aclk     (STABLE_CLOCK               ),
     .scndry_rst_n    (1'b1                       ),
     .prmry_ack       (                           ),
     .scndry_out      (data_valid_sync            ),
     .scndry_vect_out (                           )
    );

次のように変更します。

assign data_valid_sync = DATA_VALID;

===========================================================================

VHDL :

===========================================================================

<component_name>_wrapper.vhd:
 
1. コンポーネント インスタンシエーションを変更します。

GT0_TXPMARESETDONE_OUT ポートを <component_name>_multi_gt コンポーネントに追加します。

 

GT0_TXPMARESETDONE_OUT                  : out  std_logic;

 

2. BUFH コンポーネントをインスタンシエートします。

 component BUFH
        port (
                O : out std_ulogic;
                I : in  std_ulogic
             );
    end component;
3. 次の信号を宣言します。

 signal gt0_txpmaresetdone_o : std_logic;
 signal TXOUTCLK_OUT : std_logic;
 signal gt_txpmaresetdone_i : std_logic;
 signal gt_txoutclk_out     : std_logic;

 

4. <component_name>_multi_gt インスタンシエーションの GT0_TXOUTCLK_OUT ポートの接続を変更します。

変更前

 GT0_TXOUTCLK_OUT          =>  TXOUTCLK1_OUT

次のように変更します。

 GT0_TXOUTCLK_OUT          =>  TXOUTCLK_OUT,

 

5. <component_name>_multi_gt モジュールのインスタンシエーションで新しいポート接続を追加します。

gt0_txpmaresetdone_out             => gt0_txpmaresetdone_o,

 

上記のコード例は、シングル レーンの使用例です。 

複数レーンを使用する場合は、レーン数に基づいてポート接続を追加する必要があります。 

次に、2 レーンを使用した場合のコード例を示します。

 gt0_txpmaresetdone_out             => gt0_txpmaresetdone_o,
 gt1_txpmaresetdone_out             => gt1_txpmaresetdone_o,

 

6. 次の信号を割り当てます。

 TXOUTCLK1_OUT       <= TXOUTCLK_OUT;
 gt_txpmaresetdone_i  <= gt0_txpmaresetdone_o; 

 

上記の gt_txpmaresetdone_i のコード例は、シングル レーンの使用例です。

複数レーンを使用する場合は、レーンから txpmaresetdone ポートへの接続をすべて AND 接続し、gt_txpmaresetdone_i に割り当てる必要があります。

次に、2 レーンを使用した場合のコード例を示します。

gt_txpmaresetdone_i  <= gt0_txpmaresetdone_o AND gt1_txpmaresetdone_o; 

 

 

7. 次に示すように BUFH を TXOUTCLK_OUT 信号にインスタンシエートします。
 

 rxout0_buf : BUFH
  port map
   (O =>  gt_txoutclk_out,
    I =>  TXOUTCLK_OUT); 

 

8. 手順 5 でインスタンシエートした BUFH を RX_STARTUP_FSM インスタンシエーションの RXOUTCLK 入力ポートに接続します。

変更前

 RXOUTCLK                       => RXUSRCLK2_IN,

次のように変更します。

 RXOUTCLK                       => gt_txoutclk_out

 

9. gt_txpmaresetdone_i を RX_STARTUP_FSM インスタンシエーションの RXPMARESETDONE 入力に接続します。

変更前
 

RXPMARESETDONE                 => tied_to_vcc_i, 

次のように変更します。

RXPMARESETDONE                 => gt_txpmaresetdone_i

 

<component_name>_multi_gt.v:

1. TXPMARESETDONE_OUT 信号に新しい出力ポートを宣言します。

GT0_TXPMARESETDONE_OUT                  : out  std_logic;

 

2. コンポーネント インスタンシエーションを変更します。

TXPMARESETDONE_OUT ポートを <component_name>_gt コンポーネントに追加します。

TXPMARESETDONE_OUT                  : out  std_logic;

 

3. <component_name>_gt モジュールのインスタンシエーションで新しいポート接続を追加します。

TXPMARESETDONE_OUT              =>      GT0_TXPMARESETDONE_OUT,

 

上記のコード例は、シングル レーンの使用例です。 

複数レーンを使用する場合は、レーン数に基づいてポート接続を追加する必要があります。 

次に、2 レーンを使用した場合のコード例を示します。

<component_name>_gt_inst を次のように接続します。

TXPMARESETDONE_OUT              =>      GT0_TXPMARESETDONE_OUT,

 

<component_name>_gt_inst_lane1 を次のように接続します。

TXPMARESETDONE_OUT              =>      GT1_TXPMARESETDONE_OUT,

 

<component_name>_gt.vhd:

1. TXPMARESETDONE_OUT 信号に新しい出力ポートを宣言します。

TXPMARESETDONE_OUT                      : out  std_logic;

 

2. 次の信号を宣言します。

signal    txpmaresetdone_t                : std_logic;

 

3. GTPE2_CHANNEL コンポーネントのインスタンシエーションで TXPMARESETDONE 出力ポートへのポート接続を変更します。

変更前

TXPMARESETDONE                  =>      open,

次のように変更します。

TXPMARESETDONE                  =>      txpmaresetdone_t,

 

4. 次の信号を割り当てます。

TXPMARESETDONE_OUT    <=   txpmaresetdone_t;

 

<component_name>_rx_startup_fsm.vhd:

このモジュールでは、コードを次のように変更する必要があります。

1. rxpmaresetdone_i 関連回路を変更します。

263 行目にある次の割り当てを変更します。

変更前
 

rxpmaresetdone_i <= pmaresetdone_fallingedge_detect_s and rxpmaresetdone_rx_s;

次のように変更します。
 

rxpmaresetdone_i <= rxpmaresetdone_rx_s;

 

2. data_valid_sync 関連回路を変更します。

<component_name>_cdc_sync シンクロナイザーを削除して、610 行目で DATA_VALID 信号を data_valid_sync に割り当てます。

変更前
 

sync_data_valid_cdc_sync : aurora_8b10b_1_cdc_sync
generic map
   (
     c_cdc_type      => 1             ,   
     c_flop_input    => 0             , 
     c_reset_state   => 0             , 
     c_single_bit    => 1             , 
     c_vector_width  => 2             , 
     c_mtbf_stages   => 3  
   )
port map  
   (
     prmry_aclk      => RXUSERCLK                         ,
     prmry_resetn    => '1'                               ,
     prmry_in        => DATA_VALID                        ,
     prmry_vect_in   => "00"                              ,
     scndry_aclk     => STABLE_CLOCK                      ,
     scndry_resetn   => '1'                               ,
     prmry_ack       => open                              ,
     scndry_out      => data_valid_sync                   ,
     scndry_vect_out => open 
    );

次のように変更します。

data_valid_sync <= DATA_VALID;

 ===========================================================================

<component_name>_clocks.xdc

次のように変更します。

変更前

set_false_path -through [get_pins -hier *cdc_to*]

次のように変更します。

set_false_path -to [get_pins -hier *cdc_to*]

 

改訂履歴

2015/08/03 - 初版

アンサー レコード リファレンス

マスター アンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
51553 LogiCORE IP Aurora 8B10B および Aurora 64B66B のデザイン アドバイザリ マスター アンサー レコード N/A N/A
AR# 64793
日付 08/17/2015
ステータス アクティブ
種類 デザイン アドバイザリ
デバイス
ツール
IP
このページをブックマークに追加