SDRAM 学习(三)之command
command 模块总述
SDRAM 的 command 模块的内容包括如下:
1、对初始化请求、配置模式寄存器、读/写、刷新、预充电等命令的一个优先级的控制。
2、对命令执行时间进行控制,依据如图1,红圈框起来的都是最小值。
图1
3、将相应的命令进行解码即转化成相应的控制总线,转化依据如图2:
图2
代码详解
以下代码都是我通过学习别人的代码,然后按照我自己的理解修改后的,经过验证是正确的。
1、SDRAM 重要的参数
SDRAM 的容量为 4 * 1 M* 16 bit , 一共有 4 个 bank , 每个 bank 为 12 行、8列。 本次设计 SDRAM 为 顺序的突发读写模式、TCAS=3,TCL=3 。
我们将这些参数定义到 parameter.h 模块中,然后通过 `include "parameter.h" 在其他文件中调用这个文件,具体如下。
在command.v 中调用该文件。
图2
2、command.v 模块接口
3、命令的优先级,
(1) SDRAM在每一刻只有一个指令在执行;
(2) 先到的指令先执行,即:如果刷新请求到来时,其它命令正在执行中,要等到当前命令执行完成后,才能执行刷新指令;
(3) 其它指令和刷新请求同时到来时刷新操作先执行。
命令优先级代码:
初始化命令,可以和上面的代码融合为1个代码。
4、命令执行的延时控制
经过优先级判断后,要把指令解码成可控制SDRAM的信号,同时还要用三个移位寄存器对命令执行的延迟时间进行控制。第一个为指令延时寄存器,用来保证SDRAM有充足时间完成最终指令。例如,如果命令的执行需要9个时钟周期的时间(高手进阶—终极内存计数指南中说刷新需要9个时钟周期),则指令延时寄存器command_delay的初值设为 8 个 1 即“11111111”,同时声明一个内部信号command_done,作为指令执行完成的标志的。在指令执行期间,每一个时钟上升沿到来时,移位寄存器向右移位一次,command_delay[0]的移入command_done,同时“0” 移入最高位command_delay[7]。当command_done为“0”时,就说明指令的延迟时间已到,即通过command_done的值,就可以判断当前指令是否执行完成。要注意的是:移位寄存器的位数和初值,应该根据SDRAM的数据手册中命令完成需要的时间和系统的时钟周期来确定。
观察 图1 给出的数据手册内容得知,命令执行时间最长的是刷新命令至少63ns,我们时钟是100Mhz,至少需要7个时钟周期,因此设置为''11111111"是合适的,而对于更高工作频率的SDRAM则需要更多的时钟周期,只要满足数据手册要求就好了。
下面我将画出command_delay = 2‘b11 的时序图,以便理解。
代码:
当输入的指令为writea和reada指令,行激活到列激活必须满足的时间 TRCD。所以,声明第二个移位寄存器rw_shift,来计算这两个指令的附加时间,其工作原理和第一个移位寄存器是一样的。数据通道oe,即数据输入、输出使能信号。对于非页模式的读写来说,oe保持有效的时间取决于突发长度。并且oe有效的起始时间对读操作和写操作时不同的:读操作时,oe有效的起始时间取决于CAS延时时间,而对于写操作时则在写指令开始时oe就是有效的。
刷新、读、写命令还需要一个延时,原因如下(这都是我自己的理解还请大神指点)
对于非全页模式,延迟完 9 个时钟周期后继续延时 5 个时钟周期保证命令有充足的时间执行完毕我是这样理解的,对于非全页模式的读来讲,需要的最大时间为
TRCD(3)+TCL(3)+8(突发长度为8) = 14个时钟周期。
对于全页模式则当一页数据传输完成后再延迟 5 个时钟周期,对于全页模式的读操作,Burst_STOP命令发出后,数据不是立刻停止,而是与CL有关,因此需要保护这些数据,进行一个延迟。
全页模式下ex_write、ex_read 有效时,即正在进行全页数据传输过程中,当PM_STOP指令来时,则为0,
4、命令解码,将命令转化成控制信号的具体数值。
其中(do_reada| do_writea) 是指行激活
do_rw 是列激活
do_rw =1为读激活,do_rw =0 为写激活。
片选信号
5、行列地址、bank地址
将总地址的值分开,与 SDRAM 的重要参数保持一致
行列参数,行和列地址共用数据总线
当是单独的预刷新命令,SA[10]=1是指所有bank预充电
当是do_rwdo_rw==1列激活,SA[10] =1代表执行完读写操作就自动刷新,SA[10]=0 的含义则反之,
这里需要注意的是全页模式不能设置自动刷新,即不能在全页模式读写完以后自动启动预刷新。
bank地址
这些都是比较重要的,简单分析做个总结怕自己忘记。SDRAM设计中有很多细节,数据手册还是要多看看,每看一遍感觉都是不一样的。
学习的过程中没人交流,只能靠自己从网上搜、各种尝试,虽然很艰难,还是挺开心的。
以上都是我自己的理解,如果有大神发现问题,还请指出,本女子感激不尽!
原文链接:http://www.cnblogs.com/aslmer/p/6031921.html
SDRAM 学习(三)之command的更多相关文章
- docker深入学习三
docker学习三:network docker支持容器之间的网络通信,docker的网络通信方式有以下五种: bridge docker 默认的网络驱动,如果不指定网络驱动,docker就会创建一个 ...
- HTTP学习三:HTTPS
HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...
- TweenMax动画库学习(三)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) ...
- Struts2框架学习(三) 数据处理
Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...
- 4.机器学习——统计学习三要素与最大似然估计、最大后验概率估计及L1、L2正则化
1.前言 之前我一直对于“最大似然估计”犯迷糊,今天在看了陶轻松.忆臻.nebulaf91等人的博客以及李航老师的<统计学习方法>后,豁然开朗,于是在此记下一些心得体会. “最大似然估计” ...
- DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
- [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点
深度学习三巨头之一来清华演讲了,你只需要知道这7点 http://wemedia.ifeng.com/10939074/wemedia.shtml Yann LeCun还提到了一项FAIR开发的,用于 ...
- SVG 学习<三>渐变
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- Android JNI学习(三)——Java与Native相互调用
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
随机推荐
- R语言学习笔记:字符串处理
想在R语言中生成一个图形文件的文件名,前缀是fitbit,后面跟上月份,再加上".jpg",先不百度,试了试其它语言的类似语法,没一个可行的: C#中:"fitbit&q ...
- git学习笔记1
很早以前就听说了git,今天就开始使用git,并做简单记录 在Linux上安装Git 首先,你可以试着输入git,看看系统有没有安装Git: $ git The program 'git' is cu ...
- [android] 手机卫士自定义对话框布局
手机防盗页面部分 点击手机防盗,进行判断,如果没有设置密码,显示一个设置密码的对话框,如果已经设置密码了,弹出输入密码对话框 密码保存在SharedPreferences中,数据取出进行判断 自定义一 ...
- UISearchBar改变搜索框的高度
系统的searchBar UISearchBar的中子控件及其布局 UIView(直接子控件) frame 等于 searchBar的bounds,view的子控件及其布局 UISearchBarBa ...
- Eclipse Svn 取消某些文件或文件夹的版本控制
SVN提交时,我们有时候需要将一些文件忽略掉,例如:maven项目中的target文件夹,可以将这些文件或文件夹设置成ignore来忽略这些文件或文件夹 1. 将文件夹或文件从Eclipse中删除.记 ...
- Android Design Support Library——TabLayout
TabLayout——选项卡布局,通过选项卡的方式切换view并不是material design中才有的新概念,选项卡既可以固定,也可以滚动显示效果如下: 通过addTab方法可以实现选项卡的动态添 ...
- python数据结构-基本数据类型
- springMVC请求流程详解
SpringMVC框架是一个基于请求驱动的Web框架,并且使用了'前端控制器'模型来进行设计,再根据'请求映射规则'分发给相应的页面控制器进行处理. (一)整体流程 具体步骤: 1. 首先用户发送请 ...
- Java中的 WeakReference 和 SoftReference
我们知道Java语言中没有指针,取而代之的是引用reference.Java中的引用又可以分为四种:强引用,弱引用(WeakReference),软引用(SoftReference),虚引用(Phan ...
- kettle初探
Kettle是Pentaho的一个组件,主要用于数据库间的数据迁移,到我用过的4.2版,还不支持noSQL,不知道4.4是不是支持了. Kettle自己有三个主要组件:Spoon,Kitchen,Pa ...