1.1    先来看看信号线的描述

我们以X16的器件为例,下面的截图来自 镁光的官方手册 https://media-www.micron.com/-/media/client/global/documents/products/data-sheet/dram/ddr3/4gb_ddr3l.pdf?rev=8d4b345161424b60bbe4886434cbccf4

2.1    DDR如何实现读写操作

下面再来一张X16的器件内部框图,下面的解释也都是适用于X16器件。

框图可以看出,行地址和列地址是复用的,通过RAS与CAS信号实现复用,这样实际地址线就有RA[14:0]、CA[9:0]、 BA[2:0] 共15+10+3 = 28 bit,对应256M地址,1个地址对应16bit数据,因此共512MB容量。

这里会有同学问了,1个地址对应16bit数据,那么是不是意味着单次必须写入16bit的整数倍,且offset地址必须是16bit整数倍呢?不是的,原因是DDR按照8bit作为1个Byte Lane,使用DM()信号表征对应的Byte是否有效,从而允许写入奇数字节的offset地址和数据长度。

典型的,如果要向0x1地址写入1字节数据,那么DDR会认为此时地址为0x0,UDM此时有效,LDM此时无效,从而向0x1 地址写入了1字节长度的数据。

典型的,如何最大化DDR写入读出的速度呢?如果每次写入读出都要先传递1次地址,那可就效率太低了,DDR需要支持burst的传输,即先写入地址,然后联系写入burst长度的数据。那么burst的长度是多少,如何指定呢?

下图是xilinx MIG配置页面,可以看到只支持burst length 8,就对应 8*16bit/8bit = 16字节

是MIG通过向DDR写入MODE REGISTER指定的。

BURST LENGTH为8,这个意思就是如果单次传输地址、长度向16字节对齐,就可以得到最大效率。因为避免了频繁写入地址的操作。

至于写入、读出的时序细节,建议参考镁光的器件手册。

3.1    如果只需要用到X16的低8bit,怎么办

有时候处于兼容性等考虑,对于1个x16数据位宽的器件,只需要用到其低8bit数据位宽,这时候应该如何处理呢?

1、 根据器件的原理,如果你只用低8bit,那么会损失掉一半的地址空间;

2、 在对mig进行配置时,必须自定义器件,而不能随意更换器件型号或者直接忽略高8bit,这会导致初始化和校准无法完成。

硬件设计上需要注意哪些呢?下面是官方给的建议,建议按照要求设计。

MIG是如何向DDR中写入数据的的更多相关文章

  1. 向post请求中写入数据,最终保存在了HttpWebRequest.Params中

    一.向post请求中写入数据,最终保存在了HttpWebRequest.Params中: 1)如果存入的是IDictionary类型的字符串变量,如:“username=administrator”, ...

  2. PHP连接sqlserver的两种方法,向sqlserver2000中写入数据,中文乱码

    项目环境是php5.3.28 项目用的ThinkPHP3.2.3  已经mysql5.5数据库,要和另一个项目对接,需要连接sqlsever2000数据库进行一些操作. 第一种用php自带扩展连接数据 ...

  3. 通过I2C总线向EEPROM中写入数据,记录开机次数

    没买板子之前,用protues画过电路图,实现了通过i2c总线向EEPROM中写入和读出数据. 今天,在自己买的板子上面写关于i2c总线的程序,有个地方忘了延时,调程序的时候很蛋疼.下面说说我对I2c ...

  4. 【转】从QDataStream向QByteArray中写入数据时的注意点(QT)

    最近发现从QDataStream向QByteArray中写入数据常常是写不进去的,通过查看QT的源码: QDataStream &operator>>(QDataStream &a ...

  5. POI往word模板中写入数据

    转: POI往word模板中写入数据 2018年03月24日 16:00:22 乄阿斗同學 阅读数:2977  版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...

  6. Verilog利用$fdisplay命令往文件中写入数据

    最近在做的事情是,用FPGA生成一些满足特定分布的序列.因此为了验证我生成的序列是否拥有预期的性质,我需要将生成的数据提取出来并且放到MATLAB中做数据分析. 但是网上的程序很乱,表示看不懂==其实 ...

  7. 复制excel表,往excel表中写入数据

    import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import jav ...

  8. POI向Excel中写入数据及追加数据

    import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import ...

  9. 计算机二级-C语言-程序填空题-190117记录-对文件的处理,复制两个文件,往新文件中写入数据。

    //给定程序的功能是,调用函数fun将指定源文件中的内容赋值到指定目标文件中,复制成功时函数返回1,失败时返回0,把复制的内容输出到终端屏幕.主函数中源文件名放在变量sfname中,目标文件名放在变量 ...

  10. lua向文件中写入数据,进行记录

    function readfile(path) local file = io.open(path, "r") if file then local content = file: ...

随机推荐

  1. killall 以及 pkill 等命令

    https://zhidao.baidu.com/question/1500084252693125099.html // 通过 killall 命令killall nginx// 通过 pkill ...

  2. Rsync的简单使用

    Rsync的简单使用 需求 一个运行很久的系统里面可能包含了非常多的垃圾文件. 但是又不可能随便删除, 很多垃圾可能有某些奇葩的用法. 有时候新建一个应用复制文件的话比较浪费磁盘和带宽. 所以这里简单 ...

  3. 庖丁解牛:最全babel-plugin-import源码详解

    庖丁解牛:最全 babel-plugin-import 源码详解 序言:在用 babel-plugin 实现按需加载一文中笔者用作用域链思路实现了按需加载组件.此思路是统一式处理,进入 ImportD ...

  4. 数据结构与算法 第二章线性表(48课时课程笔记)Data Structure and Algorithms

    2.1 线性表的类型定义 一个线性表是n个数据元素的有限序列. (1)结构初始化 InitList(&L) 构造一个空的线性表L. (2)销毁结构 DestroyList(&L) (3 ...

  5. 最小的 $x$ 满足 $L\le x\bmod P\le R$

    设 \(G(L, R, D, P)\) 为 \(y P+L \leq x D \leq y P+R\) ,满足 \(1 \leq L \leq R<P, D<P\) ,其中 \(x\) 的 ...

  6. echarts的初始化和销毁dispose

    容器节点被销毁以及被重建时 假设页面中存在多个标签页, 每个标签页都包含一些图表. 当选中一个标签页的时候,其他标签页的内容在 DOM 中被移除了. 这样,当用户再选中这些标签页的时候,就会发现图表& ...

  7. 过滤器filters对时间格式的处理

    在表格中,我们经常会对时间格式进行处理: 这个时候,我们就可以使用过滤器了. 过滤器是不会,改变原始值 {{ mess | dotime }} {{ mess | do2time }} mess: & ...

  8. JS ----- JS原型与原型链终极详解(一)

    一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object .Function 是 JS 自带的函数对象.下面举例说明 var o1 = ...

  9. Rider调试时断点打不上(变灰色小叉)

    记录我在使用rider调试Unity的C#代码时遇到断点变灰色小叉叉,断点打不上/(不会进入断点)的几种解决办法 首先要确保你没有禁用所有的断点,然后再尝试使用本文的三种方法. 不要禁用所有断点 在R ...

  10. 重写JSON.stringify与JSON.parse使其支持解析function类型

    const JSONStringify = (option) => { return JSON.stringify(option, (key, val) => { // 处理函数丢失问题 ...