您的位置:首页 > 其它

每日工作记录——ML605 DDR3使用

2017-08-25 22:14 555 查看
ISE版本14.7,开发板型号ML605,芯片XC6VLX240T-1ff1156

1.开发板上的SDRAM型号为SODIMMS MT4JSF6464HY-1G1

容量:512MB

row:13 col:10 bank:3(8个) 数据位宽:64bit

容量大小的计算=2^13 * 2^10 * 8(bank) * 64(bit) = 4Gb = 512MB

2.DDR3接口的研究

ddr3_dq:数据输入输出,64位

ddr3_addr:地址输入(行列复用),13位

ddr3_ba:存储堆积地址(页),3位

ddr3_ras_n:行选通

ddr3_cas_n:列选通

ddr3_we_n:写有效

ddr3_reset_n:复位

ddr3_cke:时钟使能

ddr3_odt:终结电阻器,在DRAM颗粒工作时把终结电阻器关掉,而对于不工作的DRAM颗粒则打开终结电阻,减少信号的反射

ddr3_cs_n:片选

ddr3_dm:数据掩码,需要和DQ,DQS配合输入

ddr3_dqs_p、ddr3_dqs_n:高低位数据选通

sys_clk_p、sys_clk_n:差分时钟输入

clk_ref_p、clk_ref_n:参考时钟

鉴于ML605的UCF中没有电压约束,将电压约束copy下

NET  "ddr3_dq[*]"                               IOSTANDARD = SSTL15_T_DCI;
NET  "ddr3_addr[*]"                             IOSTANDARD = SSTL15;
NET  "ddr3_ba[*]"                               IOSTANDARD = SSTL15;
NET  "ddr3_ras_n"                               IOSTANDARD = SSTL15;
NET  "ddr3_cas_n"                               IOSTANDARD = SSTL15;
NET  "ddr3_we_n"                                IOSTANDARD = SSTL15;
NET  "ddr3_reset_n"                             IOSTANDARD = LVCMOS15;
NET  "ddr3_cke[*]"                              IOSTANDARD = SSTL15;
NET  "ddr3_odt[*]"                              IOSTANDARD = SSTL15;
NET  "ddr3_cs_n[*]"                             IOSTANDARD = SSTL15;
NET  "ddr3_dm[*]"                               IOSTANDARD = SSTL15;
NET  "sys_clk_p"                                IOSTANDARD = LVDS_25;
NET  "sys_clk_n"                                IOSTANDARD = LVDS_25;
NET  "clk_ref_p"                                IOSTANDARD = LVDS_25;
NET  "clk_ref_n"                                IOSTANDARD = LVDS_25;
NET  "sda"                                      IOSTANDARD = LVCMOS25;
NET  "scl"                                      IOSTANDARD = LVCMOS25;
NET  "sys_rst"                                  IOSTANDARD = LVCMOS25;
NET  "phy_init_done"                            IOSTANDARD = LVCMOS25;
NET  "ddr3_dqs_p[*]"                            IOSTANDARD = DIFF_SSTL15_T_DCI;
NET  "ddr3_dqs_n[*]"                            IOSTANDARD = DIFF_SSTL15_T_DCI;
NET  "ddr3_ck_p[*]"                             IOSTANDARD = DIFF_SSTL15;
NET  "ddr3_ck_n[*]"                             IOSTANDARD = DIFF_SSTL15;

3.MIG接口
mig是Xilinx公司的仿真工具ISE软件中提供的便于用户使用的ip核,主要用于DDR等存储设备的控制时序转换,提供用户接口。

我们需要关注的是其提供的用户接口而不需要具体了解其如何控制DDR3,主要的控制接口如下(DDR3.v):

input sys_clk_p, //differential system clocks
input sys_clk_n,
input clk_ref_p, //differential iodelayctrl clk
input clk_ref_n,
inout sda,
output scl,
input app_wdf_wren,
input [(4*PAYLOAD_WIDTH)-1:0] app_wdf_data,
input [(4*PAYLOAD_WIDTH)/8-1:0] app_wdf_mask,
input app_wdf_end,
input [ADDR_WIDTH-1:0] app_addr,
input [2:0] app_cmd,
input app_en,
output app_rdy,
output app_wdf_rdy,
output [(4*PAYLOAD_WIDTH)-1:0] app_rd_data,
output app_rd_data_end,
output app_rd_data_valid,
output ui_clk_sync_rst,
output ui_clk,
output phy_init_done,
input sys_rst // System reset

6个主控输入:
app_wdf_wren:写入的数据接口app_wdf_data的使能,拉高时app_wdf_data有效

app_wdf_data:写入的数据

app_wdf_end:不用考虑,功能时序与app_wdf_wren相同

app_addr:操作地址=bank+row+column(与生成核时候选择有关)

app_cmd:0为写入,1为读出

app_en:操作地址app_addr的使能信号

其他输入:

sys_clk:输入时钟信号

clk_ref:参考时钟,一般就可以为sys_clk

app_wdf_mask:默认为0即可

关键输出:

app_rdy:输出端口,1有效,表示mig准备接受数据和命令

app_wdf_rdy:输出端口,表示mig准备接受写数据和写命令,1有效

app_rd_data:数据输出端口,只有在app_rd_data_valid输出为1时才有效

app_rd_data_end:基本无意义

app_rd_data_valid:读出数据有效

ui_clk_sync_rst:同步复位输出,为0时才能接受控制操作

ui_clk:同步时钟输出

phy_init_done:mig物理层初始化和校准标志输出,为1时,表示完成

4.MIG时序

写时序:

phy_init_done拉高时,表示mig已经初始化完成

在app_rdy和app_wdf_rdy同时为1时,mig才能接受写命令

此时将app_en,app_wdf_wren和app_wdf-end置1,在app_cmd输入“000”,在app_addr输入相应地址,app_wdf_data输入相应数据



读时序:

app_rdy为1,将app_en置1

同时app_cmd输入“001”,app_addr输入相应的读地址,只有在app_rd_data_valid为1时,读出的数据才有效



5..do仿真

在modelsim和ise库关联完成后,在...\ipcore_dir\DDR3\example_design\sim文件夹中简历modelsim工程,并修改其中相关语句为:

vlog +incdir+. +define+x2Gb +define+sg15E +define+x8 -suppress 2902 ddr3_model.v之后在modelsim中输入
do sim.do即可观察波形。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  verilog modelsim 存储