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: ...
随机推荐
- Linux应用程序下网络栈参数的简单整理
somaxconn 该参数应该是决定一个服务能够同时处理多少个网络请求的核心参数. 一个程序能够支持多少个访问参数,是有两部分来决定, 第一部分是somaxconn ,第二部分是应用服务器启动时传递过 ...
- redis 6源码解析之 dict
edis源码的dict.c主要实现了基于hash表的操作,如增删改查,对哈希表大小的扩容和缩容,以及对哈希表的rehash和增量rehash等.在源码的dictScan函数中,非常巧妙精美地实现了对哈 ...
- 🛠 开源即时通讯(IM)项目OpenIM源码部署指南
OpenIM的部署涉及多个组件,并支持多种方式,包括源码.Docker和Kubernetes等.这要求在确保不同部署方式之间的兼容性同时,还需有效管理各版本之间的差异.确实,这些都是复杂的问题,涉及到 ...
- 菜鸟教程-所有软件教学都有【python、java、c、c++、html、sql、css、jquery、bootstrap、vue、c#、go】
软件教学[python.java.c.c++.html.sql.css.jquery.bootstrap.vue.c#.go] 首页 https://www.runoob.com/ 资料很全 1.p ...
- 7.3 Windows驱动开发:内核监视LoadImage映像回调
在笔者上一篇文章<内核注册并监控对象回调>介绍了如何运用ObRegisterCallbacks注册进程与线程回调,并通过该回调实现了拦截指定进行运行的效果,本章LyShark将带大家继续探 ...
- PE格式:新建节并插入代码
经过了前一章的学习相信你已经能够独立完成FOA与VA之间的互转了,接下来我们将实现在程序中插入新节区,并向新节区内插入一段能够反向连接的ShellCode代码,并保证插入后门的程序依旧能够正常运行不被 ...
- Walrus 实用教程|Walrus + Gitlab,打通CI/CD 自动化交付!
Walrus file 是 Walrus 0.5 版本推出的新功能,用户可以通过一个非常简洁的 YAML 描述应用或基础设施资源的部署配置,然后通过 Walrus CLI 执行 walrus appl ...
- [Spring]Junit单元测试时取不到本地文件问题
Junit单元测试时取不到本地文件问题 问题 当使用Junit进行单元测试时,遇到了以下问题: 2022-10-24 16:13:19.902 [main] ERROR zonetop.gisboot ...
- JS leetcode 存在重复元素 II 题解分析,记一次震惊的负向优化
壹 ❀ 引 整理下今天做的算法题,题目难度不高,但在优化角度也是费了一些功夫.题目来自219. 存在重复元素 II,问题描述如下: 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i ...
- NC22596 Rinne Loves Data Structure
题目链接 题目 题目描述 Rinne 喜欢 OI.在 9102 年的 PION 中,她在初赛遇到了这样一道题目: 阅读下列代码,然后回答问题. 补充:建树过程中会更新lc和rc,这实质上是一个二叉查找 ...