复位设计中的结构性缺陷及解决方案(一)
ta_q = 1’b0;
else data_q = data_d;
在上面的示例中,slave_addr,write_enable和wdata改变它们的值 w.r.t system clock,使用静态时序分析,设计人员可以保证在目标触发器的设置时间窗口之前这些信号在一个时钟周期内的稳定性。然而,在该示例中,这些信号直接用作触发器的异步清零输入。
因此,即使在特定的时间slave_addr[7:0]在逻辑上将其值从“00000110”改为 “01100000”,但由于组合逻辑的传播延迟(净延迟和信元延迟)它可以用一个序列“00000110 --> 00000010 --> 00000000 --> 01000000 --> 01100000”生成过渡。
在这段时间里,salve_addr为“00000010”,如果wdata[7:0]始终为零且“write_enable” 已经被断言,那么它将在module_rst_b创建一个无用脉冲,从而导致虚假复位。
图6:复位路径的组合逻辑
2. 解决方案
首先注册组合输出,然后再将其用作复位源(如图7所示)。
图7:复位路径的组合逻辑解决方案
3. 问题(II)
在上面的示例中,复位路径的组合逻辑解决方案并不完善。如果组合逻辑输入大约在同一时间发生变化,那么它可能在设计中触发虚假复位。然而,如果组合逻辑的输入信号变化相互排斥,那么它可能不会引起任何设计问题。例如,测试模式和功能模式相互排斥。因此复位路径的测试复用是有效的设计实践。
然而,对于某些情况,变化相互排斥的静态信号或信号可能会导致设计出现虚假复位触发。下面的示例描述了此类设计可能出现问题。
图8:复位路径的组合逻辑(问题 2)
在上面的示例中,多路复用结构用于复位路径,同时进行RTL编码。其中“mode” 是一个控制信号,不频繁改变,而mode0_rst_b和mode_1_rst_b是两个复位事件,然而在合成RTL时,在门控级它被分解成不同的复杂的组合(And-Or-Invert[AOI])信元。虽然在逻辑上它相当于一个多路复用器,但由于不同的信元和净延迟,每当信号“mode”从 1-->0变化时,final_rst_b都会产生干扰。
4. 解决方案
* 在合成过程中在复位路径保留多路复用结构,因为多路复用结构与其他组合逻辑相比易于产生干扰。MUX Pragma可以在编码RTL时使用,这将有助于合成工具在复位路径中保留任何多路复用器。
- 复位设计中的结构性缺陷及解决方案(二)(11-16)
- 12位串行A/D转换器MAX187的应用(10-06)
- AGC中频放大器设计(下)(10-07)
- 低功耗、3V工作电压、精度0.05% 的A/D变换器(10-09)
- PIC16C5X单片机睡眠状态的键唤醒方法(11-16)