官方论坛
官方淘宝
官方博客
微信公众号
点击联系吴工 点击联系周老师
您的当前位置:主页 > 高级实训案例 >

lattice DDR3 IP核使用调试分享

发布时间:2020-01-03   作者:鱼丸粗面 浏览量:

本文为明德扬原创文章,转载请注明出处!

本文以一个案例的形式来介绍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

功能

clk

1

I

工作时钟,由IP核输出时钟sclk提供

rst_n

1

I

复位信号,低电平有效

rd_burst_req

1

I

外部输入读请求信号

wr_burst_req

1

I

外部输入写请求信号

rd_burst_addr

28

I

外部输入读请求地址

wr_burst_addr

28

I

外部输入写请求地址

rd_burst_data_valid

1

O

控制模块读出到外部的有效数据

wr_burst_data_req

1

O

控制模快输出到外部的写请求确认信号,外部收到此信号,开始写入数据

rd_burst_data

64

O

控制模块输出到外部的数据

wr_burst_data

64

I

外部输入的写数据

burst_finish

1

O

 

app_rst_n

1

O

控制器输出的IP核复位信号

app_init_start

1

O

控制器输出的IP核初始化开始信号

app_cmd

4

O

控制器输出的IP核指令信号

app_cmd_valid

1

O

控制器输出的IP核指令有效信号

app_addr

28

O

控制器输出的IP核地址信号

app_cmd_burst_cnt

1

O

命令突发计数输出,指示给定的读或写命令被控制器自动重复的次数。控制器还根据命令的突发长度顺序生成每个重复命令的地址

app_ofly_burst_len

1

O

控制器输出的当前命令及时突发长度

app_write_data

64

O

控制器输出给IP核的外部写入数据

app_data_mask

8

O

用于写数据的数据掩码。每个位屏蔽本地写数据的对应字节

app_init_done

1

I

IP核输入的初始化完成信号

app_cmd_rdy

1

I

IP核输入的命令准备信号

app_datain_rdy

1

I

IP核输入的数据写入准备信号

app_read_data

64

I

IP核输入的从DDR3中输出的数据

app_read_data_valid

1

I

IP核输入的读出数据有效信号

app_wl_err

1

I

IP核输入的写错误指示信号

app_rt_err

1

I

IP核输入的读错误指示信号

 

2、DDR3 IP核的接口信号功能列表如下:

信号名

位宽

I/O

功能

clk_in

1

I

系统的工作时钟

rst_n

1

I

复位信号,低电平有效

app_rst_n

1

I

异步复位信号,只对内存设备进行复位,不会重置IP核

app_init_start

1

I

IP核初始化开始信号

app_cmd

4

I

IP核指令信号

app_cmd_valid

1

I

IP核指令有效信号

app_addr

28

I

控制器输出的IP核地址信号

app_cmd_burst_cnt

1

I

命令突发计数输出,指示给定的读或写命令被控制器自动重复的次数。控制器还根据命令的突发长度顺序生成每个重复命令的地址

app_ofly_burst_len

1

I

当前命令及时突发长度

app_write_data

64

I

控制器输出给IP核的外部写入数据

app_data_mask

8

I

用于写数据的数据掩码。每个位屏蔽本地写数据的对应字节

clocking_good

1

O

时钟稳定信号

burst_finish

1

O

突发读/写操作完成

app_init_done

1

O

IP核输出的初始化完成信号

app_cmd_rdy

1

O

命令准备输出信号,有效时表示内存准备好接收下一个命令和对应的地址,只持续一个时钟周期

app_datain_rdy

1

O

IP核输出的数据输入准备完成输出信号。当它有效时,表示内存已经准备好接收数据

app_read_data

64

O

IP核输入的从DDR3中输出的数据

app_read_data_valid

1

O

读数据有效输出信号,当其有效时,表示数据总线上的数据有效读出

app_wl_err

1

O

IP核输出的写错误指示信号

app_rt_err

1

O

IP核输出的读错误指示信号

em_ddr_addr

15

O

内存地址总线,内存的多路复用行和列地址。

em_ddr_ba

3

O

内存的bank地址

em_ddr_cke

1

O

控制器生成的内存时钟使能信号

em_ddr_clk

1

O

控制器产生的内存时钟,最高可达到400M

em_ddr_cs_n

1

O

内存片选

em_ddr_data

16

I/O

内存双向数据总线

em_ddr_dm

2

O

DDR3内存写数据掩码,为字节级写屏蔽字节通道

em_ddr_dqs

2

I/O

内存双向数据频闪

em_ddr_odt

1

O

内存终止控制

em_ddr_cas_n

1

O

内存列地址频闪

em_ddr_ras_n

1

O

内存行地址频闪

em_ddr_reset_n

1

O

IP核向内存发送的异步复位信号,低电平有效

em_ddr_we_n

1

O

内存写使能

四、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 与我进行更深入的讨论!

  •   
  •   
  •   
  •  
  • FPGA教育领域第一品牌
  • 咨询热线:020-39002701
  • 技术交流Q群:544453837