1.双击 Memory Interface Generator(MIG 7 Series)
2.next
3.注意下面箭头处无需勾选,倘若勾选,则是选择AXI接口,本次使用的是native接口
4.next,此处无需考虑兼容其他器件。
5.选择DDR3
6.第一个箭头,是指DDR3能够运行的周期(2500ps),即最大频率(400MHz)。尽管此芯片可以实现的最大频率(1/125*1000=800MHz),但是,由于此芯片所能提供的最大速度为400MHz,因此填写2500ps。
第二个箭头,代表DDR3的型号。MT41J是指镁光的一种DDR3型号。
第三个箭头,因为我们是两片DDR3芯片,所以是32位。
第四个箭头,选择normal,这样的好处是可以节省资源,其他默认不变。
上面打勾的是进行掩膜。可以防止数据误写入。
下面两幅图,是对黄色字及上面红线的解释说明。
7.箭头是指系统时钟,这个时钟是工作时钟可以选择200MHz,也可以是其他的。红色框更加有利于MIG核进行数据写入DDR3中。
8.第一个箭头,表示是对system clk的操作,有三种选择(Differential、Singled-Ended和No buffer).前两种表示FPGA外部电路提供的时钟信号(差分时钟,单端时钟),最后一种代表的是FPGA内部经由锁相环生成的时钟信号。一般在设计开发板,为了节约引脚数目,此信号会由FPGA内部锁相环生成更为方便。
第二个箭头是指参考时钟有四种,前三种和系统时钟的配置是一致的。第四种表示,如果系统时钟也是200MHz二者可以共用一个时钟。这也就说明,参考时钟是固定200Hz。这里需要注意2020.2版本的设置IP核时有Bug,第二次打开,系统时钟会变化为400MHz,因此参考时钟找不到Use System Clock选项。
第三个箭头是XADC进行温度采集的,百度翻译如下:
内存接口使用 XADC 模块的温度读数来执行温度补偿,并使读取的 DQS 保持在数据窗口的中心。每个设备有一个 XADC 块。如果 XADC 当前未在设计中的任何位置使用,请启用此选项以实例化模块。如果已使用 XADC,请禁用此 MIG 选项。然后,用户需要向顶层 12 位 device_temp_i 输入端口提供温度值。有关详细信息,请参阅答复记录 51687 或 UG586。
9.这个是设置信号线的阻抗匹配,和开发板的设置有关,一般阻抗越大,其线宽越窄,更加有利于布线,这里根据开发板PCB布线自行设置。
10.引脚分配问题。根据开发板引脚原理图进行配置即可,我使用的是正点原子达芬奇Pro,从他家的官网可以找到其ddr3引脚管理(ddr3_xdc.ucf)
11.进行配置
12.一路next,accept即可。
13.选择Global。
14.生成官方example,之所以这样操作,是考虑到后面可以能会按照同一流程,进行DDR3的配置,不同工程,不同器件。首先运行一下官网案例,观察能否初始化成功,然后再将官网案例打包成一个类似于RAM的形式,进行数据操作。
15.运行官网案例进行仿真,在上一个博客中,已经介绍了vivado和modelsim联动,有兴趣可以看看。vivado的仿真也能用,但是速度太慢,还容易导致电脑宕机。标白处为初始化信号,在此版本下,花了106us才完成初始化。
至此MIG的Native官方案例生成成功。
16.注意带宽的设置
MIG IP核的输入数据带宽应与,输出数据带宽一致。
输入数据带宽:用户端数据带宽:100M*256bits=25,600Mbits
输出数据带宽:DDR3数据带宽:400M*2*32bits=25,600Mbits
带宽一致没有问题。
这里
主要参考:小白fpga、1_【正点原子】达芬奇Pro之FPGA开发指南 V2.1.pdf