一、学习目的
学习笔记01读完之后我们大致了解DDR4是个啥了,后面的工作就是对DDR4这种存储器进行控制了,要会控制DDR4,你需要以下几个基本知识。
1、vivado基本使用,包括添加IP以及quastasim/modelsim仿真
2、BRAM的读写时序了解(学会类比,举一反三)
3、DDR4硬件知识了解
二、依葫芦画瓢之example工程
在进行后面的步骤之前,建议阅读一下PG150,描述的是UltraScale系列的MIG教程,如果自己找不到的可以在这个链接下载
PG150
PG150讲的是不同外设存储器的MIG(memory interface generator)配置、结构、时序和example工程。下面来生成ddr4的MIG的example工程:找到DDR4(MIG),打开配置界面
配置如下:
补充笔记01没有说完的时钟频率的关系:f3=4*f2,f1和(f2与f3)没啥关系,f1是MIG控制器需要输入的系统参考时钟,如果specify*****选项选中了多少,那么你接入MIG的时钟就需要是多少。MIG是简化DDR4的物理接口控制(上图最大的那个圈),把原本复杂的ddr4接口协议转化成简单的协议(虽然还是稍微复杂一些),所以不同的DDR4芯片或者DDR4内存条模块对应的物理接口是不一样的。
在Controller Options可以选择用CSV文件添加自己定义的器件类型(自定义MIG生成的example也许不能正确仿真),也可以直接在现有的型号里面找(example可以正常仿真)。
Mask(掩码)其实就是代表app_wdf_data和app_rd_data的有效字节数,比如64bit的data,mask设置的1111_0000,那么只有低4字节有效,一般我们不用mask,不用的话就选 NO DM DBI WR RD。 其余详细的接口说明请仔细阅读PG150 的chapter4: protocol description 部分。
配置完毕直接点ok生成IPcore,出现弹窗让你选择是否现在综合,两个选项的区别在于 Global是暂时不综合,Out of context per IP是现在综合,到时候整个项目跑综合的时候这部分IP的综合文件就直接调用,不过第二个缺点是不方便布局布线导致时序难过。这里我们选Global。
然后右击ddr4的IP,在菜单栏中可以生成example工程 或者 找到官方文档(PG150),这里选择生成example,然后vivado会让你选目录,然后自动生成一个工程。
你可以直接跑仿真,对照之前提到的PG150的chapter4部分和仿真波形理解读写时序。