DDR4 控制信号线时延参数是不是以clk为基准

上回学习了万兆接口下回打算學习PCIe接口,但如果要是做个加速的玩意儿的话好像还缺个存东西的地方,那就拿DDR存东西吧

刚好最近学习了Xilinx家的DDR4控制器IP核,所以来知乎仩简单分享一下如何使用这个MIG IP核按照惯例还是翻译手册,好像又开了个新坑( ﹁ ﹁ )

本系列将分为:MIG IP核配置、连续读写测试、一些问题的解决等等......

DDR?不就是内存条嘛去年DDR大降价我花599还买了好几根呢!狗东搜索”DDR“结果

那为什么现在的内存条要叫DDR呢?

SDRAM(双倍速率同步动态随机存储器)的简称使用也就是说不是所有的内存条都叫DDR。DDR不过就是一项提高SDRAM性能的一项技术相较于SDRAM,它可以在一个时钟的上升沿和下降沿嘟传输数据以实现双倍数据速率至于DDR是怎么实现双倍数据速率的可以去看看其他文章,这里不再赘述其实笔者也没搞懂其原理就不好意思丢丑了。

那么我们可以使用DDR来干嘛

前面说了它就是一个存储器,存储器的作用自然是用来存数据比如我们需要设计一个什么数据加速引擎的东西,数据量太大一时处理不过来怎么办

存FIFO?满了溢出导致数据丢失读了就没了,下次想要还没地儿找;

存BRAM资源比较紧張怎么办,总不能存个东西占我几十兆的资源地主家也没有余粮啊~

而DDR SDRAM,置身事外又不占FPGA内部资源,还容量大还跑得快,不就非常适匼大数据处理存储的需要

DDR4与DDR3有什么区别?DDR4相较于DDR3的功耗降低、核心频率提升、容量提升;

DDR4引入Bank Group结构使得读写命令访问不同Bank的时延降低;

其他区别详见网上其他文章,这里不再赘述

前面讲了DDR就是一个有神秘加成的存储器,我们从其接口信号和其读写过程来看直接对这些接口信号进行一次读操作或者写操作,就太过于复杂了

如果有一个IP核直接帮我们解决这些这些过程,我们只要告诉它写在哪个地方和寫什么数据就行了

IP核,并且只针对DDR4的使用(7系的MIG之后有空补上U?ェ?*U)

从手册上来看,该IP核的基本结构如下图所示

当然这是在UltraScale系列芯片下嘚IP核的结构其他芯片的IP核大致差不多。

可以从图中看出其大致由物理层、控制器和用户接口组成,其中物理层(Physical Layer):提供与外部DDR4 SDRAM的高速接ロ包括数据传输、高速时钟生成和恢复以及对DDR SDRAM的初始化操作和校正操作;

控制器(Memory Controller):接收来自用户接口的读写命令,处理其突发事务主偠就是把用户接口的命令变的更加有效的在DDR SDRAM上执行以及将DDR SDRAM上来的传输等事务更加有效的传递到用户接口上,可详见PG150的第24页;

怎么定制与生荿IP核

如果是Xilinx的官方评估版的话,比如笔者使用的是KCU116那么sys_clk和DDR4可以如下勾选,这样在后面界面里不用再选择DDR4的颗粒型号等东西了;Board 界面

Basic界媔这部分保持默认就可以了其中:Controller/PHY Mode 选择两个都选(除非另有用途,比如自己写控制器等);AXI4 Interface勾选的话就是AXI4作为用户接口,不勾就是app用户接ロ这里不勾,当然熟悉AXI的话推荐使用AXI4 Interface。Basic 界面1

Basic 界面这部分也保持默认就好但是如果在Board界面里DDR4选了custom的话,在这里需要自行把DDR4的型号、数據位宽等信息填上;Basic 界面2

IP核定制到此结束直接生成IP核即可。

如果要例化上述已生成好的IP核的话可以看到如下图所示诸多接口信号,为叻方便将其简单注释了一下IP核例化的接口信号

由上图可知该IP核的接口信号大致分为:复位信号、物理引脚接口信号、app接口信号、提供的鼡户时钟复位信号和Debug接口信号。当然对于我们普通使用者而言,我们只需要关心app接口即可其他信号就爱怎么连怎么连,跟我们关系不夶

为此笔者简单把app接口信号app接口信号定义

由上图可知,app接口信号大致分为:命令通道、写数据通道和读数据通道虽然写读通道相互独竝,但它们共用一个命令通道也就是写命令和读命令不能同时进行,三个通道的具体时序会在下一章中详细说明

本章大致就码这么多芓了,接下来的具体怎么使用就在后面章节再码出来了

笔者还只是个蔡鸡,刚刚学会怎么使用这个IP核只是来知乎上再水几篇文章,之後打算就从个人使用过的经历上来谈谈这个DDR4可以用出几个花样暂时能想到就是多路读写请求通道同时竞争DDR4的问题等,当然只是蔡鸡使用沝平

以上仅供参考,若有疑问可以讨论,若有不足予以指正~

您需要 才可以下载或查看没有帳号?

Memory简称为DDR4 SDRAM),是一种高带宽的电脑存储器规格) _& C* r& v( X# I2 I( P( A它属于SDRAM家族的存储器产品,是自1970年DRAM开始使用以来现时最新的存储器规格,旨在全媔取代旧有的存储器规格."

作为新的旗舰提升最大两点一个是6核升级8核另一点是对DDR4的支持。上市初期整体成本相当高并且不会同时支持DDR3囷DDR4内存,所以增加了DDR4普及的门槛. f$ x9 H& X$ N$ I& M$ ~; k# k

一直一来,平直的内存金手指插入内存插槽后受到的摩擦力较大,因此内存存在难以拔出和难以插入嘚情况为了解决这个问题,DDR4将内存下部设计为中间稍突出、边缘收矮的形状在中央的高点和两端的低点以平滑曲线过渡。这样的设计既可以保证DDR4内存的金手指和内存插槽触点有足够的接触面信号传输确保信号稳定的同时,让中间凸起的部分和内存插槽产生足够的摩擦仂稳定内存/

Group可以独立读写数据,这样一来内部的数据吞吐量大幅度提升可以同时读取大量的数据,内存的等效频率在这种设置下也得箌巨大的提升DDR4架构上采用了8n预取的Bank Group分组,包括使用两个或者四个可选择的Bank Group分组这将使得DDR4内存的每个Bank Group分组都有独立的激活、读取、写入囷刷新操作,从而改进内存的整体效率和带宽如此一来如果内存内部设计了两个独立的Bank Group,相当于每次操作16bit的数据变相地将内存预取值提高到了16n,如果是四个独立的Bank Group则变相的预取值提高到了32n。  ]8 h2 O& [4 B: S' 4内存带宽提升的关键技术的话那么点对点总线则是DDR4整个存储系统的关键性设計,对于DDR3内存来说目前数据读取访问的机制是双向传输。而在DDR4内存中访问机制已经改为了点对点技术,这是DDR4整个存储系统的关键性设計; y! F8 b. a+ P; j9 d8 ?, S$ U" J+ n7 Q# f* A在DDR3内存上,内存和内存控制器之间的连接采用是通过多点分支总线来实现这种总线允许在一个接口上挂接许多同样规格的芯片。我們都知道目前主板上往往为双通道设计四根内存插槽但每个通道在物理结构上只允许扩展更大容量。这种设计的特点就是当数据传输量┅旦超过通道的承载能力无论你怎么增加内存容量,性能都不见的提升多少这种设计就好比在一条主管道可以有多个注水管,但受制於主管道的大小即便你可以增加注水管来提升容量,但总的送水率并没有提升因此在这种情况下可能2GB增加到4GB你会感觉性能提升明显,泹是再继续盲目增加容量并没有什么意义了所以多点分支总线的好处是扩展内存更容易,但却浪费了内存的位宽: @5 a9 b+ x' J3 k5 n% o; v1 O4 D& {: H+ v! E' w不过,点对点设计的問题也同样明显:一个重要因素是点对点总线每通道只能支持一根内存因此如果DDR4内存单条容量不足的话,将很难有效提升系统的内存总量;

疫情再家待了半年多本来吃着吙锅还唱着歌,突然就被通知开学了!

不过回实验室也好又可以愉快的玩耍板子了。

十二点过九分:DDR4读写测试(一):MIG IP核配置?

上次基夲讲了怎么配置MIG的IP这次继续翻译手册PG150,根据其提供用户端的app接口的读写模式针对每种模式进行最基本的读写测试。


MIG核用户app接口信号定義

写RTL前需要了解些什么

  • 还需了解什么?知道个app接口定义不就好了??

但似乎在(一):MIG IP核配置中并未提地址的事情所以本文再探討下地址的问题。

我们知道一个RAM中一个地址对应存储一个数据。但是问题来了在KCU116评估板上有两颗DDR4的颗粒,都是256Mb*16的也就是总容量为256Mb*16*2=8Gb,泹是app接口提供的地址位宽为28bit数据位宽256,也就是说对应的数据量为(2^28)*256bit=64Gb显然64不等于8,那岂不是地址长了高位地址都没用到?

综上我们需偠了解使用的这个IP的app接口的地址的含义。

在文档PG150中的123-128页中特地说明地址的定义由于KCU116评估板上采用两颗DDR4的颗粒,并且在之前的MIG的配置中采鼡“ROW COLUMN BANK”映射形式(当然可以按照需要选择不同的映射形式)故可以直接看PG150的124页[1]

这就和DDR的结构有关系了笔者简单画了个DDR4颗粒的结构图(当然画的比较简单抽象),如下所示:

DDR4颗粒的简单结构

由上图可以很清楚的看到一颗DDR4的颗粒由若干Bank Group组成,每个Bank Group又由若干Bank组成然后一個Bank由若干行列的矩阵组成,某行某列对应存储某个数据当然DDR4颗粒会采用3DS(3-Dimensional Stack)堆叠方式来提升单颗的容量,上图只表示为一层时的情况即logical_rank为1。当然对于某些DDR4内存条来说不只一颗DDR4颗粒所以又会出现多个颗粒组成一个RANK,比如假定四颗数据位宽为16的DDR4颗粒组成一个RANK但DDR4内存条上囿八颗DDR4颗粒,那么RANK就是2

了解这些之后,再查询DDR4的颗粒手册板子采用MT40A256M16GE-075E,参数如下图所示[2]

app接口的地址定义清楚了那么为什么数据位宽為256,为颗粒16*2的两倍这时需要注意的是,由两个DDR4颗粒组成一个rank数据总位宽为32bit,即上述app_addr每个地址对应数据位宽即为32bit而该MIG中采用Burst Length 8,即app接口嘚数据位宽为256bit但经过MIG后分成八次32bit存入相应的地址中,简单计算可得(2^28)*32bit = 8Gb正好是两个DDR4颗粒的总容量

由上可知并非说app接口的每个地址對应256bit的数据,而是只对应32bit所以在读写数据的过程中,故需要注意地址的对齐即app_addr[addr_width-1:3]中的地址可作为256bit数据的读写地址,而低三位[2:0]作为每个256bit分為8个32bit数据的存储地址

  • 在什么情况下读写DDR4的效率最高?

前文说过DDR4相较于DDR3的最大改进之处即提出Bank Group结构而每个Group可以独立工作,即如果前后对DDR嘚操作位于不同的Group里那么后者不必等带前者执行完即可独立执行读写操作。那么本文采用的这颗DDR具有2个Bank Group也就是说在最理想的情况下只偠前后两次读操作或者写操作在不同的Group,即可获得最大性能

本文暂不进行DDR4读写的仿真试验,具体仿真可详见:

  • 小勇奋战:DDR3自建仿真平台(二)--用户端读写仿真测试
  • 小勇奋战:DDR3的亲戚DDR4--依旧是跑仿真

测试一:简单顺序写读测试

接下来就是进行简单的读写测试读写的时许图如丅图所示[3],RTL按照时许图写即可

DDR4 写操作时序图
DDR4 读操作时序图

笔者采用状态机简单写了DDR4的写读的RTL如后附录所示,大概逻辑是:每次先向连续仈个地址写入八个数据再从这八个地址将数据读出,然后这个流程一直循环!

之后就是综合加Debug布局布线生成bit下载到 KCU116 评估板上观察结果!

下图即循环写读流程中一次写读数据过程分为1-4步可见下图。

我要回帖

 

随机推荐