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

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

3天内不再提示

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

FPGA设计论坛 来源:西安邮电学院学报 作者:刘宇,陈文艺,李新 2021-06-30 09:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

目前,在很多通信芯片及系统的开发中,常常需要用到存储容量大、读写速度高的存储器。在各种随机存储器件中,SDRAM 的价格低、体积小、速度快、容量大,是比较理想的器件。但是,与SRAM相比较,SDRAM的控制逻辑复杂,使用很不方便。

为了解决这个矛盾,需要设计专用的SDRAM控制器,使系统用户象使用SRAM一样方便的使用SDRAM是十分必要的。考虑到控制器的通用性,本文提出了一种通用的SDRAM控制器的 Verilog设计,并给出了实现结果。

1 SDRAM的工作原理

通常一个SDRAM中包含2个或4个BANK,每个BANK的存储单元是按行和列寻址的。由于这种特殊的存储结构,与SRAM比较而言,SDRAM在工作的原理上有以下几个特点:

第一,SDRAM在上电100us-200us 后,必须由一个初始化过程来配置SDRAM的工作模式。初始化过程是由启动指令流完成:首先由一个Precharge all bank指令完成对所有BANK的预充,然后是两个或多个Auto Refresh指令,最后在模式配置指令下完成SDRAM内部模式设置寄存器的配置。模式寄存器的值控制着SDRAM的工作方式,详细描述如表1所示。

SDRAM模式寄存器:

第二,SDRAM行列地址采用复用的方式减少了地址总线的密度。这样以来,SDRAM在每次读写操作时,行列地址要锁存。具体的,由ACTIVE命令激活要读写BANK,并锁存行地址,然后在读写指令有效时锁存列地址。

第三,SDRAM的操作是通过0aaff49e-d919-11eb-9e57-12bb97331649.png AP信号的组合指令字完成的。由于特殊的存储结构,SDRAM操作指令比较多,不像SRAM一样只有简单的读写,其主要的指令字见表2。

2 通用SDRAM控制器的设计

2.1 总体设计框图

SDRAM控制器的内部结构,包括控制寄存器、初始化请求产生、刷新请求产生、指令仲裁器、指令译码、数据通路六个模块。控制寄存器控制SDRAM的各种工作模式,其值可以通过MCU接口配置。

指令仲裁器对系统的读写请求信号sdram*rd*n、sdram*wr*n及初始化请求和刷新请求进行仲裁。仲裁的结果由指令译码器译码产生 SDRAM的操作指令字。用Sdram*busy信号指示SDRAM总线的闲忙,sdramready为SDRAM控制器对系统读写请求的响应指示,指示对数据有效的读写操作。

2.2 各模块的设计

2.2.1 控制寄存器模块

包含控制工作模式的各种寄存器。系统用户可以根据实际需要配置SDRA的工作模式。可以通过MCU接口来配置,也可以省去MCU接口而通过预设参数来配置。寄存器主要包括两类:一是初始化模式控制寄存器,用于控制SDRAM初始化指令流的产生方式;二是SDRAM模式控制寄存器,用于SDRAM的刷新及其它操作指令参数的控制。

2.2.2 初始化请求产生模块

上电后初始化请求信号的产生延迟控制。由于系统上电100us-200us 后时钟才能稳定,之后,SDRAM才可以开始初始化操作。为防止译码毛刺的出现,采用格雷码计数器来实现这一延迟的控制。系统复位结束后,启动计数器,当计数器计到设定的值后计数值保持,同时译码产生初始化的请求信号,在SDRAM初始化完成后请求变为无效。

2.2.3 刷新请求产生模块

根据模式寄存器的配置的频率产生SDRAM的刷新请求信号。这部分电路也是采用格雷码计数器实现的。计数器计到设定的值后产生刷新请求信号,同时返回到初值继续计数。

2.2.4 指令仲裁器模块

对初始化请求、刷新请求和系统的读写请求进行优先级仲裁,产生初始化响应initial*hold、刷新响应ref*hold和读写响应sdram*wr*hold。初始化操作只在上电时进行一次,它是SDRAM正常工作的基础,所以它的优先级最高。刷新请求的优先级次高,读写请求的优先级最低。当某一种操作正在执行时不会响应后来的请求。

2.2.5 指令译码器模块

根据指令仲裁器的结果和SDRAM控制器模式寄存器对工作模式参数的设置,分别对初始化指令、刷新指令、读写指令进行译码。译码的结果就是输出的控制指令字。当initial*hold=1时,译码产生SDRAM的初始化指令流;

当ref*hold=1时,译码产生刷新指令;当sdram*wr*hold=1并且读有效(Sdram*rd*n=0)或写有效 (Sdram*wr*n=0)时,根据寄存器设置的指令参数译码输出BANK激活指令、读指令及预充指令。

此外,在SDRAM执行任何一种操作时,都用 sdram*busy=1来指示SDRAM忙;用sdram*busy=0来指示SDRAM空闲。用sdram*ready=1指示系统对SDRAM数据有效的读写操作。译码模块采用Verilog结合状态机的设计方法,直观清晰,提高了电路的设计周期。

SDRAM控制器软核设计的状态机实现原理如图2所示,包含了10个状态,其中从Power on到Mode reg set为上电后SDRAM的初始化过程。其余状态为SDRAM的正常读写及刷新操作过程。

2.2.6 数据通路模块

是根据寄存器的设置及指令译码的结果对把系统非复用的地址处理为SDRAM复用的地址,使得SDRAM的地址及数据和相应的操作指令在时序上同步。

3接口时序

3.1写时序(Burst=1)

3.2 读时序(CAS=3,Burst=1)

4 实现及应用

本设计用Candence公司的 Ncverilog仿真工具进行了功能仿真。在仿真过程中,外部的SDRAM采用了Micron公司网上提供的1M×16、2M×2、4M×2的仿真模型,结果正确。

最后,该控制器软核作为SDRAM的接口电路嵌在了西安深亚公司EOS0121芯片设计中,采用Actel公司的Designer R1-2002工具进行了综合布线,在ProASIC A500K180 208Pin的FPGA上得到了实现。目前该芯片已被多家公司采用,反映良好。从而也说明了该SDRAM控制器软核性能可靠,工作稳定。

由于采用了IP核的设计思想,只要修改少量的参数配置就可以支持多个厂家多种型号的SDRAM器件。对特定容量的SDRAM的特定工作模式而言,只要根据其器件参数进行设定,控制器就可以适用特定SDRAM的特定工作模式。

5 结束语

Verilog硬件描述语言已越来越广泛地应用于EDA领域,大多数EDA设计工程师都用它来进行ASIC设计和FPGA开发。用高级语言进行电路设计,可以灵活的修改参数,增加了电路设计的通用性和可移植性。

最后,需要指出的是采用IP核的方法设计电路,既可以单独使用,也可以嵌入到ASIC或FPGA的电路设计中去,大大缩短了产品开发周期,应该大力推广。

编辑:jq

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

    关注

    114

    文章

    17650

    浏览量

    190307
  • SDRAM
    +关注

    关注

    7

    文章

    449

    浏览量

    57293
  • 寄存器
    +关注

    关注

    31

    文章

    5590

    浏览量

    129092
  • AP
    AP
    +关注

    关注

    0

    文章

    111

    浏览量

    51092

原文标题:SDRAM控制器软核的Verilog设计

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    集团荣获汽车厂商智能座舱域控制器项目定点

    近日,东集团收到国内某知名大型汽车厂商的定点通知,选择东作为指定供应商,为其2026-2027年内量产上市的多款车型供应智能座舱域控制器,涉及总金额约为42亿元人民币。
    的头像 发表于 11-27 17:51 934次阅读

    e203 如何和FPGA通信?

    求教e203 如何和FPGA通信
    发表于 11-07 06:15

    E203提高CPU时钟频率方法

    本文将分享我们团队提高E203主频的办法。 查阅芯来科技官方出版的《手把手教你设计CPU——RISC-V处理篇》教材,我们发现,原本设计的E203主时钟域应该是100MHZ
    发表于 10-29 06:19

    基于FPGA的DDR控制器设计

    DDR控制协议 DDR3读写控制器主要用于生成片外存储DDR3 SDRAM进行读写操作所需要的时序,继而实现对片外存储的读写访问。由摄像
    发表于 10-21 14:30

    FPGA搭建DDR控制模块

    DDR3读写控制器主要用于生成片外存储DDR3 SDRAM进行读写操作所需要的时序,继而实现对片外存储的读写访问。由摄像头采集得到的图像数据通常数据量较大,使用片内存储资源难以实现
    发表于 10-21 10:40

    用FPGA实现DDR控制模块介绍

    DDR3读写控制器主要用于生成片外存储DDR3 SDRAM进行读写操作所需要的时序,继而实现对片外存储的读写访问。由摄像头采集得到的图像数据通常数据量较大,使用片内存储资源难以实现
    发表于 10-21 08:43

    工程机械控制器厂家 控制器国产替代 #国产控制器#控制器厂家#控制器品牌

    控制器
    长沙硕博电子科技股份有限公司
    发布于 :2025年04月29日 14:15:05

    工程机械控制器如何选型?控制器选型指南 #控制器 #车载控制器 #整车控制器 #控制器选型

    控制器
    长沙硕博电子科技股份有限公司
    发布于 :2025年03月14日 10:54:24

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

    前言 SDRAM控制器里面包含5个主要的模块,分别是PLL模块,异步FIFO 写模块,异步FIFO读模块,SDRAM接口控制模块,SDRAM
    的头像 发表于 03-04 10:49 2193次阅读
    <b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>的设计——<b class='flag-5'>Sdram</b>_Control.v代码解析(异步FIFO读写模块、读写<b class='flag-5'>SDRAM</b>过程)

    SDRAM控制器设计之异步FIFO的调用

    的原理,要读取 SDRAM 中的数据来处理时, FPGA 端的控制架构中一定要有相当于水塔功能的“读出数据缓冲”,在数据的处理上才会流畅。
    的头像 发表于 02-26 15:27 1735次阅读
    <b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>设计之异步FIFO的调用

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

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

    SDRAM控制器功能模块概述

    按键KEY1触发写,将计数产生的0到255的数据写到FIFO写模块里面,继而写到SDRAM 器件里面。
    的头像 发表于 02-07 09:33 1102次阅读
    <b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>功能模块概述

    EE-178:ADSP-TS101S TigerSHARC片上SDRAM控制器

    电子发烧友网站提供《EE-178:ADSP-TS101S TigerSHARC片上SDRAM控制器.pdf》资料免费下载
    发表于 01-14 15:00 0次下载
    EE-178:ADSP-TS101S TigerSHARC片上<b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>

    EE-127:ADSP-21065L片内SDRAM控制器

    电子发烧友网站提供《EE-127:ADSP-21065L片内SDRAM控制器.pdf》资料免费下载
    发表于 01-06 15:45 0次下载
    EE-127:ADSP-21065L片内<b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>

    ADSP-21161 SHARC片内SDRAM控制器

    电子发烧友网站提供《ADSP-21161 SHARC片内SDRAM控制器.pdf》资料免费下载
    发表于 01-03 15:04 0次下载
    ADSP-21161 SHARC片内<b class='flag-5'>SDRAM</b><b class='flag-5'>控制器</b>