altera-ddr2 sdram ip核参数设置及读写时序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、Uniphy 整体框图:
2、存储控制器连接图
PHY的时钟与复位信号
1、pll_ref_clk:PLL参考时钟输入。
2、global_reset_n:全局复位信号,对PLL和PHY里的所有逻辑单元进行复位。
3、soft_reset_n:软复位信号,对phy复位,不对PLL复位。
当soft_reset_n为低时,输出的
afi_reset_n信号也为低。
3、各个模块间的接口信号
3、1控制器与用户接口间使用的Avalon相关信号线:
下表是本地接口信号,在altera例化的IP核里,本地用户接口使用的是avalon总线➢Local_addr:指的是用户接口端的地址线,位宽计算方法如下:
1)当只使用1pcs 外部存储器时:
位宽=bank位宽+行位宽+列位宽-1;
2)当使用多片片外存储器时:
位宽=芯片位宽+bank位宽+行位宽+列位宽-1;
计算位宽时减1 是因为用户数据接口宽度是memory侧数据宽度的两倍(memory 侧是在时钟的上升和下降沿都收发数据,而用户侧只在时钟的上升沿收发数据,假如用户读写数据的时钟频率与memory侧的数据频率相同,那么,在时钟上升沿来时,用户侧发送的数据位宽应是memory侧数据位宽的两倍)。
➢local_be:字节使能信号(用于向控制器写数据时),与memory侧的DM(data mask )信号作用一样,比如,当想使local_data的某8位数据无效,将local_be
的对应位置0即可。
➢local_burstbegin:本地突发开始信号,当avalon总线开始突发读写时,将此信号置位‘1’。
(使用条件:本地接口是avalon总线,且memory侧的突发长度大
于2)
➢local_size:本地突发长度,即连续读或写的local_data个数。
长度不能超过ddr ip 核里配置的maximum avalon- mm burst length的长度。
➢local_wdata:本地写数据。
➢local_write_req:写请求信号。
只有当local_ready信号为高时,才能发起写请求。
➢local_rdata: 本地读数据。
➢local_read_req:读请求信号。
只有当local_ready信号为高时,才能发起读请求。
➢local_rdata_valid:本地读数据有效标志,当其为高时,表示此时local_rdata 数据有效。
➢local_ready:为‘1’时表示此时控制器可以接受读写请求信号。
➢local_refresh_req:刷新控制器请求信号。
➢local_refresh_ack:刷新请求确认标志,表示一次刷新完成标志。
➢local_init_done:本地初始化memory完成标志。
➢local_wdata_req:写数据请求信号。
在avalon-mm模式时不使用该信号。
3、2controller 与PHY间的接口信号线
➢时钟与复位信号
afi_clk:AFI接口的所有数据变化都是与该时钟同步的。
➢地址和控制信号
➢写数据相关信号
➢读数据相关信号
➢afi校准状态信号
➢跟踪管理信号
3、3 PHY与外部memory间的接口信号线
➢ddr_dq:数据线接口,位宽是local_wdata,local_rdata的1/2(因为memory是双边沿读写数据)。
➢ddr_dqs: 探测ddr_dq上的数据信号。
读操作时,ddr_dqs边沿与读数据边沿对齐;写操作时,ddr_dqs边沿与写数据中间对齐。
➢clk_to_sdram, clk_to_sdram_n:memory的差分时钟输入。
➢ddr_a[]:memory的地址总线。
➢ddr_ba[]:memory的bank地址总线。
➢ddr_cas_n:memory列地址有效信号。
➢ddr_cke[]:memory的时钟使能信号。
➢ddr_cs_n[]:memory的片选信号。
➢ddr_dm: data mask写数据到memory时,ddr_dq上的数据是否屏蔽。
(ddr_dm 为‘1’时,对应ddr_dq数据无效;为‘0’时数据有效)。
➢ddr_odt:memory内部终结电阻器控制信号。
(memory在内部集成了终结电阻,以减少反射的干扰信号)
➢ddr_cas_n: memory行地址有效信号。
ddr_we_n:memory写数据使能信号。
4、ddr2 sdram的half-rate ,full-rate读写时序。
➢full-rate时:afi_clk与mem_ck频率相同。
avl_data 数据位宽是mem_data的2倍
➢half-rate时:afi_clk是mem_ck频率的一半。
avl_data 数据位宽是mem_data的4倍
4、1full-rate ddr2 sdram write时序
4、4half-rate ddr2 sdram read时序
5、altera例化ddr2 sdram ip核参数设置
首先肯定是在quartus ii里新建一个工程,然后选择tools->Megawizard Plug-in Manager 选择创建一个新的IP核,然后在interface->external memory里找到ddr2 sdram 选中,命名。
然后点击next就出来ddr2 ip核的配置界面。
fpga芯片选用的是Cyclone V :5CEFA5F23C8。
速度等级是8
5.1 Interface Type
勾选此项表示使能硬核外部存储器接口。
不勾选表示用逻辑单元去生成ddr2 ip核。
硬核与软核的区别。
1、硬核是固化在FPGA内部的专用硬件电路,而软核是用逻辑单元去构建的;
1、硬核的可工作频率比软核更高;
2、硬核的外接memory引脚只能用指定的引脚,而软核可以自己指定。
5.2 PHY Settings
➢Speed_Grade: 8 (fpga芯片选用的是Cyclone V :5CEFA5F23C8。
速度等级是8。
➢Generate phy only:勾选此选项的话,就只会生成PHY模块,不会生成控制模块。
➢Memory clock frequency : memory工作的时钟频率,此值不能超过min{fpga芯片指定的工作频率,Memory device speed grade}。
本工程中设置的Memory clock frequency为200Mhz。
➢PLL reference clock frequency: 25 Mhz 给IP核锁相环输入的时钟频率。
➢Rate on Avalon-MM interface:有Half 和Full两个选项。
Half:指本地用户接口的时钟频率afi_clk为memory侧时钟的1/2。
Full: 则本地用户接口的时钟频率afi_clk 与memory侧时钟频率相同。
➢Advanced PHY Settings
PLL,DLL,OCT sharing mode 设置其PLL,DLL,OCT是否输出给其他的UniPHY模块使用。
➢Enable AFI half rate clock:表示使能输出AFI half rate clock,频率为AFI rate clock的一半
5、2 Memory Parameters
Memory的参数设置,根据memory的datasheet 设置。
➢Memory vendor:选择memory的器件厂家,本工程选择Micron
➢Memory format:选择memory的形式,本工程选择Discrete device
Discrete device: 分立器件。
就是单片的memory
DIMM:Dual-Inline-Memory-Modules,即双列直插式存储模块。
Unbuffered DIMM: 不带缓存的内存,也就是说在内存条PCB上没有缓存(buffer)或寄存器(register)的内存条。
这类内存条主要定位于桌面PC市场,是我们常见
的低价内存模组。
它的主要工作原理是所有的信号都是从内存控制器直通到DRAM
芯片颗粒上,信号传输延迟小性能较高。
但也正是这个原因Unbuffered DIMM并不
如带寄存器的内存模组工作稳定,因而Unbuffered DIMM一般不在服务器上应用,可以应用在要求不高的桌面PC上。
Registered DIMM:最常见的内存模块类型。
RDIMM使用寄存器,从电力上将内存
模块从剩余主板中隔离出来。
积极的一方面是,只需更少的电力负载支持,系统能
够填充更多RDIMM,支撑内存容量。
不好的是缓冲组件增加了对内存转换的延迟,
稍微降低了性能并增加了能耗需求。
➢Memory device speed grade: memory的速度等级,根据memory手册选择,本工程选333.333Mhz
➢Total Interface width:memroy数据总线(DQ)的宽度,本工程选择16位宽。
➢DQ/DQS group size:指每一组DQS对应的DQ位宽。
自动生成位8
➢Number of DQS groups:DQS的组数,自动生成为2
➢Number of chip selects: memory芯片的个数本工程用了1pcsmemroy,选择1
➢Number of clocks:memory使用的时钟个数。
本工程为1。
➢Row address width:memory的行地址宽度,本工程为13。
➢Column address width:memory的列地址宽度,本工程为10。
➢Bank-addres width: memory的bank宽度。
➢Enable DM pins:使能memory的DM(data mask)pins 。
➢DQS # Enable: 使能DQS(DQ strobe)引脚。
➢Burst length:设置memory的突发长度,即memory一次读写的数据(DQ)个数。
➢Read Burst Type:设置突发读的方式一般都是用Sequential。
Sequential:顺序读,即给一个初始地址,读的下一个数据的地址就是初始地址+1。
Interleaved:交叉模式。
下面截图是美光ddr2 spec里Interleaved的工作模式。
➢DLL precharge power down:DLL在预充电下电时,DDL选择“fast exit”or “slow txit”,选择默认fast exit。
➢Memory CAS latency setting:指设置CAS(列地址选通脉冲)潜伏周期,从CAS与读取命令发出到第一个数据输出的时间。
从memory datasheet查找,本处为4。
➢Output drive strength setting:输出驱动阻抗设置,选择默认的full。
➢Memory additive CAS latency setting:选择默认设置0。
➢ODT setting: 终结电阻值设置。
➢SRT Enable:刷新速率设置。
0°到85°时选择1x refresh rate,大于85°选2X;此处选择1X。
5、3 Memory Timing
该部分主要是设置memory的一些时序参数,具体参数值可以查询memory对应的datasheet。
或者从下图的Preset 里选择对应你使用的memory器件型号,双击就会设置好memory timing里的参数。
下面几个截图就是从美光memory 型号MICRON MT47H64M16HR-3IT里边查找到的时序参数。
tRP=15ns
tRCD=15ns,
tRRD=10ns
tRFC=127.5ns
tDQSCK=400ps tDQSS=0.25cycle tDQSH=0.35 cycle tDSS=0.2 cycle tDSH=0.2 cycle
tDQSQ=240ps tQHS=340ps tDSb=100ps tDHb=175ps
tISb=200ps tIHb=275ps tRAS=40ps tFAW=50ps
tRTP=7.5ps (因为tCK=3.75,所有tRTP=2cycle)
tWR=15ps
tWTR=7.5ns
tMRD=2 cycle
tRFC=127.5ns
TREFIIT=3.9us
Tinit=200us 初始化时间,从datasheet里的初始化时序图上得出。
5、4 Board Setting
Pcb板仿真参数设置,主要是与PCB板上走线一些时序相关设置。
采用默认的设置即可。
5、5 Controller Settings
该部分是设置用户接口侧(一般都是AVALON-MM总线接口)一些相关的参数。
➢Generate power -of-2 data bus width for Qsys or SOPC Buillder
➢Genetate SOPC Builder compatible resets
上面这两个选项是在用SOPC时需勾选的,此处设置不用勾选。
➢Maximum Avalon-MM burst length:设置Avalon-MM的最大突发长度。
即用户接口侧你一次能连续读写的最大长度(此处的4是指4个64位宽的data )。
➢Enable Avalon-MM byte enable signal:该选项是用来使能Avalon-MM总线(即用户接口侧)的字节使能信号用的。
此处勾选。
➢Avalon interface address width 和data width是根据配置自动生成,不能修改。
➢Low Power Mode:低功耗模式设置。
选择默认的两个都不选择。
Enable Self-Refresh Controls: 使能自刷新控制。
Enable Auto Power-Down:使能自动进入下电模式。
➢Efficency:
Enable user Auto-Refresh Controls:使能用户自动刷新控制,不勾选。
Enable Auto-Prechare Control:使能自动预充电控制,不勾选。
Local-to-Memory Address Mapping:本地到memeory侧的地址映射方式。
选择CHIP- BANK-ROW-COL。
例如该设置中的Avalon interface address width是24bits。
下图是本地地址位宽计算公式的截图。
本工程使用的memory芯片个数是1个,BANK是3位宽,memory的行ROW是13位宽,列宽是10位。
图上的计算是在本地接口时钟为full-rate(200Mhz)的时候,width是减1(此处减1是因为memory侧是在时钟的上升下降沿都收发数据,而本地接口只在时钟上升沿时收发数据),由于本工程中的本地接口时钟是half-rate模式(100Mhz)。
所以需要再减1,即width=3+13+10-2=24。
根据选择的地址映射关系,可知Avalon address[23:21]是bank地址位,Avalon address[20:8]是行地址,Avalon address[7:0]是列地址。
➢剩下的参数选择默认即可。
5、6 Diagnostics
该页按给出的默认设置即可,不用修改。
最后点击右下角的finish按钮就可以生成ddr2 ip核了。
至于ip核的具体使用后面再上传相关文档。