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

本文详细介绍了使用 ML605 开发板进行 DDR3 SDRAM 控制的方法,包括 SDRAM 的规格参数、DDR3 接口信号定义、MIG 核的使用及其时序控制等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
即可观察波形。




Virtex:registered:-6 FPGA ML605 评估套件为那些需要高性能、串行连接功能和高级存储器接口的系统设计提供了开发环境。ML605 得到了预验证的参考设计和行业标准 FPGA 夹层连接器(FMC)的支持,能够利用子卡实现升级和定制。集成式工具有助于简化符合复杂设计要求的解决方案的创建。 配置 板上配置电路(USB 到 JTAG) 16MB Platform Flash XL 32MB 并行(BPI)Flash 带有 2GB Compact FLASH(CF)卡的 System ACE CF 通信与网络 10/100/1000 三速以太网(GMII、RGMII、SGMII、MII) SFP 收发器连接器 带有4个 SMA 连接器的 GTX 端口(TX、RX) USB 到 UART 桥 USB 主端口和 USB 外设端口 PCI Express x8 边缘连接器(利用 Virtex-6 LX240T-1 芯片,卡支持高达 x4 Gen2) 存储DDR3 SO-DIMM(512 MB) BPI 线性 Flash(32 MB)(还可用于配置) IIC EEPROM(8 Kb) 时钟技术 200 MHz 振荡器(差分) 66 MHz 插座振荡器(单端) 用于外部时钟(差分)的 SMA 连接器 带有2个 SMA 连接器的 GTX 参考时钟端口 输入/输出和扩展端口 16x2 LCD 字符显示器 DVI 输出 系统监视器 用户按钮(5)、DIP 开关(13)、LED(13) 带有2个 SMA 连接器的用户 GPIO 2个 FMC 扩展端口 高引脚数(HPC) 8个 GTX 收发器 160个 SelectIO 低引脚数(LPC) 1个 GTX 收发器 68个 SelectIO 功耗 12V 插墙式适配器或 ATX 2.5V、1.5V、1.2V 和 1.0V 电源的电压和电流测量功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尼德兰的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值