一、ddr3(全称第三代双倍速率同步动态随机存储器):
1、特点:1:掉电无法保存数据,需要周期性的刷新。2:时钟上升沿和下降沿都会传输数据。
3:突发传输,突发长度 Burst Length一般为8。
2、DDR3的存储:bank、行地址和列地址
假设下图为bank 0:
3、数据怎么存入DDR3:先指定一个Bank地址,再指定行地址,最后指定列地址。
DDR3容量计算:bank数量 X 行数量 X 列数量 X 存储单元容量。
比如bank address位宽为3,ROW address位宽为14,Coulmn address为10,则容量为2^3 X 2^14 X 2^10 X 16
二、MIG IP核
MIG IP核(Memory Interface Generators) IP 核是Xilinx公司针对DDR存储器开发的 IP,里面集成存储器控制模块,实现DDR读写操作的控制流程。通过MIG IP核,可以很容易的控制DDR3的读写操作,即只需要控制用户端的端口即可对DDR3进行操作。
基本框图如下:
写数据:用户把数据写入到MIG IP核,MIG IP核自动将数据写入到DDR3芯片
读数据:用户发送读命令给MIG IP核,MIG IP核收到命令后将数据从DDR3芯片读出来,再发送给用户端
1.时钟
MIG IP核有两个FPGA给的时钟,分别是sys_clk(系统时钟)和ref_clk(参考时钟),参考时钟频率必须为200M,DDR3芯片的时钟是由MIG IP核的sys_clk通过PL倍频输出给DDR3,且DDR3的工作时钟是由差分的形式(两条线,一条P,一条N,更稳定)。用户端也有一条时钟叫用户时钟,也是通过系统时钟倍频输出给用户端,一般叫ui_clk。
1.1.DDR3芯片工作的时钟与用户端时钟有一个比例关系:
DDR3芯片的工作频率:用户端时钟频率 = 4:1或者2:1,比如DDR3芯片时钟频率为400M的时候,用户端就只能为100M或者200M,但当DDR3芯片的工作时钟为800M时,比例只能为4:1,即用户端频率只能为200M。
2.如果是zynq系列的芯片流程有点不一样:
DDR3一般是挂在PS端这边的bank里,想往DDR3里写入数据不会例化这个IP核,可以直接往AXI_HP这个接口写数据
3:用户端接口有两种,分别是:Native接口和AXI4接口
3.1 Native接口:
3.2 AXI4接口:
4:MIG IP核的配置
4.1 系统时钟有三个选项,Differential,Single-Ended,No Buffer。
各项配置信息网上资料很多,不再详细描述。
当系统时钟为200M时,这200M是从何而来的?
第一种:比如外面有个晶振,它产生频率为50M的时钟,时钟进入FPGA内部的倍频器(PLL),最后通过PLL产生200M时钟。这种情况选择NO Buffer
第二种:晶振产生的频率就为200M,且进入FPGA内部后未通过PLL,直接输入给MIG IP核,该种情况选择剩下的两种情况。如果外部产生的频率进入内部是通过差分的形式(双端)就选择 Differential,但外部输入时钟如果是单端的,就选择Single-Ended。如下图红框所示(绿线表示双端):
4.2 XADC作用:1.可以检测FPGA开发板的温度 2.模拟信号转化为数字信号(异核)
XADC只能使用一次,别的模块使用了该XADC,在配置该IP核的时候就选择disabled,如果其他模块未使用XADC,就可以选择Enabled
4.3
参考:
MIG IP配置_哔哩哔哩_bilibili
MIG IP核详解-CSDN博客