通常如果你的设计在较低时钟频率时通过了仿真,但是在较高时钟频率时却失败了,你的第一个问题应该是你的设计在某个较高时钟频率时是否达到了时序约束的要求。然而这里我们将举这样一个例子,就是对于某个较高时钟频率你已经检查了静态时序分析 (STA),而且时序约束也是正确的。这种情况是什么引起的较高时钟频率仿真失败呢?
可能的原因就是仿真方式、设计本身或者 testbench 设置方式有问题。
在较低时钟频率通过了仿真这个事实就排除了设计 /testbench/ 仿真在设置上的问题。排除了上面两项,下一个可能就是脉冲拒绝(reject)或者脉冲错误。
“脉冲拒绝(reject)”和“脉冲错误”是Verilog仿真中的概念。这些概念说的是脉冲的持续时间小于某个值(pulse_r)就不会通过某个电路元件。当然脉冲持续时间大于 pulse_r,但是如果小于另一个值 pulse_e 尽管会通过,但是在仿真中显示的是“x”。这个持续时间是以通过某元器件延迟的百分比来表示的。比如通过某元件的延迟是 1ns。0.5ns 的脉冲表示为 50% 的持续时间。
现在假设设计采用的频率是 200MHz。对应的周期就是 5ns,那么一半就是 2.5ns。在仿真中时钟每隔 2.5ns 变化一次,也就是时钟脉冲的宽度是 2.5ns。让我们假设内部时钟网络某一脉冲宽度是 2.8ns (也就是大于 2.5ns)。分析结果,pulse-duration(脉冲持续时间)<100%。这个脉冲可能就会被“拒绝(rejected)”,也就是说尽管时钟信号能够到达某个具体网络的输入端,但是却不能从这个网络输出。因此尽管 STA 分析显示 200MHz 很合适,但是仿真却不能通过。设计其他模块将不能获得时钟脉冲。
解决这个仿真问题的方法是在仿真设置中修改脉冲拒绝和错误(reject/error)限制。
例如在 ModelSim 中我们可以设置:
+transport_path_delays +transport_int_delays +pulse_r/0 +pulse_e/0
后续操作还有:
1. 将 pulse-rejection 限制修改为 0。(不会拒绝任何一个脉冲)
2. 将 pulse-error 限制修改为 0。(脉冲宽度低于某个值时不会显示输出为“x”)
同时要将 interconnect 延迟模式修改为 transport,其实是修改了脉冲滤波选项。
最后的问题是我们做这么多的修改就是为了能通过仿真测试吗?
在真正的硅片中的实际情况是怎样的?
在硅片中大部分内部互连线在每隔几皮秒后就会设置一个 repeater(中继器)。因此几纳秒的脉冲会顺利通过(合适的延迟),这不会存在问题。具体出现问题的情形可能是这样的:
1. 频率增加(脉冲宽度更小了)
2. 器件尺寸增加(某个路径的内部延迟可能变大了,导致内部延迟时间大于脉冲达到的传输时间)
赛灵思公司工具与方法学应用专家,1993年毕业于印度理工学院电子工程专业,一直从事 VLSI 和 EDA 相关领域的工作。2011年加入赛灵思公司,专攻库特性描述与建模,HDL,仿真与综合,静态时序分析以及跨时钟域(CDC)与同步相关内容。
全部0条评论
快来发表一下你的评论吧 !