0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SDRAM控制器设计之control_interface.v代码解析

友晶FPGA 来源:友晶FPGA 2025-02-19 15:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

control_interface.v文件里已经写了非常详尽的代码备注。本文继续对该文件代码进行讲解,并给出SignalTap波形辅助读者理解。

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

4da4e62c-ee93-11ef-9310-92fbcf53809c.png

control_interface.v文件对应图中SDRAM接口控制模块,该模块主要控制SDRAM命令的产生,包括空操作命令、预充电命令、自动刷新命令、加载模式寄存器命令和读写命令等。如下是该模块的RTL视图:

4dbd60da-ee93-11ef-9310-92fbcf53809c.png

根据IS42R16320D 的时序图可知该SDRAM上电后约经过 200us 才进入稳定期,在这段时间不可以对 SDRAM 做任何的操作(除了发送NOP命令), 200us 之后要对所有的区块进行预充电,接着再给SDRAM发送 8次自动刷新命令,最后才进行SDRAM模式寄存器的设定。完成了初始化过程之后,SDRAM 才能进行正常的读写操作。整个过程可简化为下图所示:

4ddceb80-ee93-11ef-9310-92fbcf53809c.png

control_interface.v模块工作时钟100MHz,由Sdram_Control.v的PLL模块提供。以100MHz时钟周期计算,200us需要经历20000个周期。另外,参考IS42R16320D的datasheet或者参考02-SDRAM控制器的设计——解读IS42R16320D的数据手册可知预充电最少要2个时钟周期,自动刷新命令完成需要至少8个时钟周期,模式寄存器的设定至少也要2个时钟周期。为了保险起见,将预充电、自动刷新和模式寄存器设定等操作的等待周期都设定为20个时钟周期(也就是0.2us)。

4df9b45e-ee93-11ef-9310-92fbcf53809c.png

代码里面首先设计两个计数器,第一个计数器是初始化动作的计时器。为了保险起见,初始化先等待24000个时钟周期:

4e1d45b8-ee93-11ef-9310-92fbcf53809c.png

从SignalTap波形图可以看到INIT_REQ在init_timer从0计数到24000以后拉低了。INIT_REQ拉高(绿色部分)指示了SDRAM开机后的输入稳定期。

4e3e5cc6-ee93-11ef-9310-92fbcf53809c.png

把INIT_REQ和init_timer局部放大如下:

4e53622e-ee93-11ef-9310-92fbcf53809c.png

代码里面实现预充电操作等待20个时钟周期:

4e6c6cf6-ee93-11ef-9310-92fbcf53809c.png

4e878180-ee93-11ef-9310-92fbcf53809c.png

代码里面实现每次自动刷新都等待20个时钟周期(总共8次):

4ea6e958-ee93-11ef-9310-92fbcf53809c.png

4ec40e84-ee93-11ef-9310-92fbcf53809c.png

第二个计数器是正常读写时的自动刷新间隔计时器,因为SDRAM必须要不断进行刷新才能保留数据 ,由IS42R16320D数据手册可知每一行刷新的循环周期最多为64ms。DE10-Standard开发板上的SDRAM有13位的行地址,共有8192行,而每一次的刷新命令只能对一行有效,所以在最长 64ms / 8192 = 7.8125us 的时间间隔内,就必须发一次刷新的命令。在工作时钟100M下,这里刷新周期设置为768。

4ede362e-ee93-11ef-9310-92fbcf53809c.png

从SignalTap波形图可以看到timer的值在输入稳定等待期(INIT_REQ为高)一直是968:

4f05d4c2-ee93-11ef-9310-92fbcf53809c.png

INIT_REQ拉低以后timer开始倒数计数:

4f21bdae-ee93-11ef-9310-92fbcf53809c.png

初始化操作结束后timer的计数周期就变成了768:

4f44b1c4-ee93-11ef-9310-92fbcf53809c.png

可能读者疑惑这里为什么中间有三个周期timer的值是65535、65534、65533,而不是马上变为768呢?

其实可以结合这个图看:

4f65ef88-ee93-11ef-9310-92fbcf53809c.png

1. timer 为0;

2. timer为0 的下个时钟周期REFRESH_cycle为1,timer值继续减一,为65535;

3. 继而下个时钟周期 do_refresh 为1,timer值继续减一,为65534;

4. 继而下个时钟周期 REF_ACK 为1,timer值继续减一,为65533;
5. 继而在下个时钟周期的时候 timer 赋值为768。

注意本文件当中REFRESH_init和REFRESH_cycle都是指示自动刷新操作的命令,都会控制SDRAM控制器去发送RASCASWE组合是001的命令,它们只是指示的是不同状态下的自动刷新。

4f838912-ee93-11ef-9310-92fbcf53809c.png

读写指令译码的代码部分如下,当CMD值为000时,对应NOP指令,当CMD值为001对应读指令,当CMD值为010时对应写指令:

4f9eb6f6-ee93-11ef-9310-92fbcf53809c.png

再来看CM_ACK和CMD_ACK信号。大家可能会疑惑为什么要弄CM_ACK和CMD_ACK这两个变量呢?

4fba8d90-ee93-11ef-9310-92fbcf53809c.png

首先看输入信号CM_ACK。由command.v文件可知当do_refresh || do_reada || do_writea || do_precharge || do_load_mode有效时,CM_ACK=1:

4fd4890c-ee93-11ef-9310-92fbcf53809c.png

而只有接收到WRITEA、READA、PRECHARGE、LOAD_MODE等命令时do_refresh 、 do_reada 、 do_writea 、do_precharge 、 do_load_mode这些信号会拉高:

4ff96006-ee93-11ef-9310-92fbcf53809c.png

500c6ba6-ee93-11ef-9310-92fbcf53809c.png

所以CM_ACK信号用于接收指令。它主要指示预充电指令、初始化状态下的自动更新命令、加载模式寄存器指令和读写指令的接收。

因为接收指令不一定会执行,CMD_ACK用于判断接收到的指令是否执行。所以当CM_ACK有效(接收到了指令),CMD_ACK无效(无效说明当前没有别的指令在执行)时,才令CMD_ACK有效。

CM_ACK与CMD_ACK信号波形参考下图:

5033c5fc-ee93-11ef-9310-92fbcf53809c.png

PS:本文的波形图来自文件~sdramcontroloutput_filesinterface.stp

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    114

    文章

    17660

    浏览量

    190457
  • SDRAM
    +关注

    关注

    7

    文章

    449

    浏览量

    57301
  • 接口
    +关注

    关注

    33

    文章

    9452

    浏览量

    156228
  • 代码
    +关注

    关注

    30

    文章

    4945

    浏览量

    73211

原文标题:04-SDRAM控制器的设计——control_interface.v代码解析

文章出处:【微信号:友晶FPGA,微信公众号:友晶FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SDRAM控制器的设计——Sdram_Control.v代码解析(异步FIFO读写模块、读写SDRAM过程)

    的设计——control_interface.v代码解析; https://www.elecfans.com/d/6458523.html   SDRAM指令执行模块解读参考:04-
    的头像 发表于 03-04 10:49 2214次阅读
    <b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>的设计——<b class='flag-5'>Sdram_Control.v</b><b class='flag-5'>代码</b><b class='flag-5'>解析</b>(异步FIFO读写模块、读写<b class='flag-5'>SDRAM</b>过程)

    DDR_SDRAM控制器的VHDL代码已经测试

    DDR_SDRAM控制器的VHDL代码已经测试
    发表于 08-24 16:49

    【开源骚客】《轻松设计SDRAM控制器》第八讲—命令解析模块讲解

    的哦,哈哈,大家先别急。在这一讲中,我们就来完成读模块,然后对这个SDRAM控制器稍加完善就可以应用到项目中了。本讲主要内容如下:命令解析模块的作用详细介绍;命令解析模块时序设计;命令
    发表于 05-08 22:31

    SDRAM控制器参考设计,Lattice提供的VHDL源代码

    SDRAM控制器参考设计,Lattice提供的VHDL源代码 -- Permission: --   Lattice Semiconductor grants
    发表于 06-14 08:54 93次下载

    使用Verilog实现基于FPGA的SDRAM控制器

    摘 要:介绍了SDRAM的特点和工作原理,提出了一种基于FPGA的SDRAM控制器的设计方法,使用该方法实现的控制器可非常方便地对SDRAM
    发表于 06-20 13:04 2443次阅读

    SDRAM控制器简易化设计

    SDRAM存储芯片拥有快速读写的性能,可以应用以回波模拟系统作为数据高速缓存SDRAM芯片是由SDRAM控制器
    发表于 10-24 15:08 0次下载
    <b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>简易化设计

    DDR SDRAM控制器参考设计VHDL代码

    Xilinx FPGA工程例子源码:DDR SDRAM控制器参考设计VHDL代码
    发表于 06-07 11:44 19次下载

    DDR SDRAM控制器verilog代码

    Xilinx FPGA工程例子源码:DDR SDRAM控制器verilog代码
    发表于 06-07 14:13 40次下载

    EPM1240的SDRAM控制器的设计

    EPM1240的SDRAM控制器的设计
    发表于 10-31 08:24 21次下载
    EPM1240的<b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>的设计

    SDRAM控制器的设计

    逻辑复杂,接口方式与普通的存储差异很大。为了解决这个矛盾,需要设计专用的SDRAM控制器,使用户像使用SRAM -样方便的使用SDRAM。考虑到
    发表于 11-28 19:51 5次下载
    <b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>的设计

    FPGA读写SDRAM的实例和SDRAM的相关文章及一些SDRAM控制器设计论文

    本文档的主要内容详细介绍的是FPGA读写SDRAM的实例和SDRAM的相关文章及一些SDRAM控制器设计论文主要包括了:FPGA读写SDRAM
    发表于 12-25 08:00 57次下载
    FPGA读写<b class='flag-5'>SDRAM</b>的实例和<b class='flag-5'>SDRAM</b>的相关文章及一些<b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>设计论文

    如何使用FPGA设计SDRAM控制器

    针对SDRAM 操作繁琐的问题,在对SDRAM 存储和全页突发式操作进行研究的基础上,提出一种简易SDRAM 控制器的设计方法。该设计方法
    发表于 12-18 16:13 6次下载
    如何使用FPGA设计<b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>

    基于SDRAM控制器软核的Verilog设计

    SDRAM控制逻辑复杂,使用很不方便。 为了解决这个矛盾,需要设计专用的SDRAM控制器,使系统用户象使用SRAM一样方便的使用SDRAM
    的头像 发表于 06-30 09:16 3373次阅读
    基于<b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>软核的Verilog设计

    PIC32系列参考手册DDR SDRAM控制器

    电子发烧友网站提供《PIC32系列参考手册DDR SDRAM控制器.pdf》资料免费下载
    发表于 09-25 11:39 0次下载
    PIC32系列参考手册<b class='flag-5'>之</b>DDR <b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>

    SDRAM控制器设计command.v代码解析

    command.v文件对应图中SDRAM指令执行模块,它会从SDRAM接口控制模块接收指令,然后产生控制信号直接输出到
    的头像 发表于 02-25 10:32 962次阅读
    <b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>设计<b class='flag-5'>之</b>command.<b class='flag-5'>v</b><b class='flag-5'>代码</b><b class='flag-5'>解析</b>