组合逻辑的Glitch与时序逻辑的亚稳态
竞争(Race):一个门的输入有两个及以上的变量发生变化时,由于各个输入的组合路径的延时不同,使得在门级输入的状态改变非同时。
冒险或险象(Hazard):竞争的结果,如毛刺Glitch。
相邻信号间的串扰也可能产生毛刺Glitch。
组合逻辑的冒险是过渡性的,它不会使得稳态值偏离正常值。根据严格的metal delay和gate delay可以计算出Glitch的出现时间和宽度。
组合逻辑很容易带来毛刺,当信号作用在FF的reset,clear,clock,gate端时,会造成严重的后果。
措施:使用Gray编码,保证一个时刻只有一个bit发生变化;
采用寄存器采样;(将异步电路转换为同步电路);
改变电路结构,加入冗余的电路来消除险象;如(加入delay cell进行滤波,再相与输出)
后端加入滤波电容;
寄存器的输入端对毛刺并不敏感,只有当毛刺出现在时钟沿并且影响到数据的建立时间和保持时间,才会导致寄存器输出出错。
glitch的危害,在组合逻辑中大面积传播。
(由于毛刺一般时间很短,多为皮秒级,发生错误的机会不大)
在clock switch中如何保证Glitch-Free
由于select信号与clock0和clock1可能完全无关,clock0与clock1也可能完全无关,所以在下图的电路中很容易出现Glitch
一种Glitch-free的设计电路:(必须是加入clock,之后再进行Latch互锁)
加入两个negative_edge的FF来相互互锁,在FF0和FF1的下降沿都还没到来,select已经改变时,FF输出信号与select信号相与
必然都为0,在第一个FF触发后,FF0或FF1中的某一个工作一拍。
1)由两级FF,且后一级是negative FF,保证拉长的clock段是clock=0的段,同时最终切换的clock一定是一个完整的clock 高电平部分。
2)由互锁,保证只有在当前clock,已经接受到enable之后,另一个clock才能开始准备切换,保证当前clock,有完整沿。
3)一个上升沿,一个下降沿,保证切换时间最小。
总之,正确的切换到另一clock的时间会被拉长,拉长的部分是低电平。
在clock0和clock1完全异步的情况下,做两级寄存器同步处理。
亚稳态:在时序逻辑不满足setup/hold/revovery/removal时。
触发器输出端从一个不确定的状态到一个随机值的过程,可能会经过震荡,这段时间叫做决断时间(resolution time)
两个异步信号之间出现亚稳态的概率由MTBF(Mean Time Between Failures)来表示,一级的register以年为单位。二级的register以万年为单位。
亚稳态造成的危害:
1)时序逻辑存在一个时间tMET来保证亚稳态不能传播到下一级的寄存器。
2)在不同的寄存器load中,造成值不同。原因是不同寄存器的MTBF可能不同。
怎么处理亚稳态:
1)通过同步寄存器链,来进行同步。不能同步频率很高的信号(输入保持至少三个时钟,来保证第二级寄存器能输出正确的值),
且可能带来一个clock的错的值,需要依靠协议来保证电路的正确性。
2)异步FIFO
组合逻辑的Glitch与时序逻辑的亚稳态的更多相关文章
- 我的 FPGA 学习历程(09)—— 时序逻辑入门
讲到这篇时,组合逻辑就告一段落了,下面是一些总结: 描述组合逻辑时,always 语句中的敏感信号列表中需要列出全部的可能影响输出的变量 描述组合逻辑时,always 语句中的赋值总是使用阻塞赋值符号 ...
- sv时序组合和时序逻辑
input a; input b; input c; reg d; wire e; reg f; // 时序逻辑,有寄存器 always@(posedge clk)begin 'b1)begin d ...
- 从头学起Verilog(二):时序逻辑基础与回顾
引言 时序逻辑对于数字电路设计十分重要,本文针对数字电路中的时序逻辑部分进行了系统的回顾. 存储器件 由于时序逻辑的输出不但受当前输入影响,还受之前的输入的影响,所以需要有存储单元对以前的输入进行存储 ...
- verilogHDL设计中的同步时序逻辑
引用自夏宇闻教授 1.同步时序逻辑: 是指表示状态的寄存器组的值只能在唯一确定的触发条件发生改变. 只能由时钟的正跳变沿或者负跳变沿触发的状态机就是一例,always@(posedge clk). 1 ...
- FPGA时序逻辑中常见的几类延时与时间(五)
FPGA逻辑代码重要的是理解其中的时序逻辑,延时与各种时间的记忆也是一件头疼的事,这里把我最近看到的比较简单的几类总结起来,共同学习. 一.平均传输延时 平均传输延时 二.开启时间与关闭时间 开 ...
- FPGA学习笔记(六)—— 时序逻辑电路设计
用always@(posedge clk)描述 时序逻辑电路的基础——计数器(在每个时钟的上升沿递增1) 例1.四位计数器(同步使能.异步复位) // Module Name: coun ...
- 一个有趣的异步时序逻辑电路设计实例 ——MFM调制模块设计笔记
本文从本人的163博客搬迁至此. MFM是改进型频率调制的缩写,其本质是一种非归零码,是用于磁介质硬盘存储的一种调制方式.调制规则有两句话,即两个翻转条件: 1.为1的码元在每个码元的正中进行一次翻转 ...
- 03-组合逻辑电路设计之译码器——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线——普利斯队长精心奉献 课程目标: 1. 再次熟悉Quartus II工程的建立以及完整的FPGA开发流程 2. 以译码器为例学会简单组合逻辑电路设计 实验平台:无 实验原理: 组合逻辑, ...
- (原创)基于FPGA的调光流水灯(Verilog,CPLD/FPGA)
1.Abstract 前几天做了一个呼吸灯,觉得确实挺有意思的:可惜的是只有一个灯管亮,板子上有四个灯,要是能让这些灯有序地亮起来,那应该更有趣味了!跟传统的一样,逻辑上做成一个流水灯的样式, ...
随机推荐
- spring3 mvc:方法返回值的学习
新建后台代码用以测试返回类型,在这里我新建的如下: /** * 项目名称:Spring3mvc demo * Copyright ? 2010-2012 spartacus.org.cn All Ri ...
- 20145211《Java程序设计》第5周学习总结——独上高楼,望尽天涯路
教材学习内容总结 异常处理 JAVA异常 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.异常就是出现在运行时出现不正常 ...
- mongo安装、备份与常见命令整理
http://zlboy888.blog.163.com/blog/static/315357072012919241104/ 1 下载安装包 官方下载地址:http://www.mongodb.o ...
- 【C++】虚函数
I 动态绑定.多态.虚函数.对象的静态类型与动态类型 1.基类中有两种函数: 派生类直接继承不做改变 派生类重新定义成适合自身的版本覆盖掉基类的函数 对于第一种就是普通的基类成员函数,第二种通常通过将 ...
- PMP--可能会涉及到的计算题
一.进度管理里的历时三点估算历时的三点估算可能会出现在进度管理的计算题里.以下公式,大家要记住:说一下历时的三点估算中的几个值:1.最有可能的历时估算:Tm2.最乐观的历时估算: To3.最悲观的历时 ...
- Windows-006-映射网络驱动器图文详解
此文主要讲述 Win7 中,如何映射网络驱动器,一般用于网络共享时.敬请亲们参阅,若有不足之处,敬请大神指正,不胜感激! 打开计算机,选择工具栏中的 映射网络驱动器,依据下图中的操作进行映射网络驱动器 ...
- git还原成某个点
1.本地 git reset --hard commit值 git push -f // 强制同步到git库(git服务器) 2.项目所在线上服务器 git reset --ha ...
- spring MVC的困惑--url-pattern的/和/*有区别
总是现象就是:spring用到forward("/WEB-INF/jsp/*.jsp")而forward当然是又要经过web.xml的映射的,然后,在URL匹配时,<url- ...
- 深入理解BootStrap之栅格系统(布局)
1.栅格系统(布局) Bootstrap内置了一套响应式.移动设备优先的流式栅格系统,随着屏幕设备或视口(viewport)尺寸的增加,系统会自动分为最多12列. 我在这里是把Bootstrap中的栅 ...
- LeetCode Perfect Squares
原题链接在这里:https://leetcode.com/problems/perfect-squares/ 题目: Given a positive integer n, find the leas ...