Lattice FPGA ECP5 DDR3 调试报告
环境:WIN10、Diamond 3.11 (64-bit)、Verilog语言。
一、创建Diamond工程
1、创建一个存放工程的文件夹。根据个人喜好,注意不要有中文路径。
2、打开Diamond
3、创建工程,File->New->Project
4、点击Next
5、创建工程名字,文件夹选择第1步创建的文件夹。
6、暂时没有可以添加的文件,点击Next。
7、选择板卡所对应的FPGA型号,这里我手中板卡的型号为LFE5U-25F-8BG381C。具体型号根据自己手中板卡选择。
8、选择综合工具,第一种为第三方工具,不是Lattice公司的,第三种为Lattice公司自己的工具。
9、创建工程的一些基本信息,从中可以看出:工程名字、工程存放地址、生成文件的文件夹、FPGA芯片的型号、综合工具。和自己的板卡对照下,没问题就点击Finish。
10、工程创建完成,和ISE、Vivado还是有很大的区别。在怎么不一样也是需要用Verilog写程序。慢慢熟悉熟悉感觉它还是不错的一个工具。
二、生成控制DDR3的IP核,也可以自己写一个对DDR3控制的程序,这对大神们来说小菜一碟,但对我这种(菜笨)还是想想就行了。这山有点高,不好翻。
1、选择DD3控制IP,右击impl1->Add->New->File
2、选择Clarity Designer,然后名字就是来个自己喜欢的。
3、然后选择对应的IP核。(如果第一次使用 ,可能找不到这个IP,这就需要你下载一个,然后安装下。)左边是介绍这个IP的一些文档,很重要,不管看懂看不懂先下载下来再说。
4、双击IP之后,对这个IP起个名字。
5、选择与板卡上DDR3对应的模板。我手上板卡是2G的,板卡FPGA是-8级别的,单颗DDR3,DQ16,X16。(FPGA是-8级别DDR3是可以跑到400M的,-6就是300M,个人理解,仅供参考)。
6、配置完如图所示,实际情况根据自己板卡做适当的修改。点击Configure。
7、这里说一点,正常的IP调用这里会出现一些信息的,但是DDR3没有,是因为Lattice使用这个IP需要收费的,这里我们只能试用。所以在这里不要大惊小怪。点击Close。
8、软件的下边会打印很多信息。这个没有研究是什么,我们只用知道他是在生成IP的过程就行。
9、下边出现Successfully,证明我们这个IP已经生成完成。点击保存按钮。
10、问你是不是要添加到工程中,点击Yes。
11、IP出现在了工程中。到这里我们的IP已经生成完成。
三、控制IP
1、创建一个顶层文件,右击Impl1->Add->New File
2、起个名字,点击New。
3、写代码进去,使用DDR3第一步,你先看看这个DDR3会不会初始化完成,标志呢就是Init_done信号。在xilinx中如果初始化完成后这个信号会一直拉高。这里不知道会怎么样,看手册,就是生成IP时下载的那个手册。
4、看手册显示的是你需要先对Init_start信号进行一个拉高的过程,等Init_done拉高了,在拉下来就行了。手册是这么说的,到底是不是真的,我们需要试下才能知道是不是真。下来开始写代码。这里说一点这个Diamond软件的调试工具不太好用,(不能说不好用,只是自己还没有使用熟练。)
5、由于代码过长,这里只粘贴出来一部分。然后保存,点击Synthesize Design。
6运行成功后,添加管脚约束绑定,这里Lattice在你创建工程时,已经给你创建了对应的文件。点击,会进入到引脚绑定的界面。
7、按照原理图进行填写,这里说一点,Lattice和XILINX对管脚的约束有一点差别,差分信号,XILINX关键约束对PN都需要进行绑定,而Lattice不需要,只需要对P进行绑定就行了。不知道这一点的感觉很不可思议,DDR3的IP核的数据同步信号和输入时钟信号等一些差分对,在IP核的框图上看到的命名是差分对,但是生成IP后调用的却是单端信号。这里需要注意。绑定完之后就是编译综合了。
8、编译完成之后就会生成一个BIT文件,这就可以下载了,但是下载之后你怎么知道对不对呢?所以你需要抓信号,抓刚才的Init_done信号。这就需要工具,XILINX的是ChipScope,Lattice使用的Reveal工具。右击Impl1->Add->New File
10、选择Reveal Project Files,来个喜欢的名字。点击New。
11、添加你需要抓取的波形。
12、设置下触发
13、点击保存,
14、点击红框的按钮,点击OK
15,、然后重新编译下。
四、下载调试
1、下载程序,点击
2、点击OK
3、点击扫描下载器,板卡上电准备下载。
4、点击红框中的按钮,开始下载。
5、显示PASS,下载成功。然后调用Reveal工具,点击。
6、依次点击红框按钮,选择你创建的调试核。
7、点击OK
8、点击红框中的按钮。
9、出现错误,排查错误。
10、复位有些问题。修改下,重新生成bit文件,下载。
11、可以看到Init_done_pos拉高了,证明DDR3复位初始化完成,到这一步基本能确定板卡没问题。
五、对板卡DDR3进行读写操作。
1、编写读写文件,
2、添加需要抓取的波形,点击编译,生成bit文件,下载,抓取波形。
3、DDR3读写测试完成。
结论、
从XILINX转向Lattice,期间总是有些不适,掌握一个软件那是不可能的,只能说使用这个软件越来越熟练,Lattice有优有缺,这些都不是像我这样的人所能评价的。我们只能保持一颗积极向上学习的心态就行,漫漫长路,需要的是一步一个脚印走下来的,保持初心,一切会好的。