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的更多相关文章

  1. docker深入学习三

    docker学习三:network docker支持容器之间的网络通信,docker的网络通信方式有以下五种: bridge docker 默认的网络驱动,如果不指定网络驱动,docker就会创建一个 ...

  2. HTTP学习三:HTTPS

    HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...

  3. TweenMax动画库学习(三)

    目录               TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)           ...

  4. Struts2框架学习(三) 数据处理

    Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...

  5. 4.机器学习——统计学习三要素与最大似然估计、最大后验概率估计及L1、L2正则化

    1.前言 之前我一直对于“最大似然估计”犯迷糊,今天在看了陶轻松.忆臻.nebulaf91等人的博客以及李航老师的<统计学习方法>后,豁然开朗,于是在此记下一些心得体会. “最大似然估计” ...

  6. DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  7. [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点

    深度学习三巨头之一来清华演讲了,你只需要知道这7点 http://wemedia.ifeng.com/10939074/wemedia.shtml Yann LeCun还提到了一项FAIR开发的,用于 ...

  8. SVG 学习<三>渐变

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  9. Android JNI学习(三)——Java与Native相互调用

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  10. day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

随机推荐

  1. 换SSD硬盘,重装系统,一阵子忙乱

    许久没重装过系统了,低声下气地问老板要了一块SSD硬盘,不马上安装上手痒得难受,但年底这个时候重装系统绝对忙乱,差点耽误了一份申请表和一份培训记录表.   SSD安装:先从网上找相关贴子,最主要的一个 ...

  2. 分形几何算法和实现(C语言)

    初识分形 1.分形的含义: 英文单词Fractal,它是由美籍法国数学家曼德勃罗(Benoit Mandelbrot)创造出来的.其含义是不规则的.破碎的.分数的.曼德勃罗是想用此词来描述自然界中传统 ...

  3. 【读书笔记】iOS-查看一个软件ipa包的内容

    一,打开itunes----->我的iPhone应用程序. 二,右键点击app---->在Finder中显示---->出现下图所示界面. 三,将上图中的ipa包拷贝到桌面,如下图所示 ...

  4. 多线程之NSThread和NSObject

    #pragma mark - NSThread实现多线程 /* // 获取当前线程 NSLog(@"currentThread = %@", [NSThread currentTh ...

  5. HTML5--Audio

    一.Audio标签 Web 上的音频 直到现在,仍然不存在一项旨在网页上播放音频的标准. 今天,大多数音频是通过插件(比如 Flash)来播放的.然而,并非所有浏览器都拥有同样的插件. HTML5 规 ...

  6. 再也不用管UIImagePicker的代理了

    EasyImagePicker 闲暇之余对UIImagePicker做了封装,将代理调用的方式封装成block回调的方式,这样一行代码就能够搞定UIImagePicker的使用,包括选择图片,取消选择 ...

  7. android 开发小记

    1.fragment & activity when config changes, activity will restart but fragment can be store. 2.te ...

  8. 使用Apache Tomcat Maven插件部署运行 Web 项目

    什么是Apache Tomcat Maven Plugin? Maven Plugin 是Apache Tomcat 提供的一个Maven插件,它可以在你没有tomcat容器时将任何一个war项目文件 ...

  9. 阶乘 求n!中质因数的个数

    在n!中末尾有几个0 取决于n!中5的个数(2肯定比5多) 所以遍历从1到n的数,看总共有几个5即可 ..N do j = i; == ) ++ret; j /= ; end end 有个nb的方法: ...

  10. javascript 如何访问 action或者controller 传给 jsp 页面的值

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...