admin 发表于 2019-11-9 11:24:22

lattice DDR3 IP核使用调试分享

lattice DDR3 IP核使用调试分享作者:鱼丸粗面本文为明德扬原创文章,转载请注明出处!
本文以一个案例的形式来介绍lattice DDR3 IP核的生成及调用过程,同时介绍各个接口信号的功能作用:
一、建立Lattice工程1、首先,新建一个工程“lattice_ddr3”:

      其中器件选择的是ECP5U系列LFE5U-45F-CABGA381芯片,Lattice的工程后缀是.ldf文件。进入工程界面后,添加模块文件:右键点击Input Files --Add--New File--Verilog Files即可添加。


2、添加了工程文件后,需要设置一个顶层,右键点击impl1,选择Set Top-Level unit,在弹出的窗口中设置顶层文件的名称,综合软件选择系统自带的Lattice LSE。

二、顶层文件设计
      顶层文件中,需要包含输入输出信号,其中系统的输入是时钟clk和复位信号rst_n,输出是FPGA向DDR3的输出信号,信号的流程图如下所示:

   其中,IP核控制模块Mem_burst中是双端口的输入输出,输入信号有顶层中产生的输入和IP核返回的输入信号;输出有IP核输出到Mem_burst的信号和控制模块输出到顶层的信号。
三、模块信号功能介绍:
      DDR3 IP核的调用主要有两部分模块,分别是控制模块和IP核接口模块,其对应的各信号列表如下:
1、控制模块的信号功能列表如下所示:

信号名位宽I/O功能
clk1I工作时钟,由IP核输出时钟sclk提供
rst_n1I复位信号,低电平有效
rd_burst_req1I外部输入读请求信号
wr_burst_req1I外部输入写请求信号
rd_burst_addr28I外部输入读请求地址
wr_burst_addr28I外部输入写请求地址
rd_burst_data_valid1O控制模块读出到外部的有效数据
wr_burst_data_req1O控制模快输出到外部的写请求确认信号,外部收到此信号,开始写入数据
rd_burst_data64O控制模块输出到外部的数据
wr_burst_data64I外部输入的写数据
burst_finish1O

app_rst_n1O控制器输出的IP核复位信号
app_init_start1O控制器输出的IP核初始化开始信号
app_cmd4O控制器输出的IP核指令信号
app_cmd_valid1O控制器输出的IP核指令有效信号
app_addr28O控制器输出的IP核地址信号
app_cmd_burst_cnt1O命令突发计数输出,指示给定的读或写命令被控制器自动重复的次数。控制器还根据命令的突发长度顺序生成每个重复命令的地址
app_ofly_burst_len1O控制器输出的当前命令及时突发长度
app_write_data64O控制器输出给IP核的外部写入数据
app_data_mask8O用于写数据的数据掩码。每个位屏蔽本地写数据的对应字节
app_init_done1IIP核输入的初始化完成信号
app_cmd_rdy1IIP核输入的命令准备信号
app_datain_rdy1IIP核输入的数据写入准备信号
app_read_data64IIP核输入的从DDR3中输出的数据
app_read_data_valid1IIP核输入的读出数据有效信号
app_wl_err1IIP核输入的写错误指示信号
app_rt_err1IIP核输入的读错误指示信号

2、DDR3 IP核的接口信号功能列表如下:
信号名位宽I/O功能
clk_in1I系统的工作时钟
rst_n1I复位信号,低电平有效
app_rst_n1I异步复位信号,只对内存设备进行复位,不会重置IP核
app_init_start1IIP核初始化开始信号
app_cmd4IIP核指令信号
app_cmd_valid1IIP核指令有效信号
app_addr28I控制器输出的IP核地址信号
app_cmd_burst_cnt1I命令突发计数输出,指示给定的读或写命令被控制器自动重复的次数。控制器还根据命令的突发长度顺序生成每个重复命令的地址
app_ofly_burst_len1I当前命令及时突发长度
app_write_data64I控制器输出给IP核的外部写入数据
app_data_mask8I用于写数据的数据掩码。每个位屏蔽本地写数据的对应字节
clocking_good1O时钟稳定信号
burst_finish1O突发读/写操作完成
app_init_done1OIP核输出的初始化完成信号
app_cmd_rdy1O命令准备输出信号,有效时表示内存准备好接收下一个命令和对应的地址,只持续一个时钟周期
app_datain_rdy1OIP核输出的数据输入准备完成输出信号。当它有效时,表示内存已经准备好接收数据
app_read_data64OIP核输入的从DDR3中输出的数据
app_read_data_valid1O读数据有效输出信号,当其有效时,表示数据总线上的数据有效读出
app_wl_err1OIP核输出的写错误指示信号
app_rt_err1OIP核输出的读错误指示信号
em_ddr_addr15O内存地址总线,内存的多路复用行和列地址。
em_ddr_ba3O内存的bank地址
em_ddr_cke1O控制器生成的内存时钟使能信号
em_ddr_clk1O控制器产生的内存时钟,最高可达到400M
em_ddr_cs_n1O内存片选
em_ddr_data16I/O内存双向数据总线
em_ddr_dm2ODDR3内存写数据掩码,为字节级写屏蔽字节通道
em_ddr_dqs2I/O内存双向数据频闪
em_ddr_odt1O内存终止控制
em_ddr_cas_n1O内存列地址频闪
em_ddr_ras_n1O内存行地址频闪
em_ddr_reset_n1OIP核向内存发送的异步复位信号,低电平有效
em_ddr_we_n1O内存写使能

四、DDR3 IP核生成过程:
      在例化DDR3的IP核之前,需要先生成DDR3的IP核,且DDR3的例化与其他IP核不同,具体的过程如下:
1、首先打开Clarity Designer创建一个IP文件:
2、进入IP核生成界面后,需要在网上下载DDR3的IP核,在Lattice IP Sever中进行联网下载DDR3的IP核并安装,安装完IP核后在Lattice IP中选择ddr3 sdram controller 3.1,进行IP核参数设计:


3、配置IP核参数,由于选取的器件是ECP5U系列FPGA,因此DDR3的频率需设置为300M,否则生成的IP核是灰色的无法加入工程中去,内存数据总线大小选择16,对应的输入数据位宽是64位,配置选择X8,对应的地址位宽是28位。


4、IP核生成完成后,点击系统IP核界面上Generate,会在工程的文件列表中加入一个.sbx文件,此文件就是需要例化的DDR3 IP核实体文件,同时在对应的文件夹下面会出现一个对应名称的.V文件,将这个.V文件中的信号例化进顶层中即可。

5、需要例化的.V文件:

五、例化IP核
将上图中的.V文件例化进顶层文件中,定义好信号类型,将对应的信号相连接。至此,DDR3的IP核添加成功。
以上就是lattice DDR3 IP核使用调试的内容分享,加QQ 3358622769 与我进行更深入的讨论!



页: [1]
查看完整版本: lattice DDR3 IP核使用调试分享