MIG是如何向DDR中写入数据的
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中写入数据的的更多相关文章
- 向post请求中写入数据,最终保存在了HttpWebRequest.Params中
一.向post请求中写入数据,最终保存在了HttpWebRequest.Params中: 1)如果存入的是IDictionary类型的字符串变量,如:“username=administrator”, ...
- PHP连接sqlserver的两种方法,向sqlserver2000中写入数据,中文乱码
项目环境是php5.3.28 项目用的ThinkPHP3.2.3 已经mysql5.5数据库,要和另一个项目对接,需要连接sqlsever2000数据库进行一些操作. 第一种用php自带扩展连接数据 ...
- 通过I2C总线向EEPROM中写入数据,记录开机次数
没买板子之前,用protues画过电路图,实现了通过i2c总线向EEPROM中写入和读出数据. 今天,在自己买的板子上面写关于i2c总线的程序,有个地方忘了延时,调程序的时候很蛋疼.下面说说我对I2c ...
- 【转】从QDataStream向QByteArray中写入数据时的注意点(QT)
最近发现从QDataStream向QByteArray中写入数据常常是写不进去的,通过查看QT的源码: QDataStream &operator>>(QDataStream &a ...
- POI往word模板中写入数据
转: POI往word模板中写入数据 2018年03月24日 16:00:22 乄阿斗同學 阅读数:2977 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...
- Verilog利用$fdisplay命令往文件中写入数据
最近在做的事情是,用FPGA生成一些满足特定分布的序列.因此为了验证我生成的序列是否拥有预期的性质,我需要将生成的数据提取出来并且放到MATLAB中做数据分析. 但是网上的程序很乱,表示看不懂==其实 ...
- 复制excel表,往excel表中写入数据
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import jav ...
- POI向Excel中写入数据及追加数据
import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import ...
- 计算机二级-C语言-程序填空题-190117记录-对文件的处理,复制两个文件,往新文件中写入数据。
//给定程序的功能是,调用函数fun将指定源文件中的内容赋值到指定目标文件中,复制成功时函数返回1,失败时返回0,把复制的内容输出到终端屏幕.主函数中源文件名放在变量sfname中,目标文件名放在变量 ...
- lua向文件中写入数据,进行记录
function readfile(path) local file = io.open(path, "r") if file then local content = file: ...
随机推荐
- killall 以及 pkill 等命令
https://zhidao.baidu.com/question/1500084252693125099.html // 通过 killall 命令killall nginx// 通过 pkill ...
- Rsync的简单使用
Rsync的简单使用 需求 一个运行很久的系统里面可能包含了非常多的垃圾文件. 但是又不可能随便删除, 很多垃圾可能有某些奇葩的用法. 有时候新建一个应用复制文件的话比较浪费磁盘和带宽. 所以这里简单 ...
- 庖丁解牛:最全babel-plugin-import源码详解
庖丁解牛:最全 babel-plugin-import 源码详解 序言:在用 babel-plugin 实现按需加载一文中笔者用作用域链思路实现了按需加载组件.此思路是统一式处理,进入 ImportD ...
- 数据结构与算法 第二章线性表(48课时课程笔记)Data Structure and Algorithms
2.1 线性表的类型定义 一个线性表是n个数据元素的有限序列. (1)结构初始化 InitList(&L) 构造一个空的线性表L. (2)销毁结构 DestroyList(&L) (3 ...
- 最小的 $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\) 的 ...
- echarts的初始化和销毁dispose
容器节点被销毁以及被重建时 假设页面中存在多个标签页, 每个标签页都包含一些图表. 当选中一个标签页的时候,其他标签页的内容在 DOM 中被移除了. 这样,当用户再选中这些标签页的时候,就会发现图表& ...
- 过滤器filters对时间格式的处理
在表格中,我们经常会对时间格式进行处理: 这个时候,我们就可以使用过滤器了. 过滤器是不会,改变原始值 {{ mess | dotime }} {{ mess | do2time }} mess: & ...
- JS ----- JS原型与原型链终极详解(一)
一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object .Function 是 JS 自带的函数对象.下面举例说明 var o1 = ...
- Rider调试时断点打不上(变灰色小叉)
记录我在使用rider调试Unity的C#代码时遇到断点变灰色小叉叉,断点打不上/(不会进入断点)的几种解决办法 首先要确保你没有禁用所有的断点,然后再尝试使用本文的三种方法. 不要禁用所有断点 在R ...
- 重写JSON.stringify与JSON.parse使其支持解析function类型
const JSONStringify = (option) => { return JSON.stringify(option, (key, val) => { // 处理函数丢失问题 ...