DDR验证是任何SoC中最关键和最复杂的任务之一,因为它涉及位于DUT内部的控制器和位于DUT外部的外部DDR存储器。 DDR系统由控制器,I/O,封装,插座,电源,时钟和外部存储器组成,它们共同工作。在数字验证中,并非所有这些组件都进入图像,而主要是控制器,PHY,I/O和存储器。验证变得更加复杂,因为所有组件的影响都无法在数字仿真中模仿,但门级仿真(GLS)为我们提供了良好的基础设施来报告可能困扰控制器-PHY-I/O路径的设计问题从时间的角度来看。
在GLS中验证DDR时会遇到许多与时序相关的问题,导致验证和STA(静态时序分析)团队之间的大量迭代。拥有干净的调试GLS环境可以让您对RTL(寄存器传输级别)运行的DDR协议的STA视角充满信心,并且可以提供关注数字和时序方面的良好信心。由于RTL的时序可见性,本文整理了DDR的GLS(门级仿真)验证中通常报告的广泛问题,并通过大量示例强调了在GLS环境中快速有效地关闭DDR的重要调试标准。
RTL环境没有任何时序感知,因此设计中没有惯性/传播延迟,但是当我们移动时进入GLS设置后,这些进入了画面并且必须得到有效处理,以便模仿实际的硅行为,同时不会使事情过于悲观。在逻辑单元的输入处,持续时间小于惯性延迟的脉冲将不能在该逻辑单元的输出处引起任何转变,逻辑门表现出的这种现象称为惯性延迟传播。工业标准GLS仿真工具通常将传播延迟视为该逻辑门的惯性延迟。仿真工具采用的这种建模是对实际硅行为的相当好的抽象,事实上,它很好地模拟了通过单级逻辑门的信号传播。但是在IO等复杂门的情况下,这种行为是不可取的,其本质上是多级的,并且一旦信号使其经过第一级,就保证它将成功地传播通过IO单元。由于仿真工具不了解逻辑单元的这种内部结构,因此即使对于多级IO,它也会抑制脉冲,如图1所示。
图1:默认的GLS仿真行为是抑制所有小于门延迟的转换
现在要解决这个问题,有两种解决方案可能。
第一种解决方案是手动更新SDF并将延迟更新为更小的值。这种方法适用于正确传播信号,但这种方法不正确,因为新的延迟不代表实际的延迟,可能会抑制其他潜在的功能问题。
行业标准的GLS模拟器确实有能力/开关可以允许/禁止通过细胞的一定宽度的脉冲。例如“拒绝&错误设置“使用时将传播宽度大于'错误设置'的所有信号。虽然它会传播信号的未知值,宽度介于'reject&错误设置'它将完全消除宽度小于'拒绝设置'的信号。一个例子如下表所示。
Pulse_e& ; pulse_r | 行为 |
pulse_e/100& pulse_r/100 | 拒绝所有小于传播延迟100%的脉冲 |
pulse_/0& pulse_r/0 | 传递大于0%传播延迟的所有脉冲 |
pulse_e/50& pulse_r/50 | 传递大于传播延迟50%的所有脉冲。 |
表1:Pulse_e/Pulse_r行为
基于时序小组完成的平衡的时钟选择
在RTL设置中,由给定源驱动的时钟到达同一节点的所有节点瞬间但是当我们转向GLS设置时,时钟偏移进入图像并因此可能产生定时问题,其中从相同源导出的两个时钟路径可能具有偏斜,使得DDR数据/时钟路径不能平衡所有可能的组合。输入时钟是DDR设计中最重要的参数,因为所有其他信号都是根据输入时钟周期和占空比得出的。可能存在多个时钟源可用作控制器输入时钟的情况。通常,来自任何一个时钟源的路径是平衡的,建议用于DDR输入时钟。 DDR_CLK,DDR_DQS等信号有严格的要求传播到外部DDR存储器的占空比,高时间,低时间等,这些都需要满足DDR的正确操作。写入侧的大多数与占空比要求相关的故障可能是由于DDR控制器输入上的时钟占空比不正确。必须正确地确保我们使用满足时序的正确时钟源,以避免不必要的调试。下面提到了相同的例子,其中存储器输入端的DQS占空比数据已经被选为DDR控制器时钟的2个不同时钟源捕获。
DDR_CLK频率:400MHz(~2.5ns)
55%的2.524 ns = 1.388200ns |
2.524 ns的45%= 1.13580ns |
路径不同层次结构的脉冲宽度(Clk源1) | 高脉冲 | 低脉冲 |
PLL输出 | H:1291ps | L:1233ps |
在Cross-Bar输入 | H:1270ps | L:1254ps |
在交叉条输出 | H:1241ps | L:1283ps |
在控制器输入 | H:1227ps | L:1297ps |
在DQS pad输入 | H:1334ps | L:1190ps |
在DQS垫 | H:1377ps | L:1147ps |
路径不同层次的脉冲宽度(Clk源2) | 高脉冲 | 低脉冲 |
PLL输出 | H:1294ps | L:1230ps |
在Cross-Bar输入 | H:1210ps | L:1314ps |
在横杆输出 | H:1181ps | L:1343ps |
在控制器输入 | H:1167ps | L:1357ps |
在DQS pad输入 | H:1394ps | L:1130ps |
在DQS垫 | H:1437ps | L:1087ps |
表2:不同层次结构的时钟占空比在系统中
在焊盘上用于转储SDF的负载
I/O在定时感知GLS DDR验证方面发挥着至关重要的作用。满足焊盘输入的时序,并且从焊盘的自由文件中提供的信息中转储I/O延迟。有时,从控制器到焊盘输入的路径被正确地满足并平衡,但仍然可以看到故障。这可能是由于I/O引入的错误延迟,这些延迟位于主机控制器和外部DDR存储器之间的路径中。延迟实际上取决于施加到衬垫的负载。因此,在生成SDF时,需要注意必须应用将在船上使用的正确和实际负载。如果不这样做,将导致在SDF中产生非常悲观的定时电弧,当在GLS仿真中反标注时会产生虚假故障。这些问题很难调试,需要付出很多努力。
加载(以pf为单位) | 转换时间(ns) | 计时弧(ns) | |
悲观负载 | 35 | 2 | 2.8 |
实际负载 | 12 | 0.6 | 1.2 |
表3:悲观负载v/s实际负载
输出缓冲器使能(OBE)时序要求
大多数DDR控制器设计都是为了驱动OBE(输出缓冲器使能) DQ(数据)和DQS(Strobe)焊盘本身可以用于写入/读取相同的焊盘。由于各种原因,OBE时序通常在路径计时时被忽略,但在DDR的情况下这样做会导致灾难性的结果。例如,在DDR协议的读/写期间,在READ/WRITE命令之后和DQS的第一个上升沿之前的DQS上的LOW状态被称为读/写前同步码;同样在最后一个数据输入之后DQS上的LOW状态元素称为读/写后同步码。前导码部分为接收设备提供定时窗口,以便在选通信号上存在已知/有效电平时启用其数据捕获电路,从而避免对捕获电路的错误触发。 UIT。在前同步码之后,选通脉冲将在数据突发的持续时间内以与时钟信号相同的频率切换。在写入期间对于该最小前导码宽度存在一定的时序要求,例如DDR2为0.35Ck,DDR3为0.9Ck,应该满足。类似地,对写后同步时序有要求。对于DDR2,这是0.4Ck-0.6Ck,对于DDR3,最小为0.3CK。如果DDR GLS遇到最常见的问题,则违反这些参数。
图2:DDR前导码和后同步码
DDR焊盘的压摆率设置:
焊盘的特点是不同的压摆率决定了每单位时间输出电压的变化率。这些设置对RTL仿真没有任何影响,因为没有延迟,但在GLS仿真中,延迟进入画面,进行适当的设置以避免任何不必要的调试变得至关重要。系统中不同焊盘的时序通常以最大转换速率满足,但可以根据各种参数而不同。一个这样的例子是,对于像DDR这样的协议的最大压摆率,可以看到反射和干扰的问题。对于此参数的不同设置,打击垫延迟变化太大。这些是根据最终将在验证板和测试仪上使用的负载和电阻值决定的。我们必须确保使用正确的打击垫设置运行我们的模拟,以便在预期结果和观察结果之间没有间隙。
下表包含推荐的SRE设置的数据,用于不同的接口之一SoC的。
Interface | SRE设置 |
DDR | 10 |
SDR | 10 |
QuadSPI | 11 |
ENET | 11 |
MLB50 | 11 |
SPI | 00 |
表4:SoC不同接口的推荐压摆率设置
字符I/O中的问题:
这方面只是在GLS中而不是在RTL中可见的,如果从开始确保可以确保我们可以最小化迭代调试和反馈验证和STA。为了给出背景,每个单元都有上升弧和下降弧所提到的延迟。任何单元的延迟都直接来自自由文件,其中包含PVT延迟的信息。电池的这些上升和下降时间可以彼此不同。但是像DDR这样的协议对占空比,高时间,低时间等有严格的要求,这些都需要满足协议的正确操作。在设计中,通常使用对称缓冲器和单元,其具有几乎相同的上升和下降时间,使得诸如CLK,DQS等的关键信号的路径是平衡的。但有可能I/O的上升和下降时间之间存在巨大差异,因为表征问题会导致占空比失真,从而导致内存端的违规。
图3:上升 - 下降延迟弧的差异导致违反占空比要求
SDF延迟舍入是高速GLS验证的杀手
测试平台具有定义事件粒度的时间表模拟设计。在时间刻度语句中,第一个值是时间单位,第二个值是模拟的精度。对于高速电路,应该非常仔细地定义时标精度。通常,时间刻度在测试平台中定义为1ns/10ps,这意味着所有延迟将四舍五入到最接近的10ps。但是在DDR这样的高速协议中,时序非常关键,边距可以非常小(以皮秒为单位)。例如,如果数据路径中有10个缓冲区,每个缓冲区的延迟为26ps,如果时间刻度为1ns/10ps,则所有这些延迟将四舍五入为30ps,因此将在GLS中引入40ps的不准确度。这将导致GLS中的错误时序违规。必须更新模拟环境以具有适当的时间尺度以迎合这些问题。
应解决内存错误
通常,不同供应商提供的模型可用于模拟。这些模型可以是Verilog模型或Denali模型。这些模型由Micron,Spansion,Macronix等内存供应商提供。出于模拟目的,Denali模型应该是首选,因为这些模型对所有时序参数和协议进行了非常严格的检查,并且还包括CK/DQS/DQ之间的抖动和偏斜因此非常接近将在板上使用的实际存储器。如果在存储器接口违反任何时序规范,则模型会标记错误。在RTL仿真中,没有延迟,如果正确配置了时序参数,则通常不会遇到这些错误。但是在图像延迟的GLS模拟中,可能会发生一些参数被违反并且会抛出错误。应仔细审查这些错误,并且必须予以解决。通常在写入周期期间遇到问题,此时信号由控制器发出并到达存储器。在读取周期期间,信号由模型本身生成并到达控制器。为Denali存储器提供了许多开关,它们控制各种参数,例如允许的差分偏移,将存储器初始化为某个值,禁止从存储器发送错误消息。应该注意不要传递这样的开关,这可能会掩盖任何错误。
全部0条评论
快来发表一下你的评论吧 !