FPGA-数字电路的隐患

## Verilog 之数字电路的隐患
文章目录
前言
数字电路中的隐患
寄存器输出的不稳定态
多触发器寄存器
不稳定态对数字电路的影响
特定状态下去除不稳定态的方法
消除不稳定态的定理
格雷码简介
总结

前言

数字电路由于其自身的特点,总会出现一些隐患,有些隐患不会对FPGA设计造成影响,有些时候这个隐患是致命的,本章对隐患进行简单的介绍。

寄存器输出的不稳定态

不稳定态,指的就是不稳定的状态,请注意,寄存器输出的不稳定态并不是由于赋值冲突而导致的不确定态(即“X”状态),而是由于不同路径的延迟不一致所导致的数据线上出现了一个或多个非预期的中间状态。
有过时序仿真经历的朋友都了解,当寄存器的输出从X变到Y时,中间会有一段毛刺状态,下图中就展示了当8位寄存器的输出从“01111111”变化到“10000000”时,过渡部分出现的不稳定态,如果将不稳定状态放大,可以看到这些近似毛刺的部分实际上是有确切的取值的。

单触发器寄存器

如果寄存器只包含一个触发器,即寄存器的存储容量仅为1bit,那么此时是否还会出现不稳定态呢?例如,如果在下一个有效时钟沿到来时,要将一个1bit位宽的寄存器的输出从逻辑0变成逻辑1,那么波形图是否会出现若干次0、1之间的震荡呢?
事实证明,对于这类寄存器,无论做多少次时序仿真,它都不会出现不稳定态,原因很简单,对于触发器来说,其输出只会在有效的时钟沿到来时变化,如果其输出变化了N次,那么其至少经历了N个时钟周期,反之,如果其经历了N个时钟周期,那么其输出最多也只能变化N次,因此回到开始的问题,如果在下一个有效时钟有效沿到来之前,要将一个1bit位宽的寄存器的输出从逻辑0变化到逻辑1,那么波形图是不可能出现0、1之间的震荡的,因为一个时钟有效边沿最多只能改变输出一次。

多触发器寄存器

只包含一个触发器的寄存器不会出现输出的不稳定态,那么为什么包含多个触发器的寄存器会出现不稳定态呢?
有很多的FPGA初学者对这个问题表示很费解,认为无论寄存器的位宽怎么样,它们都是由最基本的触发器构成的,而触发器在每个时钟的有效沿只能变化一次,因此除非经历多个时钟周期,否则寄存器的而输出怎么可能变化出多个值呢?
"不管你信不信,总之就是发生了“。事实上,8位寄存器的输出从”01111111“变化到”10000000“的过程中,寄存器的输出的不稳定状态包含了若干次看似随机的中间值,但实际上任意两个相邻的中间值都是有联系的,那就是它们之间只发生了一个bit的变化,因此Nbit寄存器中的每个触发器并没有违背触发器在每个时钟的有效沿只能变化一次的原理。
那么是什么原因导致多触发器寄存器的输出在一个时钟有效沿后发生了多次变化呢?
这下我们可以非常明显的看出,造成多触发器寄存输出出现不稳定状态的原因,就是组成寄存器的各个触发器变化不一致,当然了,更为精确的描述应该是由于线延迟的存在,导致时钟信号到达各个寄存器的时间可能不一致,也导致各个触发器的输出端口到信号接收端所需的时间可能不一样,再加上各个触发器的tco等参数不可能精确一致,所以当我们改变多触发器寄存器的输出时,就会出现不稳定态。主要是线延迟、Tco等概念。

不稳定态对数字电路的影响

如果寄存器的输出用于产生同步逻辑中另一个或多个寄存器的输入,那么其不稳定状态对FPGA设计的影响并不大,因为寄存器仅要求其输入在时钟有效沿时刻稳定即可,所以只要通过规范时钟信号的使用以及时序分析等手段,确保寄存器时钟有效沿到来的时刻及其需要数据稳定的时间窗口不要落入寄存器出现不稳定态的时间窗口内,就可以保证FPGA设计行为的正确性。
不过对于异步逻辑来说,不稳定态的危害就会凸显出来。
首先,如果寄存器的输出用于产生另一个时域中寄存器的输入,那么另一个时钟域的有效时钟沿几乎必定会落入不稳定的窗口中。
其次,如果寄存器的输出用于产生一个电平敏感的信号,那么肯定会出错。

特定情况下去除不稳定态的情况

难道碰到不稳定态的情况,不是只能躲着走,其中最典型的就是使用格雷码。

(1)消除不稳定态的原理

通过对多触发器寄存器的分析,我们了解了产生不稳定态的原因,那就是组成寄存器的各个触发器变化时刻的客观不一致性,因此要想消除不稳定态,那就是消除多触发器输出变化时刻的不一致才行,可是这个世界上没有两个一摸一样的触发器,也没有两个一摸一样的触发器,更没有两段精确的物理连线,所以想要通过协调一致多个触发器的输出变化时刻来消除寄存器输出的不稳定态,几乎是不可能的,不过换个思路来看,如果能让寄存器中的多个触发器每次只有一个输出发生变化,例如,当8位寄存器的输出从”10000000“变化到”10000001“时,寄存器的输出就不会出现不稳定态,因为此时仅有寄存器中表示最低位触发器的输出发生了变化。
通过以上分析可以得出,只要能保证在时钟有效沿时刻,寄存器的输入端与输出端的数据最多只有1bit不同,就可以消除寄存器输出时的不稳定态,不过这个要求比较苛刻,所以寄存器输出不稳定态这样一个隐患是在FPGA中无法杜绝的,接下来要详细介绍格雷码。

(2)格雷码简介

格雷码,英文全称:Gray code,由于自然二进制码在相邻数据之间可能存在多个bit的变化,例如自然数7和8对应的4bit自然二进制码分别是”0111“,”1000“,因此当寄存器的输出从7变到8的时候,寄存器的每一位都会发生变化,从而造成不稳定态,并且会使得数字电路产生很大的尖峰电流脉冲。

总结

格雷码可以消除一些特定情况下的不稳定态,格雷码应用的地方还很多,可以利用格雷码来保证跨时钟域读、写地址传递的稳定性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值