AR# 64793

|

Aurora 8B10B v11.0 (或) 更早版本的设计咨询 — Artix-7 GTP — Simplex RX 内核没有断言 MMCM 重置,因此 RXRESETDONE 不为高

描述

只有在 Aurora 8B10B 内核以 4 字节接口宽度以及面向 Artix-7 GTP 的 Simplex RX 数据流模式配置时,才会出现该问题。

连接至 RX_STARTUP_FSM 的  RXOUTCLK 的输入由  user_clk 源出,user_clk 为 MMCM 输出(输入为 txoutclk)。 

MMCM 的重置是从 RX_STARTUP_FSM  驱动的,并且 是根据同步到 RXOUTCLK 的 RXPMARESETDONE 信号来驱动的。负边沿检测现已完成。

解决方案

此问题在 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. 如下所示,按 TXOUTCLK1_OUT 信号实例化 BUFH。

更新:

       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),

 

以上代码段是单通道使用案例。

对于多通道方案,需要根据通道数量增加端口连接。

例如,在双通道情况下代码段如下。

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

 

4. 将 gt_txpmaresetdone_i 连接至 RX_STARTUP_FSM 实例化的 RXPMARESETDONE 输入。

assign gt_txpmaresetdone_i  = gt0_txpmaresetdone_o;

以上代码段适用于单通道使用案例。 

对于多通道情况而言,需要将每个通道的 txpmaresetdone 端口连接累加到一起 并分配给  gt_txpmaresetdone_i。

例如,在双通道情况下代码段如下:

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),

以上代码段适用于单通道使用案例。 

对于多通道情况而言,需要根据通道数量增加端口连接。 

例如,在双通道情况下代码段如下。

From <component_name>_gt_inst:

.txpmaresetdone_out             (gt0_txpmaresetdone_out),

From <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;

To:

rxpmaresetdone_i <= `DLY rxpmaresetdone_rx_s;

2. 更新  data_valid_sync 相关电路。

移除 <component_name>_cdc_sync 同步器并将 DATA_VALID 信号分配给第 591 行中的 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 (                           )
    );

To:

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

To

 GT0_TXOUTCLK_OUT          =>  TXOUTCLK_OUT,

 

5. 对于 <component_name>_multi_gt 模块 实例化而言,需要一个新的端口连接:

gt0_txpmaresetdone_out             => gt0_txpmaresetdone_o,

 

以上代码段适用于单通道使用案例。 

对于多通道情况而言,需要根据通道数量增加端口连接。 

例如,在双通道情况下代码段如下。

 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 端口连接累加到一起 并分配给  gt_txpmaresetdone_i。

例如,在双通道情况下代码段如下。

gt_txpmaresetdone_i  <= gt0_txpmaresetdone_o AND gt1_txpmaresetdone_o; 

 

 

7. 如下所示,按 TXOUTCLK_OUT 信号实例化 BUFH。
 

 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.vhd:

1. 声明 TXPMARESETDONE_OUT 信号的新输出端口。

GT0_TXPMARESETDONE_OUT                  : out  std_logic;

 

2. 更新组件实例化。

Add aTXPMARESETDONE_OUT port to <component_name>_gt.

TXPMARESETDONE_OUT                  : out  std_logic;

 

3.  对于 <component_name>_gt 模块实例化而言,需要一个新的端口连接。

TXPMARESETDONE_OUT              =>      GT0_TXPMARESETDONE_OUT,

 

以上代码段适用于单通道使用案例。 

对于多通道情况而言,需要根据通道数量增加端口连接。 

例如,在双通道情况下代码段如下。

From <component_name>_gt_inst:

TXPMARESETDONE_OUT              =>      GT0_TXPMARESETDONE_OUT,

 

From <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;

To:
 

rxpmaresetdone_i <= rxpmaresetdone_rx_s;

 

2. 更新 data_valid_sync 相关电路。

移除 <component_name>_cdc_sync 同步器并将 DATA_VALID 信号分配给第 610 行中的 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*]

 

修订历史:

08/03/2015——初始版本

链接问答记录

主要问答记录

Answer Number 问答标题 问题版本 已解决问题的版本
51553 Design Advisory Master Answer Record for LogiCORE IP Aurora 8B10B and Aurora 64B66B N/A N/A
AR# 64793
日期 08/17/2015
状态 Active
Type 设计咨询
器件
Tools
IP
People Also Viewed