当前位置:   article > 正文

XDMA与DDR结合光纤Aurora设计高速数据流通路设计/Aurora光纤设计/XDMA读取DDR设计/基于FPGA的高速数据传输设计_aurora 64b

aurora 64b

因最近想通过FPGA把数据从光纤传到PC,借此机会和大家一起学习Aurora、XDMA结合DDR

制作不易,记得三连哦,给我动力,持续更新!!!   

完整工程文件下载:XDMA读写DDR工程   提取码:4sxh


         根据前几个章节的学习,已经把DDR、XDMA的相关介绍和设置,已经配置完成了,接下来就再次升华一下,再把一个高速接口Aurora添加进来,完全实现一个 光纤-> PCIE 高速传输通路,此设计适用于各大进行高速数据传输的项目,最大速度可以达到10G。

        太多了理论知识,我也不想在这里废话,咱们直接来干货!!

        为了此次设计,可以进行下板测试,咱们需要把Aurora的发送和接收连接在一起,然后通过FPGA产生数据,通过Aurora发送,同时Aurora接受过来,然后把数据存储到DDR,并且通过XDMA连接到PCIE,通过XDMA驱动,在主机端读出数据,最终来验证读出来的数据是否和自己产生的数据匹配,通过添加ILA,抓取各个状态的数据状态。

        测试环境介绍:       

                1、FPGA主芯片:zynq7100

                2、光纤连接线

                3、PCIE主机(Windows10系统)(linux也可以,但是本文采用的Windows)

                4、vivado版本:2019.2

一、设计框图

二、设计思路                

2.1 Aurora数据产生模块设计

       2.1.1 代码设计

        此模块就需要借助之前的文章,Aurora的配置说明,不会的小伙伴记得去我的主页翻一下,然后就得到了一个官方的Aurora例子,咱们通过修改这个个例子,进行数据产生、发送、接受,该说不说xilinx真的很良心,再次点赞!!!!

        配置介绍:

                1、Aurora速度:10.125Gbps

                2、Aurora时钟:156.25Mhz

                3、接口模式:Framing模式

        先分析一下官方例子中的各个模块作用:

我们只需修改FRAME_GEN模块即可产生自己的数据,(AXI协议数据) 下面是具体修改的内容:

部分代码:

  1. assign reset_i = RESET || (!CHANNEL_UP);
  2. assign RESET_ii = RESET ;
  3. assign resetUFC = reset_i;
  4. assign i_ready = !TX_DST_RDY_N;
  5. integer i=0;
  6. reg [31:0] count;
  7. reg [63:0] array [0:3];
  8. initial begin
  9. array[0] = 64'h0000_0101_0202_0303;
  10. array[1] = 64'h0404_0505_0606_0707;
  11. array[2] = 64'h0808_0909_0A0A_0B0B;
  12. end
  13. reg [3:0] c_state, n_state;
  14. localparam IDLE = 0,
  15. DATA = 1,
  16. DATA2 = 2,
  17. LAST_DATA = 3,
  18. STOP = 4;
  19. always @ (posedge USER_CLK) begin
  20. if (reset_i)
  21. c_state <= 0;
  22. else
  23. begin
  24. c_state <= n_state;
  25. end
  26. end
  27. always @(*) begin
  28. case (c_state)
  29. IDLE : begin
  30. n_state = DATA;
  31. end
  32. DATA : begin
  33. if (i == 2 && i_ready)
  34. n_state = LAST_DATA;
  35. else
  36. n_state = DATA;
  37. end
  38. LAST_DATA : begin
  39. if(i_ready)
  40. n_state = STOP;
  41. else
  42. n_state = LAST_DATA;
  43. end
  44. STOP : begin
  45. if (count >=200_000_000)
  46. n_state = DATA;
  47. else
  48. n_state = STOP;
  49. end
  50. default : ;
  51. endcase
  52. end

然后再自己建立一个顶层,(因为开发板的时钟和复位可能不符合Aurora协议),然后把这个设计例化到顶层,添加好约束文件,综合、实现、生成、bit文件。

     2.1.2 发送数据验证

        添加ILA到工程,具体采集的几个信号如下:(包括了发送数据部分、接受数据部分、Aurora状态部分)

然后重新编译工程,下载bit文件到开发板

打开ILA界面,抓取tx_valid和tx_ready同时为高电平的时候的触发:(此时光纤必须回环连接)

如上图可以发现,就是按照咱们代码里的一样,发送出来三组数据00--0B

由此可以验证发送数据没问题!!

2.1.3 接受数据验证

        紧接着我们可以来验证一下接受数据信号,同样在刚刚的ILA里,把接受数据的一些列信号移动到一起:

如上图可以发现,接受的数据和发射的数据完全一致,因为是Framing模式,所以数据接收并没有ready信号。

由此可以验证发送数据没问题!!

2.2 xdma、DDR链路模块设计

        xdma、DDR链路本次设计采用block design设计

        配置介绍:

                1、PCIE链路速度:x4  5.0T

                2、PC操作系统:Windows10

                3、DDR:DDR3                

        2.2.1 代码设计

        首先先建立一个BD设计文件:

        然后可以基于以前的XDMA读写DDR系列文章,来根据你的硬件搭建,我这边就不过多介绍了,直接展示搭建完成的截图。

别忘了给分配地址:

然后把BD设计生成verilog代码,并且置为顶层:

添加好约束文件,综合、实现、生成、bit文件。

2.2.2 XDMA读写DDR验证

        下载bit文件到开发板,并且重启主机

        在powershell打开xdma驱动文件夹,并运行test.exe文件:

如上图所示,表示PCIE 向DDR写入4096字节,然后又从DDR读出4096字节,对比数据,数据一致。

由此可以验证XDMA读写DDR没问题!!

2.3 Aurora、XDMA、DDR连接设计

        Aurora和XDMA模块,在前面都是单独测试的,现在我们需要把他们连接起来,实现完整的通路,也是我们这篇文章的重点内容

        (1)首先把Aurora的文件置为顶层

        (2)在BD设计中添加数据接口,以及读写DDR部分代码,如下图所示                

        (3)编译一下BD文件,然后把BD设计例化到,Aurora的代码中,如下图所示     

          (4)同时也需要把DDR3,PCIE的端口添加到Aurora的顶层上面    

       (5)最终的工程层次关系如下:       

        (6)然后添加约束文件,综合、实现、生成、bit文件。

三、设计测试

        3.1 modelsim仿真测试

        首先先对设计进行仿真测试,确保读写DDR模块无误,此次测试需要我们重新创建一个工程,单独仿真使用,这个我们的工程文件里面也包括。        

        由上图可以看见,数据从产生到FIFO,然后再写入到DDR整个链路的数据完整无丢失,这样可以确认我们的写入DDR模块没问题,接下来就可以下班进行测试,相信应该也没什么大问题!!

        3.2 下板测试

        经过上面的设计,以及单独的测试,相信离我们的目标已经很接近了,下面就来展示一下测试的结果。

        将最终的bit文件下载到开发板,然后重启主机

        还是和刚刚的一样,使用XDMA驱动,来读取数据,读取从0地址4096个字节的数据,读取指令:

 .\xdma_rw.exe c2h_0 read 0x0000000 -b -f datafile4K_rd.bin -l 4096

然后使用二进制查看软件,查看datafile4k_rd.bin这个文件即可,作者使用的软件是HxD.exe,需要的小伙伴自行去下载即可。

如上图看出来,读出来的数据和写入的数据完全一致

还可通过ILA观察数据的写入过程,这边添加几个ILA的状态截图

光纤接受数据:

读写DDR状态:

PCIE读取状态:

由此可以验证本次设计整体没问题!!,终于大功告成啦!!!

如果感觉文章对您有用,麻烦三连支持一下,方便下次用到的时候,就可以快速找到我,非常感谢您的支持!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/701991
推荐阅读
相关标签
  

闽ICP备14008679号