果如图 10。可以看到,仿真结果与实测结果是非常相近的。
图 10
为了避免改版,这个300kHz频率的时钟在CPLD内部用一个高速时钟同步后再使用,这个bug才得以规避。对于这种问题,硬件设计的初期就应该根据信号完整性仿真规划好时钟拓扑和端接方案,必要时使用时钟驱动芯片。只有这样才能保证从根本上避免问题的发生。
1.4 案例:数据的非单调性带来的时序裕量问题
这是一个和处理器总线相关的案例。现象:一个DSP系统,设计初版时,经常出现跑死的情况。经过排查,发现是DSP访问SDRAM时出错。硬件工程师在测试SDRAM相关信号的SI时,发现地址线的非单调性非常严重。我们先来分析一下这个系统地址总线的拓扑:
图 11
DSP的本地总线上外挂了6个器件,其中一个SDRAM为同步接口,5个其他器件为异步接口。这是一个整体星型,局部链型的地址总线拓扑。图中实线矩形表示的位号U4是驱动端(DSP),其余虚线矩形表示的各器件是总线上的负载,其中U5就是出问题的SDRAM,其工作频率是133MHz。整个拓扑上没有任何匹配电阻。
先分析时序,SDRAM的规格书要求地址相对时钟建立时间最小1.5ns,而从DSP的规格书分析,DSP在133MHz外部总线频率下,能保证的地址建立时间也就是1.5ns,也就是说,即使地址线波形OK,在建立时间上的时序裕量也只是0而已,刚刚满足设计要求。
现在,由于非单调性问题,地址线的高电平有效时间整整往后面推了超过2ns(如图 12a),这样,地址建立时间的时序裕量由零变为负,而且负得还相当多,出现问题,也就在情理之中了。
Smarteebit Page 6 of 17
OSCILLOSCOPEDesign file: DSP_A1.FFS Designer: songminHyperLynx V7.74000.0V [U5.23 (at die)]3500.03000.02500.0Voltage -mV-2000.01500.01000.0500.00.00-500.00.004.0008.000Time (ns)12.00016.000Date: Wednesday Dec. 16, 2009 Time: 12:05:33Show Latest Waveform = YES
(a) (b)
图 12
改善方法:经过仿真发现,U5处的非单调性问题,主要是位于拓扑中较远的U6、U7处的反射贡献的。在驱动端往U6、U7方向发散前增加串阻(如图 13),可有效地吸收反射,改善U5处波形。改善后的地址线仿真波形如图 12b。
图 13
2 驱动能力
一个高速器件放在一堆低速电路中,其信号完整性的问题会比较突出;而一个低速器件放在一堆高速电路中,其驱动能力的问题就会显得比较突出。为什么,请看“案例:驱动能力不足造成的时序错误”。另外,也有器件选型和匹配方案不当带来的驱动能力问题,当器件驱动的信号沿大大超出其翻转速率时,所带来的问题除了信号沿变缓外,还可能造成信号摆幅变小,阈值电平违规等。详见“案例:错误的设计带来的驱动能力问题”。
2.1 案例:驱动能力不足造成的时序错误
一块单板,设计有DSP和FPGA。FPGA的加载模式设置为Slave Serial模式,上电时DSP从外挂FLASH中读取FPGA的bit文件,并加载FPGA。发现的故障是:FPGA加载有一定失败的概率。
Smarteebit Page 7 of 17
示波器监测FPGA的INIT_B信号,发现该信号在加载数据过程中会拉低且无法恢复。(正常流程该信号只在加载初始化时输出低脉冲)。INIT_B信号在加载数据过程中拉低,表示FPGA检测到了数据CRC出错。分别导出FPGA加载成功和加载失败两种情况下,DSP从FLASH中读到SDRAM中的bit文件,并进行比较,发现二者有少量字节有差异。由此判断,DSP在将FPGA加载数据从FLASH向SDRAM搬移的过程中,出现了误码。DSP本身的程序运行依赖于SDRAM,如果SDRAM访问有问题,DSP应该容易跑飞。鉴于故障复现时未发生DSP跑飞的现象,我们把排查的重点放在读FLASH的过程上。
硬件电路上,FLASH挂在DSP的本地总线上,作为异步存储器被DSP访问,FLASH的标称访问时间是90ns,依此来检查DSP对FLASH空间的时序配置,读数时的建立保持时间应该都是足够的。但经过实测发现,建立时间的时序裕量为负值。究其因,是因为FLASH输出的信号沿太缓,几乎达到了20ns,如图 14通道二波形。这样缓的信号沿,直接导致了FLASH访问时间的延长,超过了97ns。
图 14
找到问题根源后,根据测量结果修改DSP对FLASH空间的异步时序配置,以保证足够的裕量,问题便迎刃而解了。
在一个总线频率超过50MHz的处理器系统中,FLASH相对来说属于较低速的器件,其管脚驱动能力也较弱。如果处理器总线上挂的负载比较多,由于容性负载的增大,FLASH驱动总线时,其输出信号沿势必会变得更缓。而信号沿变缓带来的额外延时,往往容易被忽略。设计者在处理类似的接口时,应该充分考虑各种可能给时序带来冲击的参数,以保证接口的稳定可靠。
2.2 案例:错误的设计带来的驱动能力问题
一个100MHz时钟,由晶体驱动反相器74AHC04产生,作为FPGA的时钟全局时钟使用。FPGA的管脚电平设置为LVTTL33。电路工作过程中,发现FPGA工作紊乱,将时钟引出测量,时有时无,很不稳定。测量100MHz时钟输入,发现高电平只有1.5V左右。该电平无法保证被FPGA正确识别为高。
这是一个典型的工程师经验不足造成的原始设计缺陷。分析这个100MHz时钟的原理图(如图 15),1分钟内发现三个问题:
1.最大的问题,反相器的选型:74AHC04能保证的输出信号翻转率很缓(规格书标称的最小翻转斜率为100ns/V),也就是说,这个电路实际是在用一个低速器件驱动一个高速信号。这样的直接结果便是导致其输出100MHz信号时幅度不够;
2.源端使用了一个100ohm的串阻,负载端使用了一个200ohm的并行匹配,从阻抗连续的观点来看,这种取值起不到阻抗匹配的作用。并行匹配用于LVTTL/LVCMOS电平,也不合适,100+200=300ohm
Smarteebit Page 8 of 17
电阻的输出负载较重,对信号沿有进一步拉缓的影响;
3.100ohm和200ohm的电阻构成了分压网络,造成FPGA输入端的高电平只有74AHC04输出端的2/3,这样,接收端得到的信号幅度就更小了。
图 15
解决方法:选择沿更快的反相器;串行匹配使用10~50ohm的阻值,具体由仿真确定;去除并行匹配电阻。
这个案例主要的问题就在于器件的选型。100MHz的时钟,已属于典型的高速信号,用不符合信号沿规格的低速器件驱动,必然会造成信号幅度上的违规。
3 EMC
高速数字电路的EMC设计,与信号完整性(SI)、电源完整性(PI)、单板的布局布线设计(尤其是信号回路的设计)等因素都是密不可分的。SI对EMC的影响比较好理解:信号的过冲越小,沿越缓,意味着其谐波能量越小,所以对外的EMI就越小。PI设计的核心思想是在电源和地之间提供交流信号的最低阻抗,包括滤波电容的设计和平面层叠层设计等。电源越干净,EMC效果就越好,这个也很好理解。关于PI设计,以后有机会再作针对性说明。
信号回路的设计是最容易被设计者忽视的环节。对照图 16简要说明一下:信号路径上有电流I,就会有大小基本等同,方向相反的电流I’。对单端信号来说,其回流途径一般是地,也有一部分走电源,我们可以将二者统一称为参考平面。这样,Driver、信号线、Receiver和参考平面就共同构成了一个等效的环状天线。
Smarteebit Page 9 of 17
图 16 信号的电流路径构成环状天线
对于环状天线,电流I在空间某一处产生的电场强度如下:
K×A×I×f2E=
r
其中K是发射系数,I是差模电流,A是环路面积,f是信号频率,r是距离。可见,在其他因子一定的情况下,环路面积越小,对外辐射的能量越小。这就是信号回路设计的关键所在。
对于低速信号来说,信号在参考平面是沿最小电阻路径回流,如下图红线;对于高速信号来说,则是沿最小电感路径回流,如下图蓝线。
信号层参考平面图 17 信号回流路径示意图
因此,对于高速信号,为了使它回流的环路面积最小,我们应该做到: 1. 信号走线尽量短;
2. 信号层与参考平面的距离尽量短; 3. 尽量保持走线下方参考平面的连续性。
第1、2点一般在叠层设计和布局布线的时候考虑,而在第3点上容易踩到的陷阱比较多,所以这里详细介绍一下:
第一种是信号换层带来的回流问题,如图 18,信号换层一般有如下几种方式:
Smarteebit Page 10 of 17