【FPGA】十三、Vivado MIG IP核实现DDR3控制器(1)

文章目录


前言

        我们在进行FPGA开发应用当中,经常会用到存储器来保存数据,常用的存储器有ROM、FIFO、SDRAM等等,这些存储器对于数据量小的情况下还尚可使用,但是如果我们需要做图像采集,数据处理等大量数据需要存储和传输的时候,这些存储器就有点力不从心了,需要寻找存储量大并且传输速率快的存储器,而DDR3不论是从存储量还是从传输速率上来看都是满足当前需求的,并且在常用的FPGA开发板上也比较常见。

        DDR3的时序是比较复杂的,所以我们在使用DDR3芯片的时候,通常会选择IP核,这样不仅提升了开发效率,并且还能使程序运行稳定,下面我们就一起来学习基于Xilinx公司开发的MIG IP核,来实现DDR3芯片的控制。

一、DDR3基础知识

1、DDR3概述:

        DDR3 SDRAM全称是第三代双倍速率同步动态随机存储器,由于其存储容量大以及传输速度快在现代电子设备中得到了广泛的应用。DDR3的本质是一个SDRAM,只是DDR3是采用时钟双边沿进行数据传输。

        DDR3的特点:

        ① 掉电无法保存数据,需要周期性刷新,这是由于其是电荷存储数据导致的;

        ② 时钟上升沿和下降沿都会传输数据,与SDRAM单边沿传输数据不同;

        ③ 突发传输,突发长度一般为8。

        DDR3的存储规则:

         数据存入DDR3的过程:需要先指定一个bank地址,然后指定行地址,最后指定列地址,再将数据写入即可。

        DDR3容量计算:bank数量*行数量*列数量*存储单元容量。

2、DDR3命名规则:

         MT41J:表示一个DDR3代号

        64M:表示bank‘、行、列的数量

        16:表示DDR3的数据位宽,即存储单元容量

        -125:表示DDR3速度等级,可以根据速度等级计算DDR3的时钟频率。

3、DDR3时钟设计:

 DDR3时钟类型:

        ① 系统时钟:MIG IP核工作时钟,命名为sys_clk;

        ② 参考时钟:MIG IP核参考时钟,必须为200M,命名为ref_clk;

        ③ 用户端时钟:MIG IP核输出给用户端的时钟,命名为ui_clk;

        DDR3芯片工作时钟与用户端时钟有一定的比例关系,DDR3芯片工作时钟:用户端时钟 = 4:1或者2:1,当DDR3芯片工作输出时钟为800M时,比例只能是4:1。

二、MIG  IP核的配置

        MIG(Memory Interface Generators)IP是Xilinx公司针对DDR存储器开发的IP核,里面集成了存储器控制模块,实现DDR读写操作的控制流程。有了这个IP核,我们在对DDR3芯片进行数据读写操作时,就不用去管DDR复杂的时序控制,只需要根据MIG IP核用户端的逻辑来配置即可,能够减少开发者的工作量以及程序的正确性,下面我们就来配置MIG IP核。

1、首先建立一个工程,在建立好的工程中点击IP Catalog,搜索MIG IP核。

2、 双击进入MIG IP核,第一个页面就是对MIG IP核做了一些简单的介绍,包括Vivado工程选项,以及你这个工程所选用的器件。最下方的User Guide是Xilinx公司提供的MIG IP核介绍及配置的官方文档,可以帮助你了解整个MIG IP核的所有信息。

 3、点击Next,进入第二页,这一页包含了MIG输出选项、组件名称、支持多个控制器和启用AXI4接口选项,可根据需要进行配置。这里我们设置名称为mig_16b,不勾选AXI4选项,默认就是Native接口。

 4、点击Next,进入第三页,这一页是针对兼容器件的选择,可以兼容多个器件。

 5、点击Next,进入第四页,选择你需要使用的存储器件,我这里选择DDR3 SDRAM。

 6、点击Next,接下来就开始进行DDR3存储器IP核的配置了:

① Clock Period:选择期望的时钟频率,这里的时钟频率是接口时钟频率,我这里是400MHZ;

② PHY to Controller Clock Ratio:PHY与控制器的时钟比,也就是DDR3芯片工作时钟与用户端时钟比例,这里是4:1;

③ Memory Type:存储器类型,DDR3存储器规格;

④ Memory Part:存储器型号,不同型号的存储器所定义的地址位宽是不一样的,同时数据传输速率也会有所区别,我这里选择MT41J128M16XX-125;

⑤ Data Width:数据位宽,根据DDR3存储器来选择,我这里选择的是16位;

⑥ Data Mask:数据掩码,可用其来控制数据有效位数;

⑦ Number of Bank Machines:DDR控制器的bank machines个数设置;

⑧ ORDEING:模式选择,这里选择Strict模式,表示直接执行我的指令。

 7、点击Next,继续进行DDR3 IP核的配置,这里主要选择输入DDR3芯片的时钟,我这里选择200MHZ,其余保持默认即可。

 8、点击Next,继续配置DDR3 IP核:

① System Clock:这个选择系统时钟的来源,有差分时钟,单端时钟和内部时钟,我这里选择内部时钟;

② Reference Clock:这个时钟必须存在,并且必须是200MHZ,这里选择时钟来源;

③ System Reset Polarity:复位极性选择,这里选择低电平复位;

④ Debug Signals Control:调试信号,可以通过调试信号来调试DDR3,勾选上就是在其内部例化一个ILA调试IP核,我这里选择关闭;

⑤ 其余保持默认即可。

 9、点击Next,这一页表示外部阻抗匹配,这里设置50Ohms。

 10、点击Next,这一页是引脚配置,第一种适合DDR3存储器硬件还没确定的情况,先进行工程开发,后面再来配置引脚;第二种适合已经确定了DDR3芯片的硬件了,就直接将引脚分配完成了。

 11、后面一直点击Next,其余不用我们进行配置,在法律条文板块勾选Accept。

 12、最后一步点击Generate就完成了!

 到此为止,我们的DDR3控制器IP核就已经配置完成了!

三、DDR3 IP核用户端接口时序

        在我们配置好DDR3 IP核过后,就需要用到它的例化模块了,下面我们就来看一下它的用户端各个接口的功能以及读写时序。

        下图是7系列FPGA的MIG IP核Native接口机构框图,MIG IP核对外分出了两组接口,左侧是用户端接口,用来对MIG IP核进行操作控制;右侧是DDR3物理芯片接口,负责产生具体的操作时序,并直接作用与DDR3芯片,不需要我们进行配置。

1、DDR3 IP核接口说明

        下图是DDR3 IP核例化的引脚接口,我对其进行了一定的解释说明:

         注意:这里的输入\输出是相对于MIG IP核来说的,例如ui_clk就是output给用户侧的用户时钟。

2、DDR3 IP核读写时序

        在运用MIG IP核进行DDR3控制器的设计当中,主要是对DDR3芯片进行数据写入和读取操作,需要对其命令时序,写数据时序以及读数据时序进行操作,其中无论是读或者写操作都包含了写命令操作,其中写操作命令(app_cmd)的值等于0,读操作命令(app_cmd)的值等于1。

① 写命令时序:

        DDR3写命令时序如下图所示,在进行写命名操作之前,需要先检查app_rdy,如果为高电平则表示此时MIG IP核处于接收命令准备好状态,可以接收用户命令;然后再当前时钟拉高app_en,同时发生命令(app_cmd)和地址(app_addr),此时命令和地址会被同时写入。这里需要注意地址的构成,app_addr = bank地址+行地址+列地址(拼接而成)。

 ② 写数据时序:

        DDR3写数据时序如下图所示,在DDR3写数据时,首先检查app_wdf_rdy,如果为高电平则表示此时MIG IP核处于接收数据准备完成状态,可以接收用户发送过来的数据;然后在当前时钟拉高写使能(app_wdf_wren),给出写数据(app_wdf_data),这样加上发起的写命令操作就可以将数据成功写入MIG IP核内了。

注意在进行写数据操作时,有三种方式:

        ① 写命令与写数据发生在同一时钟周期;

        ② 写数据先于写命令发送;

        ③ 写数据落后于写命令操作,但不能超过两个时钟周期。

 ③ 读数据时序:

        相比于写命令和写数据时序,DDR3的读数据时序就比较简单了,需要向DDR3芯片读取数据时,只需发送读命令,用户只需要等待数据有效信号(app_rd_data_valid)拉高,数据有效信号为高电平则表示此时数据总线上的数据是有效的,是我们所需要的数据。这里需要注意的是,当我们发出读数据命令后,数据不一定会马上返回,可能会晚几个时钟周期。

总结

        在进行DDR3芯片读写操作时,优先选择MIG IP核,因为使用IP核不仅能降低工程师开发难度,并且会大大提高工程的稳定性。如果不使用IP核,那么就需要自己设计DDR3的控制器,由于DDR3芯片的控制时序很是复杂,并且还需要用到一些专用的原语进行设计,所以设计难度不言而喻,而使用MIG IP核进行设计时,就不需要考虑DDR3那复杂了操作逻辑了,只需要对MIG IP核用户端接口进行简单的时序设计,开发效率也得到了极大地提升。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年8月4日
下一篇 2023年8月6日

相关推荐