この問題は、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 より前のバージョンでこの問題を修正する場合は、次のファイルをアップデートしてください。
===========================================================================
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),
.gt0_txpmaresetdone_out (gt0_txpmaresetdone_o),
.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),
output txpmaresetdone_out,
.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 :
===========================================================================
GT0_TXPMARESETDONE_OUT : out std_logic;
GT0_TXOUTCLK_OUT => TXOUTCLK1_OUT
GT0_TXOUTCLK_OUT => TXOUTCLK_OUT,
gt0_txpmaresetdone_out => gt0_txpmaresetdone_o,
上記のコード例は、シングル レーンの使用例です。
複数レーンを使用する場合は、レーン数に基づいてポート接続を追加する必要があります。
次に、2 レーンを使用した場合のコード例を示します。
gt0_txpmaresetdone_out => gt0_txpmaresetdone_o,
gt1_txpmaresetdone_out => gt1_txpmaresetdone_o,
TXOUTCLK1_OUT <= TXOUTCLK_OUT;
gt_txpmaresetdone_i <= gt0_txpmaresetdone_o;
gt_txpmaresetdone_i <= gt0_txpmaresetdone_o AND gt1_txpmaresetdone_o;
rxout0_buf : BUFH
port map
(O => gt_txoutclk_out,
I => TXOUTCLK_OUT);
RXOUTCLK => RXUSRCLK2_IN,
RXOUTCLK => gt_txoutclk_out
RXPMARESETDONE => tied_to_vcc_i,
RXPMARESETDONE => gt_txpmaresetdone_i
GT0_TXPMARESETDONE_OUT : out std_logic;
2. コンポーネント インスタンシエーションを変更します。
TXPMARESETDONE_OUT ポートを <component_name>_gt コンポーネントに追加します。
TXPMARESETDONE_OUT : out std_logic;
TXPMARESETDONE_OUT => GT0_TXPMARESETDONE_OUT,
上記のコード例は、シングル レーンの使用例です。
複数レーンを使用する場合は、レーン数に基づいてポート接続を追加する必要があります。
次に、2 レーンを使用した場合のコード例を示します。
TXPMARESETDONE_OUT => GT0_TXPMARESETDONE_OUT,
TXPMARESETDONE_OUT => GT1_TXPMARESETDONE_OUT,
TXPMARESETDONE_OUT : out std_logic;
signal txpmaresetdone_t : std_logic;
TXPMARESETDONE => open,
TXPMARESETDONE => txpmaresetdone_t,
TXPMARESETDONE_OUT <= txpmaresetdone_t;
rxpmaresetdone_i <= pmaresetdone_fallingedge_detect_s and rxpmaresetdone_rx_s;
rxpmaresetdone_i <= rxpmaresetdone_rx_s;
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 |