关键问题
port_ok位 0 的状态,在链接重新初始化后,端口 0 错误和状态 CSR (0x158) 可能保持在低水平。链接的重新初始化要么通过在端口 0 控制 CSR (0x15C) 中触发 bit-23 PORT_DIS,要么在链接伙伴执行重置时完成。这可能会在正常操作期间导致严重错误,
出现此种问题的原因如下:
- 在收发器发出复位之前,RapidIO 内核可能已过重置。这使得 RapidIO 内核在收发器仍处于重置阶段时开始工作。
- 词重新校准过程限于通道 0,并且在链接重新初始化过程中仅触发一次。
此问题影响以下 RapidIO I 变体:
- Arria® V/Cyclone® V,采用 x2 模式。
- Arria V/Cyclone V,速度为 5000 Mbaud。
- Arria V,采用 x4 模式,速度为 3125 Mbaud。
为了确保收发器已过重置,并准备好在 RapidIO 内核之前启动任何操作,请使用模块中的收发器就绪状态信号符合 RapidIO 内核重置条件_riophy_reset:
TX_SIDE
始终 @(tx_clk或 negedge reset_n)
开始
如果 (!reset_n) 开始
tx_ready_s0
tx_ready_s1
结束其他开始
tx_ready_s0
tx_ready_s1
结束
结束
始终 @ (tx_clk或 negedge reset_n) 开始
如果(!reset_n)开始
txreset_n_p2
txreset_n_p1
txreset_n
结束其他开始
如果 (!gxbpll_locked_tx_clk_d2|| !tx_ready_s1)开始
txreset_n_p2
txreset_n_p1
txreset_n
结束其他开始
txreset_n_p2
txreset_n_p1
txreset_n
结束
结束
结束
RX_SIDE
始终 @(rx_clk或 nege reset_n)
开始
如果 (!reset_n) 开始
rx_ready_s0
rx_ready_s1
结束其他开始
rx_ready_s0
rx_ready_s1
结束
结束
始终 @ (rx_clk或 negedge reset_n) 开始
如果(!reset_n)开始
rxreset_n_p2
rxreset_n_p1
rxreset_n
结束其他开始
如果 (!rx_ready_s1) 开始
rxreset_n_p2
rxreset_n_p1
rxreset_n
结束其他开始
rxreset_n_p2
rxreset_n_p1
rxreset_n
结束
结束
结束
要触发字重新对齐过程手动进行,通过 Avalon-MM phy_mgmt 收发器接口执行以下步骤:
(1) 确定phy_mgmt_write=1'b1 指定写入操作。
(2) 将数据写入地址phy_mgmt_writedata=32'b0,以地址phy_mgmt_address=9'h80 为目标通道 0。
(3) 将数据写入地址phy_mgmt_writedata=32'b1 到地址phy_mgmt_address=9'h85,以表明rx_enapatternalign,这将触发通道 0 的字对齐操作。
(4) 将数据写入地址phy_mgmt_writedata=32'b0,地址phy_mgmt_address=9'h85,deassert rx_enapatternalign。
对于其它所有通道,重复上述步骤:通道 1(0x80=32'b1)、通道 2(0x80=32'b2)和通道 3(0x80=32'b3)。