2024年3月18日发(作者:兴吉欣)
Lattice ddr3教程全攻略之仿真篇
By: BACKKOM
QQ:784496547
Date:2014/9/19
对于这部分,首先建议安装好diamond3.1,modelsim se 10.1a这两个软件,如
果想仔细分析DDR3的IP部分,可仔细阅读DDR3 SDRAM Controller IP Core User’s
Guide,下面用ug代指。官网上可以download,还有DDR3的基本知识,可以到
网上download《高手进阶,终极内存技术指南——完整进阶版》,这个文章值得
一读。DDR的调试成功,可以说是开发学习FPGA的一大重要标志,能够把DDR3
玩转的熟练,那自称FPGA工程师也是理所当然了。。。
Lattice的ddr3控制器接口逻辑还是相对简单,比较好理解的,下面来看看
DDR3 IP 的内部结构:
图:DDR3 IP逻辑框图
Initialization Module:根据JEDEC.的标准,在上电后对DDR3进行初始化配置,
配置其相应的寄存器和工作方式等,具体配置的寄存器可以参看ddr3的协议文
档,JEDEC规范写的很详细。当初始化配置完成后,该模块会给出一个done信
号告诉用户。
sysCLOCK PLL:用于提供IP工作所需要的时钟,并提供给用户端一个时钟:
k_clk。
Data Path Logic:用于从DDR3读取的数据转换到用户端,写入的数据不经过
该模块,写入的数据从Command Application Logic (CAL)模块输入。
Command Decode Logic (CDL) :该模块用于译码命令,控制core按照设定的
命令正确的访问ddr3芯片。
DDR3 PHY:用于转换单端的数据转换为差分给到ddr芯片端,和差分转单端
输入。
以上部分有基础了解就行,不需要深究。
图:DDR初始化时序
当上电后,用户应该将init_start拉高至少200us,直到init_done被拉高
一个周期,则将init_start拉低。用户检测到init_done被拉高后就表明芯片初始
化完成了,也大概可以确定硬件是OK的。可以进行下一步操作。
读和写控制非常简单,ug上说的很清楚,就不一一赘述了。
做DDR3设计之前当然是先仿真,这个毋庸置疑,那么仿真当然首选Modelsim,
在仿真之前,先做好准备工作,那就是先编译好仿真所需要的库文件,编译库文
件方法和Altera Xilinx类似,见《在Modelsim中建立LATTICE仿真库》一文,已
共享。lattice的资料做的确实不如xilinx和altera。也是很多使用lattice fpga的工
程师经常抱怨的一点,没有前人带的情况下使用lattice确实是非常恼火的。但是
却也没有江湖传言的那么难用,其实很多时候并不是因为难,而是我们不愿意去
了解,因为陌生而导致的恐惧,先入为主吧。那,废话不多说,开始进入主题。
现在假定你lattice库文件已经编译成功,那,我们当然要物尽其用,尽可能
收集多的资源加快效率。。。此处省略一万字。
首先说明,lattice的DDR3是带有Modelsim仿真例程的,只要在IP例化好了
之后找到:
***ddr_p_evalddr3coresim
然后在modelsim se中敲do ddr3core_就可以了,正常情况下是可以
运行得到结果的,而且仿真初始化时间短,比altera快,这一点本人非常满意,
而且激励写的很好懂,多以任务函数形式调度,这一点秒杀altera,altera还用
的system verilog写的,比较坑。
有时候直接用生成的例程一点问题没有,但就在刚刚,我又验证了一下出现
了。。。
2024年3月18日发(作者:兴吉欣)
Lattice ddr3教程全攻略之仿真篇
By: BACKKOM
QQ:784496547
Date:2014/9/19
对于这部分,首先建议安装好diamond3.1,modelsim se 10.1a这两个软件,如
果想仔细分析DDR3的IP部分,可仔细阅读DDR3 SDRAM Controller IP Core User’s
Guide,下面用ug代指。官网上可以download,还有DDR3的基本知识,可以到
网上download《高手进阶,终极内存技术指南——完整进阶版》,这个文章值得
一读。DDR的调试成功,可以说是开发学习FPGA的一大重要标志,能够把DDR3
玩转的熟练,那自称FPGA工程师也是理所当然了。。。
Lattice的ddr3控制器接口逻辑还是相对简单,比较好理解的,下面来看看
DDR3 IP 的内部结构:
图:DDR3 IP逻辑框图
Initialization Module:根据JEDEC.的标准,在上电后对DDR3进行初始化配置,
配置其相应的寄存器和工作方式等,具体配置的寄存器可以参看ddr3的协议文
档,JEDEC规范写的很详细。当初始化配置完成后,该模块会给出一个done信
号告诉用户。
sysCLOCK PLL:用于提供IP工作所需要的时钟,并提供给用户端一个时钟:
k_clk。
Data Path Logic:用于从DDR3读取的数据转换到用户端,写入的数据不经过
该模块,写入的数据从Command Application Logic (CAL)模块输入。
Command Decode Logic (CDL) :该模块用于译码命令,控制core按照设定的
命令正确的访问ddr3芯片。
DDR3 PHY:用于转换单端的数据转换为差分给到ddr芯片端,和差分转单端
输入。
以上部分有基础了解就行,不需要深究。
图:DDR初始化时序
当上电后,用户应该将init_start拉高至少200us,直到init_done被拉高
一个周期,则将init_start拉低。用户检测到init_done被拉高后就表明芯片初始
化完成了,也大概可以确定硬件是OK的。可以进行下一步操作。
读和写控制非常简单,ug上说的很清楚,就不一一赘述了。
做DDR3设计之前当然是先仿真,这个毋庸置疑,那么仿真当然首选Modelsim,
在仿真之前,先做好准备工作,那就是先编译好仿真所需要的库文件,编译库文
件方法和Altera Xilinx类似,见《在Modelsim中建立LATTICE仿真库》一文,已
共享。lattice的资料做的确实不如xilinx和altera。也是很多使用lattice fpga的工
程师经常抱怨的一点,没有前人带的情况下使用lattice确实是非常恼火的。但是
却也没有江湖传言的那么难用,其实很多时候并不是因为难,而是我们不愿意去
了解,因为陌生而导致的恐惧,先入为主吧。那,废话不多说,开始进入主题。
现在假定你lattice库文件已经编译成功,那,我们当然要物尽其用,尽可能
收集多的资源加快效率。。。此处省略一万字。
首先说明,lattice的DDR3是带有Modelsim仿真例程的,只要在IP例化好了
之后找到:
***ddr_p_evalddr3coresim
然后在modelsim se中敲do ddr3core_就可以了,正常情况下是可以
运行得到结果的,而且仿真初始化时间短,比altera快,这一点本人非常满意,
而且激励写的很好懂,多以任务函数形式调度,这一点秒杀altera,altera还用
的system verilog写的,比较坑。
有时候直接用生成的例程一点问题没有,但就在刚刚,我又验证了一下出现
了。。。