本文主要详解DDR的原理图和PCB设计规则,基本以DDR3为例。
** SSTL: **
专用于DDR SDRAM存储接口上,与LVTTL驱动器基本一致。
** HSUL:**
** **用于点到点的无端接拓扑,不需要外部串行或者并行匹配电阻,降低了端接功耗。常在LPDDR2/3中使用。
** POD:**
** **伪漏极开路电平,其内部端接上拉到VDDQ,而SSTL。 POD由于上拉电压高,功耗稍大于SSTL。
** DBI:**
数据总线翻转,主要降低DDR4功耗,只有x8和x16的支持dbi。目的在于平衡DQ信号中的0和1的数量。
**** ODT:****
** 从DDR2开始新增的功能** ,ODT功能通过允许DRAM控制器打开/关闭任何或所有DRAM设备的终端电阻来改善存储器通道的信号完整性。只有DQ/DQS、DQM信号有ODT,无需外部端接匹配,其它信号均没有。
DDR原理图的设计目前比较成熟,由于其信号引脚固定,且有统一的规范(JESD79系列),而且像Micron、Samsung、SK Hynix、Toshiba等厂家都有各自的technical note。因此本SCH只罗列一些特殊的注意事项。
JESD79系列标准规范地址:JESD79-3A_DDR3规范 - 道客巴巴
根据JEDEC标准,不同容量的内存芯片一般引脚兼容,为了实现电路板的可扩展性,可以做如下处理,如128Mb与256Mb的兼容应用。
** **对于x16的DDR器件来说,未用的引脚要作一定的处理。例如x16的DDR来说,DQ[15:8]未用,则处理如下,将相关的UDM/DQMH拉高用来屏蔽DQ线,DQ[15:8]通过1~10k的电阻接地用来阻止迸发写时的噪声。
LDM**/UDM**:写数据输入屏蔽引脚
端接技术知识来源于《信号完整性》,具体见该书详情。 其中DDR常用的端接技术有两种,分别如下:
1.3.1、串行端接,主要应用在负载DDR颗粒不大于4个的情况下。
对于双向I/O信号来说,例如DQ,串行端接电阻Rs放置在走线的中间,用来抑制振铃,过冲和下冲。
对于单向的信号来说,例如地址线,控制线,串行端接电阻放置在走线中间或者是信号的发送端,推荐放置在信号的发送端。
说明: DDR 的 CK 与 CK# 是差分信号,要用差分端接技术。
** 1.3.2、 并行端接(上拉)**,主要应用在负载SDRAM器件大于4个情况下,走线长度>;2inch,或者通过仿真验证需要并行端接的情况下。
并行端接电阻Rt取值大约为2Rs,Rs的取值范围是1033ohm,故Rt的取值范围为2266ohm。一般并行端接为串行端接电阻的两倍。并行端接电压为VTT。串行端接电阻记作Rs,并行端接电阻记作Rt。
对于没有ODT功能的DDR1,且一驱多时,要在PCB上放置连到VTT的端接电阻,所有的数据线,地址,命令,控制线都需要使用单端并联端接。
** SSTL-15驱动器和单端并联端接(single-ended Parallel Termination)如图:**
VIN
和基准电压VREF
**进行比较。
图、 串行端接与并行端接
为了简化DDR SDRAM的硬件设计,已经将能集成进芯片的都集成进去了;如下图所示:ODT(数据总线终端匹配电阻设置)和ODI(输出驱动阻抗设置)。
1.3.3、戴维南端接代替并行端接VTT
在一些设计中,在使用DDR颗粒的情况下,已经基本全部不使用VTT电源,全部采用电阻上下拉的戴维南电路(用上下拉电阻替代VTT电源),只有在使用内存条的情况下才使用VTT电源。需要进行信号完整性仿真之后,确定上下拉电阻的阻值。这个阻值一般比较小,虽然降低了设计复杂度,但是增大了整个系统的功耗。
总结:
端接的方式有很多,但是都是为了解决信号的反射问题,通常为了消除信号的反射可以在信号的源端或者终端进行解决,在源端处消除反射是采用电阻串联的方式,在终端处消除反射是采用电阻并联的方式。在DDR末端的端接电阻距离最后一片DDR的长度越短越好,越短其信号质量越佳。在实际应用当中我们也是按照通用规范DDR末端的匹配电阻长度最好控制在500mil以内。
所有DDR的差分时钟线CK与CK#必须在同一层布线,误差+-20mil,最好在内层布线以抑制EMI。如果系统有多个DDR器件的话,要用阻值100~200ohm的电阻进行差分端接。
若时钟线的分叉点到DDR器件的走线长度<;1000mil,要使用100~120ohm的差分端接(只用一个端接电阻),如下图:
若时钟线的分叉点到DDR器件的走线长度>;1000mil,要两个使用200240ohm的电阻差分端接,因为两个200240ohm的电阻并联值正好为100~120ohm。如下图所示。
针对一拖多的情况,在时钟线差分对之间经常会并联一个pF级的差分电容,容值根据阻抗匹配的观点,需匹配差分阻抗Z0,故,即800MHz时钟、100Ω差分阻抗时,C约为2pF。该电容一般放在发送端,为了滤除差模干扰、消除反射。
主电源、参考电源、匹配电压。
主电源的要求是VDDQ=VDD,一般的使用中都是把VDDQ和VDD合成一个电源使用。
VDDQ是给存储芯片输出缓冲器供电的电源,
VDD是给主板主存储器供电的电源。
电源设计时,需要考虑电压,电流是否满足要求,电源的上电顺序和电源的上电时间,单调性等。电源电压的要求一般在±5%以内。电流需要根据使用的不同芯片,及芯片个数等进行计算。
提供VTT、VREF、VDDQ和VDD输出产品,DDR终端电源稳压器供应商包括:
在DDR3中,VREF分成两部分:
1、为命令与地址信号服务的VREFCA;
2、为数据总线服务的VREFDQ。
Vref 为参考电压,要求精准恒定,用于判断信号高低电平的依据。所有的DDR信号其实都是差分信号,其都是相对于Vref的,所以也都是差分信号。
参考电源VREF要求跟随VDDQ,并且VREF=VDDQ/2,所以对于较重的负载(>;4片DDR器件),可以使用电源芯片提供。在负载较轻(<;4片DDR器件)时,也可以采用电阻分压的方式得到。
由于VREF一般电流较小,在几个mA几十mA的数量级,所以用电阻分压的方式,即节约成本,又能在布局上比较灵活,放置的离VREF管脚比较近,可以紧密的跟随VDDQ电压,需注意分压用的电阻在10010K均可,需使用1%精度的电阻。** **
对于较轻的负载(<;4片DDR器件),可使用下图的方法:
具体如下图所示:
对于较重的负载(>;4片DDR器件),可使用IC来产生VREF。IC内部集成了两种电压VTT和VREF,其中VTT在重负载的情况下最高电流可达3.5A,平均电流为0A,VREF的电流比较小,一般只有3mA左右。
** 用于改善信号质量而匹配**的电压VTT(Tracking Termination Voltage),用于上下拉电阻的电源,电流大,波动大,噪声也大。并且VTT要求电源即可以提供电流,又可以灌电流(吸电流)。
VTT开始上电必须在VDDQ之后(具体实现方式可以采用VDDQ来控制VTT电源芯片的使能),避免器件latch-up,推荐VTT和VREF同时上电。
一般带ODT的DDR,地址/控制/命令信号线用Rt端接到VTT,VTT为匹配电阻上拉到的电源,VTT=VDDQ/2。VTT并不端接时钟信号线,时钟信号线使用差分端接技术。
当数据线地址线负载较重时,VTT的暂态电流峰值可达到3.5A左右,这种暂态电流的平均值为0A。一些情况下不需要VTT技术(并行端接),使用T拓扑 ,从而节省匹配电阻和VTT电源:
VTT的暂态电流峰值可达到3.5A左右,这种暂态电流的平均值为0A( 一般DDR3 VTT电流做到2A基本可以涵盖绝大多数需求),所以VTT的产生一般需要使用单独的IC产生,一般情况下可以使用专门为DDR设计的产生VTT的电源芯片来满足要求(用了简单的线性稳压器可能未出问题,但还是不建议!)。
图 、需要使用VTT的一般DDR负载结构
此外,连接到VTT的每条数据线都有较低的阻抗,因而电源就必须非常稳定,在这个电源中的任何噪声都会直接进入数据线,所以VTT的质量需要尽量减少噪声。
VTT电压的产生一般用IC。选用IC实现VTT,推荐使用下面的原则:
具体见下图:
有的芯片还有VDDL,是给DLL供电的,也和VDD使用同一电源即可。
同组(Lane)数据线可以交换。原因是内存的数据线只是存放数据,而CPU是根据CPU的数据线来存取,与内存的数据线顺序无关,相当于把数据存到一组容器,数据按什么顺序放就按什么顺序取。有时为了布线方便而调整组内的顺序。
** 地址线不能交换**。原因是模式寄存器的值是通过地址总线发出的(通过A4~A6配置模式寄存器)。
又根据DDR、DDR1、DDR2、DDR3、DDR4的特性以及对应的Driver的特点、板层的规划,有以下结论:
首先要确定DDR的拓扑结构,DDR1/2采用星形(T型)结构,DDR3采用菊花链结构(Fly by)。Fly-by拓扑是针对DDR3的时钟、地址控制和命令信号而言,该拓扑可以有效的减少stub的数量和他们的长度,以提高信号完整性,数据信号就不存在fly-by拓扑的说法,属于点对点方式,同且只有数据线都是一驱一的拓扑结构。
图、DDR颗粒拓扑示意图
图、DDR内存条拓扑示意图
** 注意:**
不是所有的DDR3都可以用菊花链结构,因为采用菊花链结构(Fly by)传输信号时,负载之间有延时,信号不能同时到达负载端,导致时钟和Strobe信号在每个芯片上的飞行时间偏移,这使得主控芯片/(FPGA或者CPU)很难保持tDQSS、tDSS 和tDSH这些参数满足时序规格。
故DDR3/DDR4器件加入Write leveling一项功能,控制器端反复的调整DQS-DQS#的延时,以补偿这种偏差并满足 tDQSS 规范。
所以如果主控芯片不支持读写平衡(Read and Write Leveling)功能,则不能使用Fly by拓扑结构(因为Fly by结构的DQS和CK不等长!没有write leveling就没法调整DQS和CK之间的偏斜),就必须T型走线(DDR1/DDR2)。否则DDR3系统运行不到额定频率,容易死机,但是降频又能正常工作。
DDR2是采用T形(星型)拓扑结构,采用T形拓扑是因为时序要求信号要同时到达。那DDR3采用的Fly by结构,其实就是stub较短的菊花链,之所以采用此种结构是因为DDR3多了读写平衡的新技能,即使你们不同时到达,也能把它调过来。所以采用何种拓扑结构首先要看时序要求。
结论:
(1)当信号速率比较高时,使用T型拓扑结构信号明显比使用FLY-BY拓扑结构的信号质量差。
(2)当颗粒较多时,不论是采用T型拓扑结构还是FLY-BY的拓扑结构,容性负载补偿对信号有明显的改善。
** 数据组拓扑:**
**时钟组拓扑: **
**命令/地址组拓扑: **
** 控制组拓扑:**
确定DDR拓补结构,可以元器件布局,以下原则需要遵守:
以下是DDR2的元器件摆放示意图(未包括去耦电容)
不带VTT串行端接电阻的布局图如下:
地址线可以走到两颗芯片中间然后向两边分,很容易实现星形拓补,同时,数据线会很短。
带VTT并行端接电阻的布局图如下:
没有数据线(DQ) 、地址线(AD)等 串联匹配电阻,VTT端接电阻摆放在了地址线可以到达的最远距离。如果有数据线、地址线等匹配电阻则必须靠近DDR放置。
以下是DDR3的元器件布局图,这里使用的CPU支持双通道DDR3,所以看到有四片(参考设计是8片)DDR3,其实是每两个组成一个通道,地址线沿着图中绿色的走线传递,实现了菊花链拓扑。
1.地址线上的VTT端接电阻摆放在了地址线可以到达的最远的地方。
2.数据线上的端接电阻也放置在了靠近DDR3芯片的位置,数据线到达CPU的距离很短。
3.去耦电容放置在了很靠近DDR3相应电源引脚的地方。
DDR****信号布线顺序:电源(包括VTT岛链及端接电阻,VREF),数据,地址/命令,控制,时钟,反馈。
DDR****信号布线方式:地址线、时钟线拓扑是否按照fly-by拓扑走。
**DDR颗粒布局: **以数据线尽量短为原则摆放。
由于DDR的电流一般都比较大,PCB设计时,如果有一个完整的电源平面铺到管脚上,是最理想的状态,并且在电源入口加大电容储能,每个管脚上加一个100nF~10nF的小电容滤波。
在layout时可以注意以下事项:
•VTT的电流要求比较大,需要使用铜皮铺过去,表面走线宽度至少150mil,推荐250mil;
•整个VTT电路上需要有uF级大电容进行储能,每个拉到VTT的电阻旁一般放一个10Nf~100nF的电容。
•VTT走线平面需要至少2个4.7uF的去耦电容,2个100uF的电容,具体放置位置是VTT的两个端点(at each end);
•VTT与VREF走线平面在同一层,必须具有150mil的距离,推荐它们在不同层。
•如果走线要分支的话,建议使用T型分支。
在layout时可以注意以下事项:
•VREF的每个管脚上需加10nF电容滤波,且每个分压电阻上也并联一个电容较好;
•VREF走线尽量短粗,且应大于20mil,远离干扰源;
•在器件VREF引脚处放置一个0.1uF的旁路电容;
•在VREF和VDDQ之间放置一个0.1uF的电容(上电时电压的跟随特性更好);
•在VREF和VSSQ之间放置一个0.1uF的电容;
•VREFCA、VREFDQ的滤波电容及分压电阻要分别靠近芯片的电源引脚。
DDR的供电走线,建议8mil以上,在Allegro可以针对一类线进行物理参数的统一设定,可以建立PWR-10MIL的约束条件,并为所有电源网络分配这一约束条件。
间距的控制要考虑阻抗要求和走线的密度。通常采用的间距原则是2W或者3W。如果有足够的空间来走线,可以将数据线按3W的间距来走,可以减小很多串扰。如果实在不行至少要保证2W的间距。
除此之外,数据线与其它信号线的间距至少要有3W的间距,如果能更大则更好。时钟与其它的信号线的间距至少也要保持3W,并尽可能的大。绕线的间距也可以采用2W和3W原则,应优先用3W原则。相邻两层尽量参考GND。对于线间距,也可以在Allegro中建立一种约束条件,为所有DDR走线(XNET)分配这样的约束条件。
还有一种可能需要的规则,就是区域规则。Allegro中默认的线宽线距都是5mil,在CPU引脚比较密集的时候,这样的规则是无法满足的,这就需要在CPU或DDR芯片周围设定允许小间距、小线宽的区域规则。
线长匹配的基本原则是:
1、数据线用DQS来锁存,故数据线与DQS做等长。
2、地址、控制线用CLK来锁存,故地址,控制/命令信号与CLK做等长。
注意:
对于数据线,DDR1/2与DDR3的规则是一致的:
** **每个BYTE与各自的DQS,DQM等长,即DQ[0:7]与DQS0,DQS0N,DQM0等长,DQ[8:15]与DQS1,DQS1N,DQM1等长,以此类推。
对于地址线,DDR1/2与DDR3的规则是不一样的:
对于DDR1/2,需要设定每条地址到达同一片DDR的距离保持等长。对于DDR3,地址线的等长往往需要过孔来配合,具体的规则均绑定在过孔上和VTT端接电阻上。可以看到,CPU的地址线到达过孔的距离等长,过孔到达VTT端接电阻的距离也等长。
以上为针对DDR3一般性走线要求,可作为一般性参考。如使用DDR芯片有其自有要求则以芯片手册为准。
其他类型DDR走线等长,布局布线等要求可针对DDR3颗粒进行相对的调整,如果是DDR2等其他上代版本颗粒可相对DDR3的要求进行放宽,相对的DDR4等更先进颗粒可针对DDR3布局布线要求进行更加严格的把控,且每个颗粒厂商的要求不一致,在针对DDR颗粒进行布局布线时应严格按照芯片手册要求进行设计。
下图是DDR3与DDR4颗粒的走线的一个比较,各位设计人员可根据实际设计需求进行修改。
走线注意事项如下:
** 绕等长**
完成等长规则的设定后,最后一步也是工作量最大的一步:绕等长。只有一点规则需要注意:尽量采用3倍线宽,圆弧绕等长。
绕等长完成后,最好把DDR相关网络锁定,以免误动。
DDR4有一种特殊的布线方式:Tabbed Routing,Tabbed routing由intel公司2015年3月份提出,主要用在下一代处理器SKYLAKE平台,DDR4的走线方式。
TabbedRouting主要的方法是在空间比较紧张的区域(一般为BGA区域和DIMM插槽区域),减小线宽,而增加凸起的小块(Tab),这种方法可以增加两根线之间的互容特性而保持其电感特性几乎不变,而增加的电容可以有效控制每一层的的阻抗,减小外层的远端串扰。
该方法对阻抗和远端串扰可以很好的平衡,对于Tab的尺寸,需要根据实际PCB做详细的仿真设计,Intel也提供了一些Tool可以参考。Tabbedlines have been proposed to reduce or eliminate FEXT(Far-end Crosstalk).
两根红线之间的走线采用锯齿形状,名称为“Tabbed Routing”
无论是PCB上使用芯片还是采用DIMM条,DDRx(包括DDR3,DDR4等)相对于传统的同步SDRAM的读写,主要困难有三点:
第一,时序。由于DDR采用双沿触发,和一般的时钟单沿触发的同步电路,在时序计算上有很大不同。DDR之所以双沿触发,其实是在芯片内部做了时钟的倍频,对外看起来,数据地址速率和时钟一样。为了保证能够被判决一组信号较小的相差skew,DDR对数据DQ信号使用分组同步触发DQS信号,所以DDR上要求时序同步的是DQ和DQS之间,而不是一般数据和时钟之间。而DDR由于电平低,只取一个中间电平Vref做测试电平,在计算setup time和hold time时,还要考量信号变化沿速率slew rate,在计算setup time和hold time时要加上额外的slew rate的补偿。这个补偿值,在DDR专门的规范或者芯片资料中都有介绍。
第二,匹配。DDR采用SSTL电平,这个特殊buffer要求外接电路提供上拉,值为30~50ohm,电平VTT为高电平一半。这个上拉会提供buffer工作的直流电流,所以电流很大。此外,为了抑制反射,还需要传输线阻抗匹配,串连电阻匹配。这样的结果就是,在DDR的数据信号上,两端各有10~22ohm的串连电阻,靠近DDR端一个上拉;地址信号上,发射端一个串连电阻,靠近DDR端一个上拉。
第三,电源完整性。DDR由于电平摆幅小(如SSTL2为2.5V,SSTL1为1.8V),对参考电压稳定度要求很高,特别是Vref和VTT,提供DDR时钟的芯片内部也常常使用模拟锁相环,对参考电源要求很高;由于VTT提供大电流,要求电源阻抗足够低,电源引线电感足够小;此外,DDR同步工作的信号多,速度快,同步开关噪声比较严重,合理的电源分配和良好的去耦电路十分必要。
1、信号分组
**2、走线拓扑 **
所有信号组,除了数据组外,全部用Fly by结构
** 3、端接匹配**
端接电阻摆放在末端。时钟comp电容摆放在源端。
4、等长原则
1、数据线用DQS来锁存,故数据线与DQS做等长。
2、地址、控制线用CLK来锁存,故地址,控制/命令信号与CLK做等长。
注意:
①.DQSP和DQSN要在同一层进行布线,DQSP/DQSN和它同一组的数据信号要在同一层进行布线
②.差分时钟信号线要在在同一层进行布线
5、参考平面
1、DQ,DQS和时钟信号线选择VSS/GND作为参考平面,因为VSS 比较稳定,不易受到干扰;
2、地址/命令/控制线在条件允许情况下,选择VDD/VDDQ作为参考平面,因为这些信号线本身就含有噪声。实际设计时参考datasheet。
** 6、其他布线注意事项**
DDR设计指导具体详见:https://download.csdn.net/download/weixin_45365488/88784180
通信工程专业毕业,7年开发经验
精通c/c++
精通golang
熟悉常见的脚本,js,lua,python,php
熟悉电路基础,嵌入式,单片机
服务端开发
嵌入式开发
>gin接口代码CURD生成工具
sql ddl to struct and markdown,将sql表自动化生成代码内对应的结构体和markdown表格格式,节省宝贵的时间。
qt .ui文件转css文件
duilib xml 自动生成绑定控件代码
协议调试器
基于lua虚拟机的的协议调试器软件 支持的协议有:
串口
tcp客户端/服务端
udp 组播/udp节点
tcp websocket 客户端/服务端
软件界面
使用例子: 通过脚本来获得接收到的数据并写入文件和展示在界面上
下载地址和源码
webrtc easy demo
webrtc c++ native 库 demo 实现功能:
基于QT
webrtc摄像头/桌面捕获功能
opengl渲染/多播放窗格管理
janus meeting room
下载地址和源码
wifi,蓝牙 - 无线开关
实现功能:
通过wifi/蓝牙实现远程开关电器或者其他电子设备
电路原理图:
实物图:
深度学习验证工具
虚拟示波器
硬件实物图:
实现原理
基本性能
采集频率: 取决于外部adc模块和ebaz4205矿板的以太网接口速率,最高可以达到100M/8 约为12.5MPS
上位机实现功能: 采集,显示波形,存储wave文件。
参数可运行时配置
上位机:
显示缓冲区大小可调
刷新率可调节
触发显示刷新可调节
又一个modbus调试工具
最近混迹物联网企业,发现目前缺少一个简易可用的modbus调试工具,本软件旨在为开发者提供一个简单modbus测试工具。
主打一个代码简单易修改。
特点:
1. 基于QT5
2. 基于libmodbus
3. 三方库完全跨平台,linux/windows。
开源plutosdr 板卡
1. 完全开源
2. 提高固件定制服务
3. 硬件售价450 手焊产量有线
测试数据
内部DDS回环测试
接收测试
外部发送500MHZ FM波形
matlab测试
2TRX版本
大部分plutosdr应用场景都是讲plutosdr板卡作为射频收发器来使用。
实际上plutosdr板卡本身运行linux 操作系统。是具有一定脱机运算的能力。
对于一些微型频谱检测,简单射频信号收发等应用完全可以将应用层直接实现在板卡上
相较于通过网卡或者USB口传输具有更稳定,带宽更高等优点。
本开源板卡由于了SD卡启动,较原版pluto支持了自定义启动应用的功能。
提供了应用层开发SDK(编译器,buildroot文件系统)。
通过usb连接电脑,经过RNDIS驱动可以近似为通过网卡连接
(支持固件的开发定制)。
二次开发例子
```
all:
arm-linux-gnueabihf-gcc -mfloat-abi=hard --sysroot=/root/v0.32_2trx/buildroot/output/staging -std=gnu99 -g -o pluto_stream ad9361-iiostream.c -lpthread -liio -lm -Wall -Wextra -lrt
clean:
rm pluto_stream
版面分析即分析出图片内的具体文件元素,如文档标题,文档内容,文档页码等,本工具基于cnstd模型