FPGA实现DDR3读写操作,乒乓操作——FPGA学习笔记1

前言笔者:人生建议从第四章开始看。。。。

一、初认SDRAM

物理 Bank:传统内存系统为了保证 CPU 的正常工作,必须一次传输完 CPU 在一个传输周期内所需的数据。而CPU 在一个传输周期能接受的数据容量就是 CPU 数据总线的位宽当时控制内存与 CPU之间数据交换的北桥芯片也因此将内存总线的数据单位是 bit (位)位宽等同于 CPU 数据总线的位宽,而这个位宽就称之为物理 Bank (Physical Bank) 的位宽。

芯片位宽:每一片SDRAM缓存芯片本身的位宽。

CPU需要多少位宽数据,SDRAM就要提供多少位宽数据,位宽不够使用多片SDRAM级联。、


二、SDRAM操作时序

        1、SDRAM操作指令

CS#:片选  RAS#:行选通  CAS#:列选通  WE#:读写切换  DQM:数据掩码  ADDR:数据总线  DQ:数据  Notes:参考详细说明

        2、指令时序        

                (1)ACTIVE Command(行激活指令)

                (2)READ Command(读,列激活)

                (3)WRITE Command(写,列激活)

                (4)PRECHARGE Command(手动预充电)

                (5)初始化时序,加载模式寄存器

                (6)配置模式寄存器

A0~2:突发模式        A3:突发类型        A4~6:CL延迟        

                    (7)突发读时序

                (8)连续发送读指令时序

                (9)突发写时序

                (10)连续写时序

                (11)禁止指令

三、DDR2 SDRAM

        1、OCD校准

        2、前置CAS、附加潜伏期、写入潜伏期

四、DDR3 SDRAM

        1、与DDR2的区别之处

                (1)突发长度

                (2)寻址时序

                (3)新增重置功能

                (4)新增ZQ校准功能

                (5)参考电压分成两个

                (6)点对点连接

        2、DDR3硬件设计与时序

DDR3

        3、初始化时序

        (1)上电一瞬间RESET拉低保持200us(再次期间其他信号无效)。

        (2)RESET拉高前,CKE至少保持10ns拉低。

        (3)至少等待500us后(期间CK差分始终提前CKSRX时间稳定),CKE拉高。

        (4)CKE拉高后,等待tls时间,后发送NOP指令,继续等待tXPR时间。(期间ODT处于工作状态)

        (5)发送MRS配置指令,每配置一个等待tXPR时间,MRX寄存器配置完成等待tDLIK=tMOD+tZQinit时间。

        (6)在tDLIK等待时间内,发送ZQCL指令,以及NOP指令。到此整个DDR

### DDR4 内存读写操作时序中 RESET_n 信号的作用及规范 在DDR4内存的操作过程中,`RESET_n`是一个至关重要的控制信号。该信号用于初始化整个DDR4 SDRAM设备或将之置于已知状态。当`RESET_n`被拉低(即处于低电平),它会触发DDR4内存在内部执行一系列重置动作,这些动作包括但不限于清除所有寄存器的内容、停止当前正在进行的操作以及使能某些默认配置设置。 一旦`RESET_n`再次回到高电平,则标志着DDR4进入正常工作模式,在此之后才可以安全地启动诸如训练序列之类的后续流程[^1]。值得注意的是,在实际应用环境中,通常会在接收到`init_calib_complete`为高的指示之前保持`RESET_n`有效,以此来确保DDR4已经完成了必要的初始化和校准过程[^2]。 对于FPGA实现而言,正确管理`RESET_n`至关重要,因为不恰当的复位可能会导致不可预测的行为或数据丢失等问题。因此建议开发者遵循制造商提供的具体指导方针来进行编程,并利用仿真工具验证设计中的复位机制是否按预期运行[^3]。 此外,为了保证系统的稳定性和可靠性,在涉及连续读写的场景下应当特别注意如何处理好`RESET_n`与其他控制信号之间的关系,避免因误操作而引发异常情况的发生[^4]。 ```verilog // Verilog伪代码展示如何在FPGA中处理RESET_n信号 module ddr4_controller ( input wire clk, input wire reset_n, // 外部输入的RESET_n信号 output reg init_done ); always @(posedge clk or negedge reset_n) begin : proc_reset if (!reset_n) begin // 执行复位逻辑 init_done <= 0; // 清除其他状态机变量... end else begin // 正常操作下的行为定义 if (/* 条件 */) begin init_done <= 1; // 表明初始化已完成 end end end ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值