当前位置:   article > 正文

FPGA-基于AXI4接口的DDR3读写顶层模块_fpga ddr3同时读写

fpga ddr3同时读写

一、AXI4简介

AXI4(Advancede Xtensible Interface 4)是一种高性能、高带宽的总线接口协议,用于在系统级芯片设计中连接不同的IP核(Intellectual Property)或模块。它是由ARM公司开发的,被广泛应用于各种SoC(System-on-Chip)设计中。

AXI4接口协议定义了一组规范,用于描述数据传输、地址传输、控制信号和时序等方面的要求。它提供了一种灵活的、可扩展的接口,支持高性能和低功耗的系统设计。以下是AXI4接口的一些关键特性:

  1. 高性能:AXI4接口支持并行数据传输和乱序传输,可以实现高带宽和低延迟的数据传输。它使用独立的读写通道,可以同时进行读写操作,提高了系统的吞吐量。
  2. 灵活性:AXI4接口支持多种传输模式,包括单个传输、突发传输和流传输。它还支持不同的传输宽度和字节顺序,可以适应不同的应用需求。

  3. 可扩展性:AXI4接口支持多个主设备和多个从设备的连接,可以构建复杂的系统结构。它使用ID信号来标识不同的传输,支持乱序传输和乱序应答,提高了系统的并行性能。

  4. 低功耗:AXI4接口使用了一些低功耗技术,如低功耗模式和时钟门控等,可以降低系统的功耗消耗。

AXI4接口广泛应用于各种SoC设计中,包括嵌入式系统、网络设备、图像处理器、数字信号处理器等。它可以连接处理器核、存储器、外设和其他IP核。Xilinx 的 mig ddr Ip 核,无论是 6 系列还是 7 系列还是最新的FPGA,都集成了 AXI4 接口,采用 AXI4 接口进行读写,后续可以兼容 xilinx的其他fpga,可复用性更强。

AXI4 协议支持突发传输,为存储映射接口(如果一个协议是存储映射的,那么主机所发出的会话(无论读或写)就会标明一个地址,这个地址对应于系统存储空间中的一个地址,表明是针对该存储空间的读写操作),主要用于处理器访问存储器等需要指定地址的高速数据传输场景。同样属于存储映射的接口AXI-Lite 为外设提供单个数据传输,主要用于访问一些低速外设中的寄存器。而 AXI-Stream 接口则像 FIFO 一样,数据传输时不需要地址,在主从设备之间直接连续读写数据,主要用于如视频、高速AD、PCIe、DMA接口等需要高速数据传输的场合。

AXI4接口由5个独立通道构成:写地址、写数据、写响应、读地址、读数据

写传输过程如图1所示,主机在写地址通道给出写地址和控制信号,然后在写数据通道连续突发写4个数据。从机在接收数据之后,在写响应通道给出响应信号。

图1 AXI4 写过程示意

 

图2 写数据时序图

读传输过程如图3所示, 在一个读传输过程中,主机首先在读地址通道给出读地址和控制信号,然后从机由读数据通道返回读出的数据。

图3 AXI4读取过程示意

 

图4 读数据时序图

二、 建立MIG的IP核工程

打开 IP Catalog 在搜索栏输入 mig(Memory Interface Generator),双击直接打开。Mig IP
核如名字所示,是一种存储器接口,可简易控制 ddr2,ddr3,ddr4 等存储器,7系列的 mig
ip 核只支持 ddr3,ddr2。

在IP核的Clock Period设置时,选择3125ps,对应320M,它是DDR3 芯片运行时钟周期,这个参数的范围和 FPGA 的芯片类型以及具体类型的速度等级有关,这个时钟是 MIGIP 核产生,并输出给 DDR3 物理芯片使用的,它关系到 DDR3 芯片具体的运行带宽,本次实验的开发板板载了 2 颗 DDR3 芯片,单个芯片数据位宽为16位,数据位宽总共 32 位,因为是双沿触发,这里带宽达到了20.48Gb/s(640M*32bit)

IP核的PHY to Controller Clock Ratio设置:DDR3 物理芯片运行时钟和 MIG IP 核的用户端(FPGA)的时钟之比,一般有 4:1 和 2:1 两个选项,高速传输的场合选择 4:1,要求低延时的场合选择 2:1。注意,当DDR3时钟选择选择了350M 到最高的400M时,比例默认只为4:1,低于350M才有4:1和2:1两个选项。由于 DDR 芯片的运行时钟是 320Mhz,因此 MIG IP 核的用户时钟(ui_clk)就是 160Mhz,该时钟是IP核 2:1 生成的时钟160M,而我们采用的 axi4 接口数据位宽设置为 64 位,用户端口带宽为10.48Gb/s(160M*64bit),刚好为 1 半物理带宽, ddr3 存储器物理上不能同时写与读, 而 axi4是可同时读与写的协议,因此我们为用户端口的读与写各自分配物理带宽的 1 半,如果用户端带宽大于物理端,会产生数据错误,本设计为读与写各自分配一半带宽,那么即便读与写同时进行操作,总带宽也只是达到DDR3的物理带宽,不会发生数据错误。
 

 三、AXI4写主机模块

AXI4 写模块将复杂的 AXI4 接口的写接口进行封装成简易的用户接口,用户接口包括fifo 端数据接口与若干控制信号。 AXI4 写接口包括写通道的写地址通道,写通道写数据通道,写通道写响应通道这三个接口,其中每组最重要的还是握手信号接口,主机发出 valid 告诉从机本数据有效,从机接收到 valid 发送 ready 告诉主机,准备已经就绪,就这样主机与从机完成了一个握手信号。
 

图5 写主机模块框图

 AXI4 写主机模块将左边的用户控制接口转换为标准的 AXI4 接口信号,用以控制基于AXI4 的 XILINX 存储器控制的MIG IP 核,完成 DDR3 DRAM 的写数据控制。

  1. `timescale 1ns/1ps
  2. module axi_master_write (
  3. input ARESETN ,//axi reset
  4. input ACLK ,//axi clock
  5. //AXI write passageway for addr
  6. output [3:0] M_AXI_awid ,//wr addr ID,for mark a group wr_signal
  7. (*mark_debug="true"*)output [31:0] M_AXI_awaddr ,
  8. (*mark_debug="true"*)output [7:0] M_AXI_awlen ,//transmission times
  9. output [2:0] M_AXI_awsize ,//byte volume of every transmission
  10. output [1:0] M_AXI_awburst ,//burst type,'01'represent increase,'10' opposite
  11. output M_AXI_awlock ,//总线锁信号
  12. output [3:0] M_AXI_awcache ,//存储类型
  13. output [2:0] M_AXI_awprot ,//保护类型
  14. output [3:0] M_AXI_awqos ,//质量服务Qos
  15. (*mark_debug="true"*)output M_AXI_awvalid ,//passageway addr ctrl signal valid
  16. (*mark_debug="true"*)input M_AXI_awready ,//slave machine allow accept addr and order
  17. //AXI write passageway for wr_data
  18. (*mark_debug="true"*)output [63:0] M_AXI_wdata ,
  19. output [7:0] M_AXI_wstrb ,//wr_data valid byte line,explain which 8bit is valid
  20. (*mark_debug="true"*)output M_AXI_wlast ,
  21. (*mark_debug="true"*)output M_AXI_wvalid ,//the write valid
  22. (*mark_debug="true"*)input M_AXI_wready ,//slave machine allow accept data
  23. //AXI write passageway for response
  24. input [3:0] M_AXI_bid ,//wr_resp ID TAG
  25. input [1:0] M_AXI_bresp ,//transmission state
  26. (*mark_debug="true"*)input M_AXI_bvalid ,//response valid
  27. output M_AXI_bready ,//lead plane can accept response
  28. //user port signal
  29. input WR_start ,//write burst signal
  30. input [31:0] WR_adrs ,//addr
  31. input [9:0] WR_len ,
  32. output WR_ready ,//write idle,to axi_ctrl module
  33. output WR_FIFO_re ,//connect to FIFO read enable
  34. input [63:0] WR_FIFO_data ,//connect to FIFO read data
  35. output WR_done //finish burst,给读写控制模块
  36. );
  37. //****************** Parameter and Internal Signal *******************//
  38. localparam S_WR_IDLE = 3'd0;
  39. localparam S_WA_WAIT = 3'd1;
  40. localparam S_WA_START = 3'd2;
  41. localparam S_WD_WAIT = 3'd3;
  42. localparam S_WD_PROC = 3'd4;//write data process
  43. localparam S_WR_WAIT = 3'd5;//write response
  44. localparam S_WR_DONE = 3'd6;
  45. //reg define
  46. reg [2:0] wr_state ;
  47. reg [31:0] reg_wr_adrs ;//addr reg
  48. reg reg_awvalid ;//addr valid handshaking
  49. reg reg_wvalid ;//data valid handshaking
  50. reg reg_w_last ;
  51. reg [7:0] reg_w_len ;//max of burst len is 256,but 128 is best
  52. reg [7:0] reg_w_stb ;
  53. //***************************** Main Code ****************************//
  54. assign WR_done = (wr_state == S_WR_DONE);
  55. assign WR_FIFO_re = (reg_wvalid & M_AXI_wready);
  56. assign M_AXI_awid = 4'b1111;//lead plane ID
  57. assign M_AXI_awaddr[31:0] = reg_wr_adrs[31:0];
  58. assign M_AXI_awlen[7:0] = WR_len - 'd1;
  59. //represent AXI4 bus every data width is 8byte,64bit
  60. assign M_AXI_awsize[2:0] = 3'b011; //3'b000为1字节、b001为2字节、b010为4字节
  61. //'01' for increase,'10' opposite
  62. assign M_AXI_awburst[1:0] = 2'b01;//地址递增型
  63. assign M_AXI_awlock = 1'b0;
  64. assign M_AXI_awcache[3:0] = 4'b0010;
  65. assign M_AXI_awprot[2:0] = 3'b000;
  66. assign M_AXI_awqos[3:0] = 4'b0000;
  67. assign M_AXI_awvalid = reg_awvalid;
  68. assign M_AXI_wdata[63:0] = WR_FIFO_data[63:0];
  69. assign M_AXI_wstrb[7:0] = 8'hFF;
  70. assign M_AXI_wlast = reg_w_last; //(reg_w_len[7:0] == 8'd0)?'b1:'b0;
  71. assign M_AXI_wvalid = reg_wvalid; //data handshaking
  72. assign M_AXI_bready = M_AXI_bvalid; //lead plane accept ack
  73. //axi state machine idle
  74. assign WR_ready = (wr_state == S_WR_IDLE)?'b1:'b0;
  75. //axi write process state machine
  76. always @(posedge ACLK or negedge ARESETN)
  77. if(!
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/999942
推荐阅读
相关标签
  

闽ICP备14008679号