EDN China > 行业资讯 > EDA工具与服务 > 仿真与验证 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

什么样的DDR验证能在早期撷取设计缺陷?

Ankit Khandelwal、Neha Srivastava?? 2015年10月19日 ?? 收藏0
DDR验证是任何SoC设计过程中最关键也是最复杂的任务之一,因为它牵涉到位于待测物(DUT) 之内的控制器,和位于待测物之外的DDR内存。一个DDR系统由共同运作的控制器、I/O、封装、插座、电源、频率和外部内存组成;在数字验证中,并不能验证到所有这些组件,主要是控制器、PHY、I/O和内存。由于在数字仿真中无法仿真所有组件的效应,因此验证变得更加复杂,但闸级模拟(GLS) 提供了一个很好的基础架构,它能够报告主要从时序角度看可能影响控制器PHY-I/O路径的设计问题。

在闸级模拟中验证DDR时会遇到许多与时序有关的问题,从而导致验证与静态时序分析(STA)团队之间发生大量重复工作。拥有彻底除错完成的GLS环境可以 让人们对执行于缓存器传输级(RTL)之上的DDR协议进行静态时序分析充满信心,并专注于解决数字和时序方面的问题。本文整理了DDR GLS验证过程中由于RTL上的时序可见性而常常出现的各种问题,并透过一些案例强调了GLS环境中实现DDR快速、高效率收敛的重要除错标准。

以多级IO处理惯性延迟问题

RTL 环境没有任何时序意识,因此在设计中没有惯性/传递延迟,但当我们转进GLS设置时,就必须将之纳入考虑并有效率地处理,以便仿真实际的芯片行为,同时不 会使事情变得太过悲观。在逻辑单元输入端出现的、持续时间不超过惯性延迟的脉冲,不可能导致该逻辑单元输出端产生任何电平变换,逻辑闸显示的这种现象被称 为惯性延迟传递(inertial delaypropagation)。

工业标准 GLS工具通常将传递延迟作为该逻辑闸的惯性延迟;模拟工具采用的这种建模方法是对实际芯片行为相当不错的抽象过程,而且实际上它确实良好地仿真了通过单 级逻辑闸的讯号传递;但这种行为在IO这样复杂的闸极中并不是令人满意的,因为IO在本质上是多级(multi-stage)结构,一旦讯号通过第一级, 就能保证它成功地通过IO单元传递。因为仿真工具不理解逻辑单元的这种内部结构,因此即使是如图1所示的多级IO,最终也会抑制这种脉冲。

图 1 默认的 GLS行为是抑制小于闸延迟的所有转换。
图 1 默认的 GLS行为是抑制小于闸延迟的所有转换。

解决这个问题现在有两种可能的方案。第一个是手动更新标准延迟格式(SDF)档,并将延迟更新到一些较小的值。在讯号传递正常的情况这种方法非常管用,但当新的延迟不能代表实际延迟时这种方法并不合适,可能会抑制其它潜在的功能性问题。

工 业标准的GLS仿真器确实有这样的功能/开关,即允许/禁止特定宽度的脉冲通过单元。例如当使用「拒绝与误差(Reject & Error)设置」时,将传递宽度大于「误差设置」值的所有讯号。同时,这种仿真器在遇到宽度处于「拒绝与误差设置」之间的讯号时将传递未知值,而且它会 完全消除宽度小于‘拒绝设置’的讯号。下表1给出了一个例子。

表1 Pulse_e/Pulse_r行为。
表1 Pulse_e/Pulse_r行为。

根据时序小组的平衡结果进行频率选择

在RTL设置中,由特定来源驱动的频率将同时到达所有节点,但在使用GLS设置时,就要考虑频率偏移了,它可能造成时序问题,即源自相同源的两个频率路径可能产生偏移,以致DDR数据/频率路径并不是对所有可能组合逻辑来说都是平衡的。

在 DDR设计中输入频率是最重要的参数,因为所有其它讯号都与输入频率周期和占空比有关。也有这样的情况,即可以将多个频率源用作控制器的输入频率。一般来 说,来自任何一个频率源的路径只要是平衡的就可以推荐用作DDR输入频率,不过对于传递到外部DDR内存的DDR_CLK、DDR_DQS等讯号来说在 占空比、高电平时间、低电平时间等方面有很严格的要求,必须满足DDR正确工作所需的条件。

在写入侧与占空比要求相关的大多数故障可能是DDR控制器输入端频率的占空比不正确引起的。因此为了避免不必要的调试工作,必须确保我们使用了时序要求得到满足的正确频率源。

下面提到了同样一个例子,其中撷取到了内存输入端的DQS占空比数据,而且有两个不同的频率源被选为DDR控制器频率。

用于转储SDF的焊垫上负载

I/O 在具有时序意识的GLS DDR验证中扮演着非常重要的角色。当满足直到焊垫(pad)输入端的时序要求时,I/O延迟数据就会从用于焊垫的许可文件(liberty file)信息中转储(dump)。有时候从控制器到焊垫输入端的路径得到了正确的平衡,但仍能见到故障发生,这可能是因为位于主控制器与外部DDR记忆 体之间的路径中的I/O导入了不正确的延迟。

这些延迟实际上取决于施加到焊垫的负载, 因此在产生SDF时,需要注意电路板上必须应用了正确且实际的负载。若做不到这一点,可能在SDF中产生相当悲观的时序片段(timingarcs),并 当在GLS模拟中进行反向注记(back-annotated)时可能产生伪故障。这种问题很难除错,而且相当耗时耗力。

OBE时序要求

大 多数DDR控制器的设计是这样的,它们为了DQ(数据-Data)和DQS(选通-Strobe)焊垫本身而驱动OBE(Output bufferenable),因为相同的焊垫可以用于写/读。OBE时序在服务路径时一般会被忽略,但在DDR案例如此做将导致灾难性结果。举例来说,在 DDR协议读/写过程中,在READ/WRITE命令之后、DQS第一个升缘(risingedge)之前,DQS上的低电平(LOW)状态被认为是读 /写前置(preamble);同样的,最后一个数据入单元之后在DQS上的低电平状态被认为是读/写后置(post-amble)。

前置部分为接收组件提供了一个时序窗口,用于启动其数据撷取电路,同时在选通讯号(strobesignal)上呈现一个已知/有效的电平,从而避免错误触发撷取电路。在前置部分过后的数据串发生期间,选通讯号将以与频率讯号相同的频率触发。

在 写入操作过程中是有特定的时序要求的,对DDR2来说必须满足比如0.35Ck的最小前导宽度,DDR3是0.9Ck。同样,对写入后置时序也有要求。 DDR2是0.4Ck至0.6Ck,DDR3最小是0.3Ck。如果在DDR GLS时遇到这种最常见的问题,这些参数可能会发生违例。

图 2 DDR的前置和后置。
图 2 DDR的前置和后置。

DDR焊垫的回转率设定

焊 垫是以不同的回转率(slewrate)进行表征(characterization),回转率决定了单位时间内输出电压的变化率。这些设置在RTL模拟 中是没有任何作用的,因为RTL模拟不考虑延迟,但在GLS模拟却会将延迟纳入其中,因此为了避免不必要的除错工作,正确的设定非常重要。系统中针对不同 焊垫的时序要求一般是要满足最大回转率,但根据不同的参数有不同的要求。

一个这样的案 例是,像DDR等协议如果知道了最大回转率,就能发现反射和干扰问题。这个参数在不同的设置情况下焊垫延迟会有很大的变化,具体取决于最终在实际电路板和 测试仪器上使用的负载和电阻值。我们必须确保模拟是在设定了正确的焊垫参数之情况下进行,以便消除期望结果和观察结果之间的偏差。表2提供了针对某个 SoC的不同接口的推荐SRE设置值。

表2 提供了针对某个 SoC的不同接口的推荐 SRE设置值。
表2 提供了针对某个 SoC的不同接口的推荐 SRE设置值。

I/O中的表征问题

这 方面的问题同样只在GLS中可见,在RTL中是不会遇到这种问题的。如果从一开始就得到保证,就可以确保能够最大程度地减少验证和静态时序分析之间的反复 除错和回馈。就背景而言,每个单元都有一个与上升弧(risingarc)和下降弧(falling arc)有关的延迟。任何单元的延迟都直接取自于拥有跨PVT延迟信息的许可文件。

针对 单元的这些上升和下降时间各自不同。但DDR等协议对占空比、高电平时间(hightime)、低电平时间(low time)等都有严格的要求,必要满足这些要求才能确保协议正确工作。设计中常用上升和下降时间几乎相同的对称缓冲器 (symmetricbuffers)和单元,确保CLK、DQS等关键讯号路径的平衡。但I/O的上升和下降时间也可能因为表征问题而存在很大差异,这 种情况下将破坏占空比,进而在内存端导致违例。

图3 上升-下降延迟差异导致占空比要求的违例。
图3 上升-下降延迟差异导致占空比要求的违例。

SDF延迟化整(round-off)是高速GLS验证关键

测 试平台有一个时间刻度(timescale)用于定义设计模拟时的事件颗粒度(granularity);在时间刻度陈述中,第一个值是时间单位,第二个 值是模拟的精度。对于高速电路来说,定义时间刻度的精度必须非常谨慎。一般来说,测试平台中的时间刻度定义为1ns/10ps,这意味着所有延迟都将被近 似为最接近的10ps;但在DDR等时序非常重要的高速协议中,余裕(margin)可能非常小(在Picosecnd等级)。

举 例来说,如果数据路径中有10个缓冲器,每个的延迟为26ps,那么如果时间刻度是1ns/10ps,所有这些延迟都将被化整为30ps,进而在GLS中 将导入40ps的精确性。这将在GLS中导致错误的时序违例;因此模拟环境必须更新到合适的时间刻度才能避免这样的问题发生。

应该解决的内存错误

一 般来说,模拟中可以使用不同供货商提供的模型;可以是Verilog模型或Denali模型,可能来自美光(Micron)、Spansion、旺宏 (Macronix)等内存供货商。为了仿真之目的,最好选用Denali模型,因为这些模型对所有时序参数和协议都做了非常严格的检查,而且还包括 CK/DQS/DQ之间的抖动和偏移,因此非常接近于电路板上使用的实际内存。

当在 内存接口处违反任何时序规格时,模型将标记错误信息。RTL模拟中是没有延迟的,如果时序参数得到了正确配置,那么正常情况下不会遇到这些错误。但在 GLS模拟中需要考虑延迟因素,因此很可能发生某些参数违例,而错误信息会被丢出来。这些错误应该要仔细审查并必须解决。

在 正常情况下,当讯号由控制器发出并到达内存时,在写入周期中会遇到这些问题。在读取周期中,讯号是模型自身产生的并到达控制器。Denali内存模型 有许多开关用于控制各种参数,如允许的差分偏移、将内存初始化到某个值、禁止来自内存的错误消息等。必须注意的是,每一个开关都不可以忽略,否则很可 能会遮蔽错误信息。

小结

综 合以上的各方面讨论,显然GLS有助于发现在RTL层面无法预料的设计问题,并在芯片生产前修正;如果我们一直重复相同的工作,在GLS为DDR除错可能 是极具挑战性的任务。不过透过经验累积并遵循基本的除错规则,可以使工作顺利开展。问题可能很棘手,也不同于GLS中常为其他协议所考虑的,因此会耗费更 长的除错时间;从一开始就谨慎考虑这些关键的除错参数,可以在GLS中实现快速有效的DDR除错,并有助于在更早的SoC设计时间发现隐藏的设计问题。

《电子技术设计》网站版权所有,谢绝转载


?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

控制器?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈