当前位置:   article > 正文

Xilinx 高速AD 设计参考(在网上找到的总结)_xdma bar

xdma bar

基于Xilinx FPGA 的PCIE开发教程

 

一、XDMA配置

  1. 创建一个BD文件

 

 2. 添加PCIE的IP

 选择这个IP对应的用户接口为AXI4或者AXI4-stream

3. 双击IP,进行配置

 

参数:

(1) PCIe Block Location

选择PCIe所在quad,该选择会生成特定的引脚和区域约束文件和引脚分配,有的FPGA芯片有多个PCIe location,在选择芯片的时候也可以看到。

(2) Lane Width

选择用多少通道进行传输,下面是PCIe理论传输速度表格:

 

3)AXI data Width

           AXI主要用于传输数据,传输带宽64或128可选。

(4)Maximum Link Frequency

            每个传输通道的最大速度

(5) AXI Clock Frequency

           选择AXI参考时钟,根据位宽的不同,时钟是固定的。

(6)DMA Interface option

           接口选择AXI

(7)AXI4-Lite Slave

          可选,用来将XDMA 内部寄存器开放给用户逻辑,用户逻辑可以通过此接口访问 XDMA内部寄存器,不会映射到BAR。我这里没有选择

PCIe 的几个ID不需要更改:

 

 

1)PCIE to AXI Lite Master Interface

            主机一侧通过PCIE 来访问用户逻辑侧寄存器或者其他AXI4-Lite 总线设备。

(2)size

            选择1M,可以根据实际需要大小进行配置。

(3) PCIE to AXI Translation

            通常情况下,主机侧PCIE BAR 地址与用户逻辑侧地址是不一样的,这个设置就是进行BAR 地址到AXI 地址的转换,比如主机一侧 BAR 地址为0,IP 里面转换设置为 0x80000000,则主机访问 BAR 地址 0 转换到AXI LIte 总线地址就是0x80000000。

 

上面这页是DMA中断的配置,共提供16条中断线。

Legacy Interrupt:传统中断,非MSI中断,PCI设备使用INTx中断请求的方式与电平触发类似,而MSI/MSI-X中断请求的方式与边沿触发方式类似。当PCI设备的INTx信号有效时,PCIe桥将该信号转换为Assert_INTX消息报文,当这些INTx信号无效时,PCIe桥将该信号转换为Deassert_INTx中断信号。

注意:MSI 中断和 MSI-X 中断只能选择一个,否则会报错,如果选择了 MSI 中断,则可以选择 Legacy 中断,如 果选择了 MSI-X 中断,那么 MSI 必须取消选择,同时Legacy 也必须选择None。此 IP 对于7 系列设置有这个问题,如果使用Ultrascale 系列,则可以全部选择。

 

(1) Number of DMA Read Channel( H2C)& Number of DMA Write Channel(C2H)

对于PCIE2.0 来说最大只能选择 2,也就是 XDMA 可以提供最多两个独立的写通道和两个独立的读通道, 独立的通道对于实际应用中 有很大的作用,在带宽允许的前提前,一个PCIE 可以实现多种不同的传输功能,并且互不影响。

注意:多通道时在AXI Stream模式下影响很明显,在AXI Stream模式下选择多通道,可以连接不同的数据源。在AXI Memory Mapped模式下影响不大。

(2)Number of Request IDs for Read (Write) channel

这个是每个通道设置允许最大的 ID 数量,按照默认即可。

 

 

 这个位置可能会自己更改,我们改成和XDMA IP核相同的配置即可。下图1、2、3分别代表PCIe的复位、时钟、接口,可以通过双击端口进行名字的修改:

 

 至此,XDMA配置完毕。

二、MIG的配置

这里需要接板卡上的DDR,如果相接BRAM,这里可以跳过。

MIG(Memory Device interface speed)本质是一个内存控制器,IP核的输出接口和内存相连。

 

 根据实际型号进行选择即可:

 

 

(1) Memory Device interface speed

表示的是外部时钟频率1.2G,所以它的数据传输速率为2.4G,带宽为2.4G×64/8 = 19.2GB

根据板卡的实际情况进行选择。

 

根据板卡的实际型号进行选择即可。

(4)这里还不是很清晰要怎么选择

选择64位位宽,这就是上面速率计算的原理。

其它栏目的选项直接默认即可。

生成MIG IP后,分别点:

 

 这里多了两个IP,一个是asi_smc,另一个是rst_ddr4_0_300M

  1. asi_smc功能

给位宽转换提供足够的时间,与AXI_interconnect IP功能相似,后续的文章不再使用它,换成AXI_interconnect IP。这里点开IP,把时钟改成1个

 

2. rst_ddr4_0_300M

Xilinx处理器系统复位模块允许客户通过设置某些参数来启用/禁用功能,从而根据自己的应用来定制设计。

想详细了解的可以参考下面的文章(这个IP不需要做任何的修改):Xilinx IP解析之Processor System Reset v5.0_徐晓康的博客的博客-CSDN博客_proc_sys_reset

修改axi_smc后的,Diagram如下:

host如何通过AXI4接口读写DDR(或者BRAM)和通过AXI-LITE接口读写控制信号,BD图如下图所示:

 

 可以看到M_AXI通过interconnecte IP连接到DDR4,M_AXI_LITE通过interconnecte IP连接到bram_ctrl,将BRAM_PORTA引出,在FPGA侧进行控制信号的读写。

软件开发

FPGA:赛灵思KU115

HOST:ubuntu 18.04

Driver:XDMA,具体安装方法参考 HiFive Unmatched开发板安装XDMA(linux安装XDMA) - 知乎

HOST主要代码:

主函数中,通过调用pcie初始化,写控制,读控制,写数据、读数据。

  1. # include "stdio.h"
  2. #include <assert.h>
  3. #include <fcntl.h>
  4. #include <getopt.h>
  5. #include <stdint.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include <unistd.h>
  10. #include <time.h>
  11. #include <pthread.h>
  12. #include <semaphore.h>
  13. #include <stdarg.h>
  14. #include <syslog.h>
  15. #include <sys/mman.h>
  16. #include <sys/stat.h>
  17. #include <sys/time.h>
  18. #include <sys/types.h>
  19. #include <sys/sysinfo.h>
  20. #include <unistd.h>
  21. #include <dirent.h>
  22. #include <string.h>
  23. /* ltoh: little to host */
  24. /* htol: little to host */
  25. #if __BYTE_ORDER == __LITTLE_ENDIAN
  26. # define ltohl(x) (x)
  27. # define ltohs(x) (x)
  28. # define htoll(x) (x)
  29. # define htols(x) (x)
  30. #elif __BYTE_ORDER == __BIG_ENDIAN
  31. # define ltohl(x) __bswap_32(x)
  32. # define ltohs(x) __bswap_16(x)
  33. # define htoll(x) __bswap_32(x)
  34. # define htols(x) __bswap_16(x)
  35. #endif
  36. #define MAP_SIZE (1024*1024UL)
  37. #define MAP_MASK (MAP_SIZE - 1)
  38. #define FPGA_AXI_START_ADDR (0)
  39. void *control_base;
  40. int control_fd;
  41. int c2h_dma_fd;
  42. int h2c_dma_fd;
  43. static unsigned int h2c_fpga_ddr_addr;
  44. static unsigned int c2h_fpga_ddr_addr;
  45. static int open_control(char *filename)
  46. {
  47. int fd;
  48. fd = open(filename, O_RDWR | O_SYNC);
  49. if(fd == -1)
  50. {
  51. printf("open control error\n");
  52. return -1;
  53. }
  54. return fd;
  55. }
  56. static void *mmap_control(int fd,long mapsize)
  57. {
  58. void *vir_addr;
  59. vir_addr = mmap(0, mapsize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
  60. return vir_addr;
  61. }
  62. void write_control(int offset,uint32_t val)
  63. {
  64. uint32_t writeval = htoll(val);
  65. *((uint32_t *)(control_base+offset)) = writeval;
  66. }
  67. uint32_t read_control(int offset)
  68. {
  69. uint32_t read_result = *((uint32_t *)(control_base+offset));
  70. read_result = ltohl(read_result);
  71. return read_result;
  72. }
  73. void put_data_to_fpga_ddr(unsigned int fpga_ddr_addr,short int *buffer,unsigned int len)
  74. {
  75. lseek(h2c_dma_fd,fpga_ddr_addr,SEEK_SET);
  76. write(h2c_dma_fd,buffer,len*2);
  77. }
  78. void get_data_from_fpga_ddr(unsigned int fpga_ddr_addr,short int *buffer,unsigned int len)
  79. {
  80. lseek(c2h_dma_fd,fpga_ddr_addr,SEEK_SET);
  81. read(c2h_dma_fd,buffer,len*2);
  82. }
  83. int pcie_init()
  84. {
  85. c2h_dma_fd = open("/dev/xdma0_c2h_0",O_RDWR | O_NONBLOCK);
  86. if(c2h_dma_fd < 0)
  87. return -1;
  88. h2c_dma_fd = open("/dev/xdma0_h2c_0",O_RDWR );
  89. if(h2c_dma_fd < 0)
  90. return -2;
  91. control_fd = open_control("/dev/xdma0_user");
  92. if(control_fd < 0)
  93. return -5;
  94. control_base = mmap_control(control_fd,MAP_SIZE);
  95. return 1;
  96. }
  97. void pcie_deinit()
  98. {
  99. close(c2h_dma_fd);
  100. close(h2c_dma_fd);
  101. close(control_fd);
  102. }
  103. unsigned int len = 4096;
  104. int read_fftdata(short int *buf1){
  105. FILE *fpread=fopen("fft_linux.txt","r");
  106. if(fpread == NULL) return 1;
  107. for(int i=0;i<len;i++) fscanf(fpread, "%hd", &buf1[i]);
  108. return 0;
  109. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/721419
推荐阅读
相关标签
  

闽ICP备14008679号