【数字IC/FPGA】利用Aurora IP核的NFC功能实现Aurora跨片数据的反压

本文介绍了NFC接口的工作原理,如何在高速接口Aurora中通过NFC和UFC模式进行数据流控制,以防止FIFO溢出。详细描述了NFC帧的内容和不同模式下的数据处理,以及在FPGA间的通信中如何通过状态机和Verilog仿真验证其功能。
摘要由CSDN通过智能技术生成

目录

一、NFC简介

二、仿真和测试

        NFC帧内容

        发送NFC_OFF(启动流控)

        发送NFC_ON(关闭流控)

   仿真verilog结果

在使用高速接口Aurora进行数据跨片传输时,发送端的axi有ready,而接收端的axi没有ready信号。所以接收端不能直接通过拉低ready信号对另一片FPGA的输出进行反压。这时候需要用到Aurora IP核自身的反压功能。

流控一共有两种模式一种是NFCUFC

Aurora 64B/66B仅支持GTYE3/GTYE4 16.375G设备的UFC功能

本次实验使用的是Aurora 64B/66B和NFC功能。

一、NFC简介

本地流控制(NFC)接口,其允许接收机通过指定必须放入数据流的空闲数据跳数来控制接收数据的速率。甚至可以通过请求发送器临时发送空闲(XOFF)来完全关闭数据流。NFC 通常用于防止FIFO 溢出条件。

Flow Control设置(针对Framing模式)

fedbb1238fe64b35958c844bf66c1b3c.png

Flow Control设置(针对Framing模式)

  • 立即模式允许将空闲代码插入数据帧内
  • 完成模式仅将空闲代码插入完整数据帧之间(仅适用Framing模式)

NFC接口如下:

365febb219eb461d8f278d6eb93000a0.png

二、仿真和测试

当接收端FPGA1_RX接收不过来时(用aururo_rdy=1'b0表示),需要往发送端FPGA2_TX发送NFC帧,暂停FPGA2_TX的发送。当aururo_rdy=1'b1时,再次发送NFC帧,关闭流控。

NFC帧内容

NFC不同模式下的data内容区分大小端模式,默认为大端模式,高位数据在低位。

  • data[7]=1,表示流控开启。此时数据流完全赞同。
  • data[8:15]为n时,使得另一片的FPGA发送数据包之间插入n+1个空闲时间。即FPGA1给FPAG2_TX的数据包之间插入空闲时间,降低TX的发送流量(降速),防止FPGA1_RX数据量太大处理不过来。
  • data[0:6]:全0,这个字段一般用不上(官方解释是don't  care)
  • [15:0]data=16'b0,全0表示流控关闭。
  • 实际应用时,需要降低流量,发送一帧NFC,其中data[7]=0,data[8:15]设置需要插入的空闲数,越大流量越少。需要完全截断流量时,设置data[7]=1,当需要关闭截断时,需要再发一帧data[7]=0的NFC帧。

大小端数据格式如下:

5b25d1d39b154d65a654a117d1f80f76.png

本次实验采用默认模式(大端),利用状态机实现状态跳转。

代码如下:

7d9651c9abd64574ac9639eeda03e2e7.png

状态转移图如下(粗略):

bf6c1cfe243f4aecbba570e7e48f1f42.png

发送NFC_OFF(启动流控)

当aururo_rdy信号为0(FPGA1_RX接收不过来),跳转到SEND_OFF_DATA,发送NFC帧。此时等待IP给出的s_axi_nfc_tready(一拍),一拍后nfc_valid和nfc_data信号随s_axi_nfc_tready信号同时拉低。

时序图如下:

4892c6711728450a8850fda3e6cff8f0.png

发送NFC_ON(关闭流控)

过程和状态机转移和发送NFC_OFF类似,但此时数据内容为全0,NFC插入空闲时间默认为2。也可以修改data内的数值。

Flag信号

为了防止aururo_rdy拉低或拉高时,多次发送NFC_OFF(开启流控帧)和NFC_ON(关闭流控帧),我采用了Flag信号进行指示。

一开始flag为0,当需要发送一帧NFC_OFF时,检测到flag为0,则发送NFC_OFF,同时flag拉高;当需要关闭流控,发送NFC_ON时,检测到flag为1,则发送NFC_ON,同时flag拉低。

仿真verilog结果

4d24931d3e0b4d5c90eaedfedab659b2.png

如图所示,红色的aururo_rdy是接收端给到FPGA1aururo的反压,拉低后,发送NFC帧给另一片FPGA2的TX端,使另一片tx_ready拉低,停止另一片的数据帧的发送。最后检查了帧的数量,没有发生丢帧的情况。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云归山_Lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值