ddr

宏旺半导体一文解答DDR内存时序高好还是低好

三世轮回 提交于 2020-04-03 15:07:13
由于内存条种类繁多,参数多样,很多小白DIY电脑的,会发现购买内存条是件头疼的事。大家对内存容量以及内存频率关注较多,而对内存时序却关注的很少,其实内存时序也是内存的参数之一,内存时序究竟有多重要呢? 内存时序是描述同步动态随机存取存储器(SDRAM)性能的四个参数:CL、TRCD、TRP和TRAS,单位为时钟周期。它们通常被写为四个用破折号分隔开的数字,如16-18-18-36。宏旺半导体了解到,第四个参数经常被省略,而有时还会加入第五个参数:Command rate(命令速率),通常为2T或1T,也写作2N、1N。 CL对内存性能的影响是最明显的,所以很多产品都会把内存CL值标在产品名上,而后面的三个数字都是最小周期数。CL的英文全称是CAS Latency,意思就是CAS的延迟时间,从中文意思中可以看出来这个数字越小延迟也就越小,一般DDR4的CL值在14-16就是一个不错的数值了,不少低延迟高超频能力的内存条还会将CL值压缩到11,这样的内存条延迟会更低,从而获得同频率下更好的性能。 内存时序参数影响随机存储存储器速度的延迟时间,较低的数字通常意味着更快的性能,所以在同代同频率的情况下,内存时序越小越好,一般情况下大家只需要看内存时序中的第一个数字,也就是CL值,数字越小越好。 宏旺半导体举个例子,内存的时序就是我们这个仓库的物流人员找到货物,并把货物装上车的时间,一般来说

hdparm&dd--测试sd/emmc/ddr速率

删除回忆录丶 提交于 2020-03-11 12:49:49
hdparm可以用来进行emmc的读写速率测试,其实dd也可以 ubuntu下安装 zw@zw-pc:apt-get install hdparm test emmc --hdparm测试读性能,dd测试写性能 ddr --dd测试读写性能 来源: CSDN 作者: tccxy_ 链接: https://blog.csdn.net/juewukun4112/article/details/104790488

基于NAND闪存的SSD解决方案的STT-MRAM

那年仲夏 提交于 2020-02-25 16:04:42
作为克服现有基于NAND闪存的SSD的解决方案, everspin 提供具有ST-DDR3和ST-DDR4接口的STT-MRAM,可通过提供高速非易失性存储来提高SSD的系统性能和可靠性。机上数据。通过添加STT-MRAM来补充或替换SSD控制器的DDR总线上的易失性DRAM(图1),SSD控制器现在可以将该高速非易失性存储器用于写缓冲区和之前运行的任何其他关键数据易挥发的。 图1具有电源故障保护功能的混合DDR / STT-MRAM SSD架构 对于企业级固态硬盘,电源管理系统的设计很重要。系统必须检测电源故障,将驱动器与主机隔离,并用足够的能量存储来支撑驱动器,以允许将任何运行中的数据提交到非易失性存储器中,以确保数据完整性。完成此操作所需的保持能量与飞行中的数据量,非易失性存储器的速度和系统的功耗成正比。可以将这种保持能量存储提供的时间量视为电源故障窗口或在耗尽保持能量之前可用于存储不受保护的数据的时间。 为了支持由不同等级的不同内存类型组成的异构DDR架构,理想情况下,SSD控制器中包含的DDR控制器需要支持处理 STT-MRAM 的不同时序和寻址要求,以实现最佳性能。 SSD控制器还必须采用其他逻辑来正确管理DDR控制器缓冲区中正在传输的少量常驻数据,以确保在断电之前将管线刷新到STT-MRAM并关闭STT-MRAM中的所有打开页面。 来源: 51CTO 作者:

uboot启动原理

半腔热情 提交于 2020-02-24 09:04:26
  1.裸机运行程序时一般情况下程序代码小于16KB将其下载地址设置到BL1的起始地址。BL0会自动加载并执行BL1。 当程序大于16kB时无法直接运行。   例如UBOOT就大于16KB,执行的原理为。将程序分为BL1、BL2两部分。 其中BL1初始化DDR并且指定BL2的起始地址。BL2为真正需要的程序。 BL1部分 start.S #define WTCON 0xE2700000 #define SVC_STACK 0xd0037d80 .global _start // 把_start链接属性改为外部,这样其他文件就可以看见_start了 _start: // 第1步:关看门狗(向WTCON的bit5写入0即可) ldr r0, =WTCON ldr r1, =0x0 str r1, [r0] // 第2步:设置SVC栈 ldr sp, =SVC_STACK // 第3步:开/关icache mrc p15,0,r0,c1,c0,0; // 读出cp15的c1到r0中 //bic r0, r0, #(1<<12) // bit12 置0 关icache orr r0, r0, #(1<<12) // bit12 置1 开icache mcr p15,0,r0,c1,c0,0; // 第4步:初始化ddr bl sdram_asm_init // 第5步:重定位

浅析Xilinx家DDR控制器MIG的使用

微笑、不失礼 提交于 2020-02-20 08:04:52
FPGA的片上存储资源bram简单好用,时序清晰,要不是总容量往往就几十Mb谁愿意用DDR呀······ 害,言归正传,因为设计需要存储1477x1800x3 双精度浮点复数这样的大号矩阵,所以只能放到DDR上去进行读写。之前在网上找了好多资料,但发现都没有一个很完整的教程教你怎么使用DDR控制器IP核MIG(Memory Interface Generator),所以写了这篇文章主要希望能帮初学者快速上手MIG的使用以实现DDR读写。 介绍MIG之前,我觉得有必要先对DDR做一个介绍,DDR SDRAM(Double Data Rate Synchronous Dynamic Random Access Memory,实际上还分为DDR SDRAM,DDR2 SDRAM,DDR3 SDRAM,DDR4 SDRAM,主要是数据预取prefetch和工作频率的不同,感兴趣的大家可以自己查),搭眼一看,这玩意本质上不就是数字集成电路里学的DRAM嘛(电容存储,会漏电,时不时需要刷新blablabla······),而double data rate说的是他在clock的上升沿和下降沿都会进行数据读写,设想如果用户逻辑侧的时钟频率和DDR的工作频率之比为1:4的话,用户侧的一个clk, 那么DDR实际上进行了4*2(上下沿)=8次读写操作。 DDR3的内部是如上图的存储阵列组成

搞嵌入式的,为啥要有uboot

旧街凉风 提交于 2020-02-17 19:59:42
为什么要有uboot 1.1、计算机系统的主要部件 (1)计算机系统就是以CPU为核心来运行的系统。典型的计算机系统有:PC机(台式机+笔记本)、嵌入式设备(手机、平板电脑、游戏机)、单片机(家用电器像电饭锅、空调) (2)计算机系统的组成部件非常多,不同的计算机系统组成部件也不同。但是所有的计算机系统运行时需要的主要核心部件都是3个东西: CPU + 外部存储器(Flash/硬盘) + 内部存储器(DDR SDRAM/SDRAM/SRAM) 1.2、PC机的启动过程 (1)部署:典型的PC机的BIOS程序部署在PC机主板上(随主板出厂时已经预制了),操作系统部署在硬盘上,内存在掉电时无作用,CPU在掉电时不工作。 (2)启动过程:PC上电后先执行BIOS程序(实际上PC的BIOS就是NorFlash),BIOS程序负责初始化DDR内存,负责初始化硬盘,然后从硬盘上将OS镜像读取到DDR中,然后跳转到DDR中去执行OS直到启动(OS启动后BIOS就无用了) 1.3、典型嵌入式linux系统启动过程 (1)典型嵌入式系统的部署:uboot程序部署在Flash(能作为启动设备的Flash)上、OS部署在FLash(嵌入式系统中用Flash代替了硬盘)上、内存在掉电时无作用,CPU在掉电时不工作。 (2)启动过程:嵌入式系统上电后先执行uboot、然后uboot负责初始化DDR

uboot源码分析1-启动第一阶段

穿精又带淫゛_ 提交于 2020-02-16 00:08:10
1、不简单的头文件包含 #include <config.h>:这个文件的内容其实是包含了一个头文件:#include <configs/x210_sd.h>". #include/version.h中包含了include/version_autogenerated.h,这个头文件就是配置过程中自动生成的。里面就一行内容:#define U_BOOT_VERSION "U-Boot 1.3.4" 2、启动代码的16字节头部 3、异常向量表的构建 4、用0xdeadbeef对齐填充 5、分配空间放TEXT_BASE c3e00000 6、分配空间放uboot在DDR中的物理地址 33e00000 7、设置CPU为SVC模式 8、设置 L2、 L1cache和 MMU 9、识别并暂存启动介质,因此执行完这一段代码后r3中存储了0x03,以后备用。 10、设置栈, 并调用 lowlevel_init ;目的:栈是在 SRAM中设置的,因为当前整个代码还在 SRAM中运行,此时 DDR还未被初始化还不能用 10.1lowlevel_init详解 (1)先将LR入栈 (2)检查复位状态,防止DDR再次初始化; 冷上电时 DDR是需要初始化才能用的;而热启动或者低功耗状态下的复位则不需要再次初始化 DDR。 (3) IO状态恢复 (4)关看门狗 (5) SRAM SROM相关 GPIO设置

DDR的前世今生

旧时模样 提交于 2020-02-08 06:21:55
RAM、SRAM、DRAM、SDRAM、DDR SDRAM的演变 ROM和RAM指的都是半导体存储器, ROM是Read Only Memory的缩写,即只读存储器 ,是一种只能读出事先所存数据的固态半导体存储器,其特性是一旦储存资料就无法再将其改变或删除,资料并不会因为电源关闭而消失。 RAM是Random Access Memory的缩写 ,即随机存储器 ,随机是指数据不是线性依次存储,可以以任何顺序访问,而不管前一次访问的是哪一个位置。ROM在系统停止供电的时候仍然可以保持数据,而RAM在掉电之后就会丢失数据。 RAM又分两大类,一种为 SRAM (Static RAM,静态RAM) ,是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据,也就是说加电情况下,不需要刷新,数据不会丢失。SRAM是早期读写最快的存储设备,但也有其缺点,即它的集成度较低,相同容量的内存需要很大的体积,功耗也大;同时它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓存,二级缓存。 另一种为 DRAM (Dynamic RAM,动态RAM), DRAM 只能将数据保持很短的时间,为了保持数据,DRAM使用电容存储,所以必须隔一段时间刷新一次,如果存储单元没有被刷新的话,存储的信息就会丢失;它的速度也比SRAM慢,不过它还是比任何的ROM都要快

SDRAM 类高速器件布线规则

南楼画角 提交于 2020-01-31 04:53:53
一个优秀的Layout,一块好的板子,并不是随便布线连同就可以实现电路要求的,凡事都得谨慎,此处别处摘要,讲述SDRAM类高速器件布线规则: 如果你没有信号完整性的知识和对传输线的认识,恐怕你很难看懂,如果你看不懂,那么请按这样一个通用的基本法则做: (1)DDR和主控芯片尽量靠近 (2)高速约束中设置所有信号、时钟线等长(最多允许50mils的冗余),所有信号、时钟线长度不超过1000mils (3)尽量0过孔,元件层下面一定要有一个接地良好的地层,所有走线不能跨过地的分割槽,即从元件层透视地层看不到与信号线交叉的地层分割线。 这样的话200M的DDR基本上是没有太大问题。其它的一些 3W 20H 法则就能做到尽量做到吧 时钟信号: 以地平面为参考,给整个时钟回路的走线提供一个完整的地平面,给回路电流提供一个 低阻抗 的路径。由于是差分时钟信号,在走线前应预先设计好线宽线距,计算好差分阻抗,再按照这种约束来进行布线。所有的DDR差分时钟信号都必须在关键平面上走线,尽量避免层到层的转换。线宽和差分间距需要参考DDR控制器的实施细则, 信号线的单线阻抗应控制在50~60 Ω,差分阻抗控制在100~120 Ω 。时钟信号到其他信号应保持在 20 mil*以上的距离 来防止对其他信号的干扰。 蛇形走线的间距不应小于20 mil 。 串联 终端电阻RS 值在15~33Ω

DDR接口参数

故事扮演 提交于 2020-01-24 14:11:49
上图为X8data的单颗DDR3架构图,行(Row)地址线复用14根,列(Column)地址线复用10根,Bank数量为8个,IO Buffer 通过8组数位线(DQ0-DQ7)来完成对外的通信,故此单颗DDR3芯片的容量为2的14次方乘2的10次方乘8乘8,结果为1Gbit,因为1B包含8bit,1GB/8=128MB。 如果我们要做成容量为1GB的内存条则需要8颗这样的DDR3内存芯片,每颗芯片含8根数位线(DQ0-DQ7)则总数宽为64bit,这样正好用了一个Rank。 假果还用128MB的DDR3芯片去做2GB内存条,结果就会有所不同。我们最好选用4根数位线(DQ0-DQ3),数量是16颗,这样也是用了一个Rank。 ECC DDR和普通DDR接口一样。 二、内存颗粒的理解 在内存颗粒的内部,数据是以bit(位)为单位写入一张大的矩阵中,通过指定Row(行),以及Column(列),就可以准确的定位到某一个Cell(单元),这就是物理上寻址的基本原理。至于这个Cell中存储多少个bit,即位宽,需要查看厂商的相关Spec,x8代表每个Cell存储8bit,x16代表每个Cell存储16bit。 而由于工艺上的限制,这个存储阵列不能做的很大,所以都是将内存容量分成几个阵列来制造,那么一个内存颗粒内部就有多个逻辑阵列,称之为BANK,那么这个颗粒的容量即