verilog竞争与冒险

竞争

这是一个verilog中不能不提及的问题,因为都是并行执行,资源的竞争是必然的,但是有竞争就会产生一种冒险现象。

竞争判断

代数法,通过逻辑表达式的简化,形成Y=a+a'或者Y=a*a'

卡诺图法,有两个相切的卡诺圈,并且相切处没有其他卡诺圈包围,可能会出现竞争与冒险,其实,卡诺圈的本质还是表达式判定,只不过把数学语言改成图形语言,这样更加直观。 卡诺圈的判断方法就是,将相邻的数值圈起来,只会相切,不会相交。 消除方法 对于数字电路来说,避免竞争与冒险的方法主要有4种。

1)增加滤波电容,消除毛刺 就是通过增加阻值,或者扩大电容值,将尖端脉冲减弱到阀值。

2)改变电路逻辑,增加附加项 简单来说,就是在逻辑表达式上,将有争议的一种情况单独列出来,这样就不会有冲突,在卡诺图上,直接多加一个卡诺圈,消除竞争。

3)使用时钟同步电路,利用触发器进行打拍延迟 同步电路信号的变化都发生在时钟边沿,对于触发器的D输入端,只要毛刺不出现在时钟的上升沿并且不满足数据的建立和保持时间,就不会对系统造成危害(这里有个关于建立时间和保持时间的问题,这个具体去看电路的亚稳态内容) 借此方式,延迟进入,就可以缩短必要时间,减少竞争冒险的出现,

4)采用格雷码计数器 由于数字电路的底层逻辑,在某些数字的增加时,由二进制的特殊性,会导致多个计数器同时工作,但这个同时直接又会存在一些时间误差(其实叫时间差会好一点),这些误差就会导致大量的竞争和冒险问题,所以从编码方面进行改进,我们常说的2468码是最简单的,后面还有格雷码之类的,这些编码的改进会导致计数器不会那么容易出现竞争冒险。

总结

在大多数情况下,很少会使用增加电容,改变逻辑之类的,常用在时钟信号的事格雷码计数器,Verilog中常用的是打拍延时, 在Verilog书写规范中,有这么几条可以减少出现大量的竞争和冒险问题。 (

1)时序电路建模的啥时候使用非阻塞语句(时序逻辑电路中,非阻塞语句可以消除竞争。) (2)组合逻辑建模时,使用阻塞赋值(当后一个数据的值,是前一个数据的计算结果,也就是说后一个数据需要前一个数的新值,但是非阻塞语句是并行执行的,所以会产生竞争,所以要用阻塞语句来解决组合逻辑电路。)

(3)在同一个always块中建立时序和组合逻辑模型时,用非阻塞语句。

(4)在同一个always块中不要即用阻塞语句又用非阻塞语句

(5)不要再多个always块中为同一个变量赋值

(6)避免latch产生(锁存器(latch),是电平触发的存储单元,数据存储的动作取决于输入时钟信号的电平值。仅当锁存器处于输入状态时,输出才能随着数据输入发生变化。当电平信号无效时,输出信号随输入信号变化,就像通过了缓冲器;当电平有效时,输出信号被锁存。激励信号的任何变化都将直接引起锁存器输出状态的改变,很可能会因为瞬态特效不稳定而产生震荡现象。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值