05-SDRAM控制器的设计——command.v代码解析

前言▷▷▷

下图是本案例的功能框图。

command.v文件对应图中SDRAM指令执行模块,它会从SDRAM接口控制模块接收指令,然后产生控制信号直接输出到SDRAM器件来完成所接收指令的动作。如下是该模块的RTL视图:

其具体代码讲解如下:

输入信号INIT_REQ指示的是SDRAM上电等待的24000个时钟周期,在这期间do_initial信号为高,系统只能发送NOP命令。

当初始化等待时间结束do_initial被拉低,首先确认在没有其他指令进行中时,若有刷新请求,则do_refresh信号拉高。

然后确认在没有其他指令进行中时,有读请求时,do_reada信号拉高。

然后确认在没有其他指令进行中时,有写请求时,do_writea信号拉高。

然后确认在没有其他指令进行中时,有预充电请求时,do_precharge信号拉高。

然后确认在没有其他指令进行中时,有模式寄存器加载请求时,do_load_mode信号拉高。

当产生自动刷新命令、读写命令、预充电命令和模式加载命令时,系统会通过command_delay来延迟指令的有效执行时间,确保指令能完整进行。除开突发读/写的情况,其他每个指令统一延迟8个时钟周期后再延迟4个周期。

拿预充电命令举例:

读写命令则是等待64个数据连续读/写完后,再延迟4个时钟周期。拿读命令举例:

下面是地址端口、bank选择和片选信号的处理。在初始化状态,加载模式寄存器时是通过地址端口对寄存器进行赋值的。在激活操作时,地址端口发送行地址;在读或者写操作时,地址端口发送列地址。

command.v 模块里面得到行地址rowaddr和列地址coladdr:

放大地址线SA波形可以看到,在行激活的时候发送的地址确实是0:

下面是RAS_N、CAS_N、WE_N信号的产生。

因为写入 SDRAM 的数据与从 SDRAM 读出的数据为共用传输引脚,为避免存取数据相冲,系统里设计了一个三态门电路(三态门电路的设计参考07-SDRAM控制器的设计——Sdram_Control.v代码解析(后续发布),通过oe信号控制SDRAM 数据接口的输入和输出。oe信号的设计如下:

每次oe信号拉高超过64个时钟周期,确保数据被正确写入到SDRAM器件当中:

另外,读命令和写命令之前要先有激活命令,读写命令在激活命令的3个周期后发出,所以这里用个右移计数器计数3个周期:

do_wr信号波形如下:

PS: 本文波形来自文件~\sdramcontrol\output_files\command.stp。

往期阅读

01-SDRAM控制器的设计——案例总概述

02-SDRAM控制器的设计——SDRAM简介

03-SDRAM控制器的设计——解读IS42R16320D的数据手册

04-SDRAM控制器的设计——control_interface.v代码解析

06-SDRAM控制器的设计——异步FIFO的调用

07-SDRAM控制器的设计——Sdram_Control.v代码解析

08-SDRAM控制器的设计——top文件代码解析

 09-SDRAM控制器的设计——按键的处理(边沿捕获电路、硬件消抖、Verilog消抖电路)

10-SDRAM控制器的设计—— signaltap 调试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值