异步复位、同步释放——系统完美稳定

上一篇我们聊了状态机和组合逻辑的冒险竞争,组合逻辑易产生毛刺从而造成系统不稳定,所以在FPGA设计中尽量采用时序逻辑赋值,那么时序逻辑就一定时稳定的吗?我们今天就来聊聊时序逻辑的冒险竞争!

首先我们来聊聊时序逻辑中最基础的部分D触发器的同步异步,同步复位即复位信号随系统时钟的边沿触发起作用,异步复位即复位信号不随系统时钟的边沿触发起作用,置数同理,rst_n表示低电平复位,我们都知道D触发器是一个具有异步复位异步置数的器件,那么怎么样Verilog来具体描述这个器件呢,接下来我们就来看一下,这里以Vivado 2017.3为例。

D触发器的几种表示形式

同步复位

异步复位

异步复位,同步置数。

异步复位,异步置数

      同步异步无非就是一个是否受系统时钟边沿触发,如果想要异步就直接加一个敏感信号就好了。不过一般工程中的书写形式就是异步复位,不过这种设计方法也有弊端,原因就是时序逻辑的冒险与竞争的问题。

异步复位、同步释放

如下图可以看到异步复位的结构图,D触发器是复位优先级高于clk优先级,所以采用通异步复位的方法,但是异步复位D触发器存在竞争与冒险,比如当clk的上升沿和rst_n的下降沿同时来临的时候这时候系统应该听谁的,同样当clk的上升沿和rst_n的上升沿同时来临的时候容易使寄存器出现亚稳态。

      亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态引时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。这时系统是处于极不稳定的状态,这也是我们需要考虑的。

有人说既然异步复位会出现冒险竞争那我们使用同步复位不就行了,我们来看看同步复位的逻辑结构图,同步复位虽然解决了当clk的边沿来临的时候rst_n的边沿也正好来临所出现的冒险与竞争,但是从综合的电路上可以看出,多了一个组合逻辑,选择器(MUX),可想而知如果所有的寄存器复位都是这样,那会多浪费多少资源。那么这样就没有办法再解决了吗?答案是有的,一位前辈曾经说过,从正确到完美的道路是十分艰辛的,我们为了追求完美,引入异步复位、同步释放机制,既解决了同步复位浪费资源问题,有解决了异步复位带来的亚稳态。

这是复位信号同步化代码,系统时钟不变化,还是采用异步复位的方法,但是当复位信号操作时会进入一个同步寄存器,使得复位信号同步化,这样既避免了异步复位的冒险与竞争,又避免了同步复位耗费太多资源。只需要将复位信号同步化编写成独立模块,然后顶层例化就好了。系统时钟信号不变化。

上电延时  

开发板接通电源后会有一小段不稳定的状态,在比较大的工程中,逻辑资源利用的比较多的情况下,如果加上电源后直接进行复位操作,同样会使寄存器不稳定,所以,类似于按键消抖的方法,我们也给板子加电源后延时50ms,当系统稳定后在进行复位操作,再看bingo的书时,他是将这两个个分成两个模块然后实例化到一起,但为了提高代码的可移植性,我将异步复位同步释放和上电延时50ms写在一个模块。具体实现如下。

对于较小的工程,进行这些操作与否也就无可厚非,如果对于一个项目,需要要求必须尽善尽美,FPGA的优势便是数字信号处理,速度快,我们在保持速度的前提下,还需要使其准确率也提高,尽量占用少量的资源。这样异步复位,同步释放的机制就体现出来了。

转载请注明出处:NingHeChuan(宁河川)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SAP最佳业务实践

SAP最佳业务实践:MM–退货到供应商(136)-2采购退货

一、退货原因 1 退货原因:02 质检未通过(到冻结库存) 在收货过程中,质检未通过。因此,物料将被过帐到冻结库存并移动到用于退货的存储地点(例如,1060)。...

3414
来自专栏SAP最佳业务实践

SAP最佳业务实践:重复制造(149)-4发料

1、MF60备料 在此活动中,您为生产备料。如果在生产存储地点有充足的库存可用,将不生成行项目。 必须有库存。 角色:车间主任 后勤- 生产-重复制造 -备料-...

4348
来自专栏高性能服务器开发

强大的搜索开源框架Elastic Search介绍

近期工作需要,需要从成千上万封邮件中搜索一些关键字并返回对应的邮件内容,经调研我选择了Elastic Search。

4741
来自专栏黑白安全

国外黑客社区网站推荐

社区网站是”黑客”探索和获取知识的好地方。无论您是初学者还是专家,都需要提升自己;所以我想我会列出一些好的黑客社区网站。

8452
来自专栏开源FPGA

异步复位、同步释放机制——系统完美稳定

  白驹过隙,寒假已经余额不足,回头想想,也就是看了两本书,做了几个并不大的工程,看着QQ群里面一些大神们聊天,时不时有的没的还插几句,一句话没人理也是正常事情...

20510
来自专栏py+selenium

业务逻辑漏洞个人经验集锦【不定时更新~】

  测试点1:生效日期能否改为当前时间之前。(假设你买的是车祸险,昨天出了车祸,今天买保险,把时间改成前天或昨天,那不就保险生效了……)

1521
来自专栏SAP最佳业务实践

SAP最佳业务实践:MM–转包(138)-3交货请求

3.4 MIGO创建外向交货请求 此活动为要发送到供应商的部件创建外向交货请求。 角色:仓库文员 后勤-物料管理-库存管理-货物一定-货物移动 (MIGO) ...

3626
来自专栏程序员互动联盟

【专业技术】如何检测USB是否已经插入?

usb是我们现代生活中不可或缺的一个东西,大家平常只要使用电脑,肯定都接触过usb吧。本篇文章对于大部分同学来说并没有实际意义,主要面向想了解USB的一些同学,...

3785
来自专栏FreeBuf

pyMagic:用python控制的Geek入门神器

原创作者:comover 大学四年快要结束了,这几年也学习了一点新的姿势。最近一直在跟国外的micropython项目,这个项目是由剑桥大学的理论物理学家(th...

3125
来自专栏.NET技术

.net core实践系列之短信服务-架构优化

通过前面的几篇文章,讲解了一个短信服务的架构设计与实现。然而初始方案并非100%完美的,我们仍可以对该架构做一些优化与调整。

802

扫码关注云+社区