竞争冒险

竞争冒险的产生及其原因
在没有考虑信号通过导线和逻辑门的传输延迟时间的理想情况下,门电路的输入与输出
为稳定状态。但实际情况是信号通过导线和门电路时,都存在时间延迟;信号发生变化时也有
一定的上升时间或下降时间。这样,同一个门的一组输入信号,由于它们在此前通过不同数目
的门,经过不同长度导线的传输,到达门电路输入端的两个信号,同时向相反的逻辑电平跳变
(一个从1 变为0,另一个从0 变为1),而变化时间有差异的现象称为竞争[3]
在组合逻辑电路中,当输入信号的状态改变时,输出端可能会出现不正常的干扰信号,使
电路产生错误的输出,这种现象称为竞争冒险。对于同一个门电路来说,当有两个输入信号同
时向两个相反的逻辑状态变化时,由于两个输入信号到达开门、关门电平的时间不同,就有可
能在电路的输出端产生干扰脉冲。可见,门电路存在延迟时间是组合逻辑电路产生竞争冒险
现象的根本原因。
毛刺的消除:

1、输出加D 触发器
这是一种比较传统的去除毛刺的方法。原理就是用一个 D 触发器去读带毛刺的信号,
利用 D 触发器对输入信号的毛刺不敏感的特点,去除信号中的毛刺。在实际中,对于简单
的逻辑电路,尤其是对信号中发生在非时钟跳变沿的毛刺信号,去除效果非常的明显。
但是如果毛刺信号发生在时钟信号的跳变沿,D 触发器的效果就没有那么明显了(加 D
触发器以后的输出 q,仍含有毛刺)。另外,D 触发器的使用还会给系统带来一定的延时,
特别是在系统级数较多的情况下,延时也将变大,因此在使用 D 触发器去除毛刺的时候,
一定要视情况而定,并不是所有的毛刺都可以用 D 触发器来消除。

2、信号同步法
设计数字电路的时候采用同步电路可以大大减少毛刺。由于大多数毛刺都比较短(大
概几个纳秒),只要毛刺不出现在时钟跳变沿,毛刺信号就不会对系统造成危害了。因此一
般认为,只要在整个系统中使用同一个时钟就可以实现系统同步。但是,时钟信号在FPGA
器件中传递时是有延时的,我们无法预知时钟跳变沿的精确位置。也就是说我们无法保证在
某个时钟的跳变沿读取的数据是一个稳定的数据,尤其是在多级设计中,这个问题就更加突
出。因此,做到真正的"同步"就是去除毛刺信号的关键问题。所以同步的关键就是保证在时
钟的跳变沿读取的数据是稳定的数据而不是毛刺数据。以下为两种具体的信号同步方法。
(1)信号延时同步法
信号延时法,它的原理就是在两级信号传递的过程中加一个延时环节,从而保证在下一
个模块中读取到的数据是稳定后的数据,即不包含毛刺信号。这里所指的信号延时可以是数
据信号的延时,也可以是时钟信号的延时。

(2)状态机控制
使用状态机也可以实现信号的同步和消除毛刺的目的。在数据传递比较复杂的多模块系
统中,由状态机在特定的时刻分别发出控制特定模块的时钟信号或者模块使能信号,状态机
的循环控制就可以使得整个系统协调运作,同时减少毛刺信号。那么只要我们在状态机的触
发时间上加以处理,就可以避免竞争冒险,从而抑制毛刺的产生。

### FPGA 中的竞争冒险及其解决方案 #### 什么是竞争冒险? 在数字电路中,当个互补信号(如 \( F = A \& ~A \))同时作用于同一逻辑时,可能会引发一种现象称为 **竞争冒险**。这种情况下,由于信号传输延迟的不同,可能导致输出端出现短暂的不确定状态或毛刺[^1]。 尽管某些情况下的竞争并不一定会引起冒险行为,但如果确实发生冒险,则表明电路内部存在潜在的设计缺陷。具体来说,“有冒险一定存在竞争”,这说明冒险的发生是以竞争为前提条件的。 --- #### 竞争冒险的影响 在 FPGA 设计中,如果未妥善处理竞争冒险问题,可能带来以下后果: - 输出波形失真,表现为不必要的尖峰脉冲。 - 影响后续逻辑模块的功能稳定性。 - 增加功耗并降低系统的可靠性。 特别需要注意的是,在同步时序电路中,任何由竞争冒险引起的毛刺都可能被寄存器捕获,从而破坏数据完整性[^4]。 --- #### 如何解决竞争冒险? ##### 方法一:通过组合逻辑优化消除竞争源 可以通过重新设计布尔表达式来避免直接使用互斥变量作为输入项。例如对于函数 \( Y = AB + AC \),可以改写成更稳定的实现形式以减少因不同路径延时差异而产生的风险: ```verilog assign Y_optimized = (A && B) || C; ``` 这种方法从根本上消除了造成竞争的可能性。 ##### 方法二:引入锁存机制过滤掉瞬态干扰 为了防止短促波动传递至下一级单元,可以在敏感节点前加入采样元件——即利用边沿触发特性屏蔽那些不符合设定周期规律的小幅跳变事件。典型做法是在关键位置设置双稳态多谐振荡器或者专用滤波单元[^2]: ```verilog always @(posedge clk or negedge reset_n) begin if (!reset_n) filtered_signal <= 0; else filtered_signal <= raw_signal; end ``` 上述代码片段展示了如何借助 D 触发器完成一次简单的信号净化过程。 ##### 方法三:应用静态时动态相结合的方式验证整体性能表现 虽然单独依靠任一时序检验手段均难以全面捕捉隐藏隐患,但结合者优势则有助于提升发现问题的概率。比如先执行快速高效的静态扫描定位可疑区域后再辅之针对性强的手工测试确认最终效果[^3]。 此外还需注意实际开发过程中应充分利用EDA工具所提供的辅助功能选项,像自动插入缓冲区调整负载平衡参数等措施同样有利于缓解此类矛盾冲突状况。 --- ### 总结 综上所述,针对 FPGA 内部可能出现的竞争冒险情形提供了几种切实可行的技术应对策略。从根源修改算法结构直至后期严格把控质量标准各个环节都需要给予充分重视才能有效保障产品长期稳定可靠运作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值