LogiCORE IP Aurora 64B66B v10.0 或之后版本、即时NFC – 时钟校正可删除nfc传输

问题描述:

在 Aurora 64B66B v8.0 中,如果在二级 NFC 命令过程中时钟校正字符被强制,随即外部握手结束(nfc_tready 出现),但 txdata_c 未显示 NFC 命令。

这样会导致数据流不间断,而且数据 FIFO 将会溢流。该问题在组帧及流媒体传输用户接口类型中都可出现。

(1楼)解决方案

judyzhong 在 星期二, 10/10/2017 - 14:40 发表。

在随同 S_AXI_NFC_TVALID 断言 DO_CC 时,CC 不仅会按照协议进行优先级排序,而且还会被发送。

NFC 请求需要等待,直到 CC 完成并恢复工作。在发送 CC 后,内核不发送 NFC 请求。

注:使用用户生成的组件名称替换 <=: USER_COMPONENT_NAME :>。

在所生成内核的 src 目录中,按照如下方式更新 <=: USER_COMPONENT_NAME :>_tx_ll_control_sm.v[hd] 文件中的 NFC 状态机代码:

Verilog:
always @(posedge USER_CLK)
if(!CHANNEL_UP) do_nfc_r <= `DLY 1'b0;

else if(!TXDATAVALID_IN) do_nfc_r <= `DLY do_nfc_r;
else if(!do_nfc_r) do_nfc_r <= `DLY !NFC_REQ_N & (!(DO_CC | do_cc_r));
else do_nfc_r <= `DLY 1'b0;

VHDL:
process(USER_CLK)
begin
if(USER_CLK'event and USER_CLK='1') then
if(CHANNEL_UP = '0') then
do_nfc_r <= '0' after DLY;
elsif(TXDATAVALID_IN = '0') then
do_nfc_r <= do_nfc_r after DLY;
elsif(do_nfc_r = '0') then
do_nfc_r <= (not NFC_REQ_N) and (not (DO_CC or do_cc_r)) after DLY;
else
do_nfc_r <= '0' after DLY; end if;
end if;
end process;

该更新只适用于一个启用了本地数据流控制的 Duplex Aurora 64B66B 内核。此问题将在 Vivado 2016.1 版本中得以修复。