Xilinx PCIe与DDR经验谈

PCIe与DDR经验谈


一、PCIe_card_32ch实现框图

在这里插入图片描述
这种方法是,把DDR当做一个非常大的FIFO来使用,优点是:简单实用,缺点是:不适合复杂的数据投递

二、正点原子SRAM使用

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、常见的PCIE Endpoint设备数据交互方式

在这里插入图片描述
单工:DDR缓存足够大,Slave将所有数据投递完成后,Master才开始搬运数据。
双工:通过简单通讯机制,Slave和Master进行交互。列如,产生中断通知Master获取数据;另一方面,主机依据已经获取的packet数量,来通知Slave可以进行下次大规模数据传输。注意:Slave需要支持多个请求,及内部有请求buffer来缓存Master请求。因为当前请求可能未结束,Master就会下发新的请求。

四、通过AXI DMA的方式与DDR交互,然后PCIE读写DDR


如上图所示,DMA Controller实现下级模块数据搬移,对于DMA控制器而言,他只能实现数据搬移到DDR,这里只能搬移到PCIE采集卡的本地DDR,无法搬移到Host的DDR中,如果需要搬移到HOST DDR中,需要PCIE来搬移。
如上如所示,DDR中存放了DB0~DB4(Descriptor Buffer),Descriptor Buffer由HOST通过PCIE接口来写入,Descriptor Buffer通常有一下几个描述字段(可以参考xilinx dma datasheet 或者 VIRTIO/SRIOV):

/++++++++++++++++++++++++buffer descriptor++++++++++++++++++++++++++
offset | name | desciption
00 | nextdesc_ptr | bit4-0 is Rsvd.0x00->0x20->0x40->0x60.
04 | nextdesc_ptr_msb |
10 | da |
14 | da_msb |
18 | control | bit31-24:SOF/EOF/INT_EN/WIAT_FLAG/XX/XX/XX/XX bit23-0:cdma transfer len.
1C | status | bit3-0:DMAAXIWRERR/DMAAXIRDERR/SGAXIWRERR/SGAXIRDERR/SGINTERR/LEN_ERR/CPL. bit31-4:RSVD.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/

**nextdesc_ptr:**用于指示下一个DB地址;
**da:**表示DMA传输的起始地址
control: transfer len用来指示DMA传输长度,SOF/EOF,分别用来指示第一次dma传输和最后一次dma传输
****status:****CPL用来表示本次DMA传输是否结束。DMA传输可以是读也可以是写。

五、上送ADC数据到PCIe板卡

在这里插入图片描述
调试过程中遇到的问题:
A.ADC写入数据时,wr_natvie中的FIFO溢出问题:
1.FIFO代码出错,版本有问题,替换成VDMA的FIFO
2.PCIE Block Design中,AXI Interconnect IP核设置中,对输入和输出都添加32深度的FIFO,来提高性能(即带宽)
3.AXI WRITE的Burst长度由16改成256,来提升AXI写带宽效率;当ADC时钟为50M,数据位宽64,带宽约为3.2Gb/s,Burst长度为16时,FIFO溢出有计数,当修改为256时,FIFO不溢出。

六、PCIE采集卡FPGA内部实现框图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

七、PCIe调试过程中遇到的奇奇怪怪的问题

1.PCIe 8lane 在KU060上与PC机无法link,原因:DDR4与PCIE内部逻辑复位时序有要求。让PCIe先上电完成,等待link_up之后,再对DDR4进行初始化。
2.PCIE中断问题,配置IP Core为MSI中断,user_req发起请求且ack进行了应答,但是官方驱动没有打印中断。
类似现象,参考文章:(初步解决方法:对user_req信号进行延迟,保证CPU能响应中断,大约为0.5ms)
XDMA PCIE中断的处理
米联客(MSXBO)FDMA IP结合XDMA IP实现PCIE中断实现图像采集

3.软复位cfg_rst信号,由于该信号由寄存器控制,到了模块内部,该信号可能是异步信号,因此该信号进行跨时钟域处理,否则会出现复位异常,导致逻辑无法工作,且难以排查!
解决方法:模块内部使用相应时钟进行打怕处理,只是两排;或者使用xilinx提供的异步复位原语:

   xpm_cdc_async_rst #(
      .DEST_SYNC_FF(4),    // DECIMAL; range: 2-10
      .INIT_SYNC_FF(0),    // DECIMAL; 0=disable simulation init values, 1=enable simulation init values
      .RST_ACTIVE_HIGH(0)  // DECIMAL; 0=active low reset, 1=active high reset
   )
   xpm_cdc_async_rst_inst (
      .dest_arst(dest_arst), // 1-bit output: src_arst asynchronous reset signal synchronized to destination
                             // clock domain. This output is registered. NOTE: Signal asserts asynchronously
                             // but deasserts synchronously to dest_clk. Width of the reset signal is at least
                             // (DEST_SYNC_FF*dest_clk) period.

      .dest_clk(dest_clk),   // 1-bit input: Destination clock.
      .src_arst(src_arst)    // 1-bit input: Source asynchronous reset signal.
   );

4.Aurora信号的channel_up信号不易作为复位信号提供给其他逻辑,因为当光口信号稍差时,channel_up会不稳定,这样就意外的复位逻辑,soft_err信号需要计数,以便知道信号质量。
5.依然推荐整体工程中有一个复位管理模块,来控制各个模块的上电时序
6.对于脉冲同步信号,最好进行打两排进行时钟同步。

Xilinx Aurora是一种高速串行通信协议,被广泛用于FPGA(可编程逻辑器件)中的高性能数据传输应用。它是Xilinx公司开发的一种点对点通信协议,旨在提供高带宽和低延迟。 Xilinx Aurora具有以下特点和优势: 1. 高速性能:Aurora采用了低电平差分(LVDS)信号传输技术,在保证信号质量的前提下,实现了高速传输。它的传输速率可以达到多Gbps,适用于需要高带宽的应用场景,如图像处理、数据中心互连等。 2. 可靠性:Aurora采用了差分信号传输,具有较强的抗干扰能力和抗噪声能力,能够在高电磁干扰环境中稳定工作。同时,它还支持链路错误检测和纠正机制,可以检测和纠正数据传输过程中的错误,提高数据传输的可靠性。 3. 灵活性:Aurora协议可以在不同的FPGA平台上使用,具有较强的兼容性和可扩展性。它可以根据需求配置不同的链路宽度和数据速率,以适应不同应用场景的需求。 4. 低延迟:Aurora协议通过采用FPGA内部的硬件逻辑来实现数据传输,具有低延迟的特点。相比于其他传输协议,如PCIe,Aurora可以在更短的时间内完成数据传输,适用于对实时性要求较高的应用。 总之,Xilinx Aurora是一种高速、可靠、灵活和低延迟的串行通信协议,适用于FPGA中的高性能数据传输应用。它的优势包括高速性能、可靠性、灵活性和低延迟,能够满足不同应用场景的需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值