【 FPGA 】特定情况下消除不稳定态的方法
不是没有方法,但方法也不多,最典型的就是使用格雷码。
消除不稳定态的原理
通过上篇博文:https://blog.csdn.net/Reborn_Lee/article/details/84439777
通过对多触发器寄存器的分析,我们知道了产生不稳定态的原因,那就是组成寄存器的各个触发器输出变化时刻的客观不一致性。(我们希望各个触发器输出变化时刻一致)。因此,要想消除不稳定态,就必须消除多触发器输出变化时刻的不一致才行。可触发器不可能完全一致,更没有精确等长的物理连线,所以想要协调一致多个触发器的输出变化时刻来消除寄存器输出的不稳定态, 几乎是不可能的。
此路不通,换个思路。
如果能让寄存器中的各个触发器每次只有一个输出会发生变化,那么自然就不存在变化时刻不一致的问题了,从而从根本上杜绝了不稳定态的产生。
格雷码简介
格雷码是一种数字排序系统,其中的所有相邻整数在它们的二进制表示中仅有一位不同。
下表给出了4bit自然二进制码、格雷码与十进制整数的对照表:
十进制数 | 4位自然二进制码 | 4位典型格雷码 |
---|---|---|
0 |
0000 |
0000 |
1 |
0001 |
0001 |
2 |
0010 |
0011 |
3 |
0011 |
0010 |
4 |
0100 |
0110 |
5 |
0101 |
0111 |
6 |
0110 |
0101 |
7 |
0111 |
0100 |
8 |
1000 |
1100 |
9 |
1001 |
1101 |
10 |
1010 |
1111 |
11 |
1011 |
1110 |
12 |
1100 |
1010 |
13 |
1101 |
1011 |
14 |
1110 |
1001 |
15 |
1111 |
1000 |
从上表可以看出,格雷码在任意两个相邻的数之间转换时,只有1bit发生了变化,所以它有效地避免了寄存器从一个数值到下一个数值时的不稳定态。
由于格雷码中最大数和最小数之间也仅有1bit不同,所以又称为循环二进制码,或者反射二进制码。
常用的格雷码编解码方法
1从自然二进制码到格雷码:该过程又称为格雷码的编码。
方法是从二进制码的最右边一位(最低位)起,依次将每一位与左边一位进行异或运算,作为对应格雷码该位的值,而最左边一位(最高位)不变。对应的公式为:
例:
根据上面的公式很容易写出二进制码转换为格雷码的程序:(Verilog HDL)
module bin_to_gray(bin_in,gray_out);parameter data_width = 4;input [data_width-1:0] bin_in;output [data_width-1:0] gray_out;assign gray_out = (bin_in >> 1) ^ bin_in;endmodule
2 从格雷码到二进制码:该过程又叫格雷码的解码,方法是从格雷码左边第二位(次高位)起,将每一位与其左边一位解码后的值异或,作为该位解码后的值,而最高位的解码结果是其本身。对应公式如下:
例:
根据上面的公式,很容易编写出转换程序:(Verilog HDL)
module gray_to_bin(gray_in,bin_out);parameter data_width = 4;input [data_width-1:0] gray_in;output [data_width-1:0] bin_out;reg [data_width-1:0] bin_out;always @(gray_in)beginbin_out[3] = gray_in[3];bin_out[2] = gray_in[2]^bin_out[3];bin_out[1] = gray_in[1]^bin_out[2];bin_out[0] = gray_in[0]^bin_out[1];endendmodule
参考:
FPGA之道
百度百科
格雷码原理与Verilog实现
【 FPGA 】特定情况下消除不稳定态的方法相关推荐
- [css] 写出div在不固定高度的情况下水平垂直居中的方法?
[css] 写出div在不固定高度的情况下水平垂直居中的方法? 我知道的有两种方法<!DOCTYPE html> <html><head><meta char ...
- [css] 写出在不固定宽高的元素在固定高度的情况下水平垂直居中的方法
[css] 写出在不固定宽高的元素在固定高度的情况下水平垂直居中的方法 flex布局:还有就是可以用定位也可以实现等等: flex:父div:{display:flex: justify-conten ...
- mysql 并发避免锁表_Yii+MYSQL锁表防止并发情况下重复数据的方法
本文实例讲述了Yii+MYSQL锁表防止并发情况下重复数据的方法.分享给大家供大家参考,具体如下: lock table 读锁定 如果一个线程获得在一个表上的read锁,那么该线程和所有其他线程只能从 ...
- python设计一个节假日字典_python实现在无须过多援引的情况下创建字典的方法
本文实例讲述了python实现在无须过多援引的情况下创建字典的方法.分享给大家供大家参考.具体实现方法如下: 1.使用itertools模块 import itertools the_key = [' ...
- 并发产生mysql锁表_Yii+MYSQL锁表防止并发情况下重复数据的方法
本文实例讲述了Yii+MYSQL锁表防止并发情况下重复数据的方法.分享给大家供大家参考,具体如下: lock table 读锁定 如果一个线程获得在一个表上的read锁,那么该线程和所有其他线程只能从 ...
- php如何在特定情况下触发,php类知识点滴---魔术方法,系统在特定时机触发的方法...
__get()获取私有或受保护属性时调用的方法 class coach { private $chairfit = "徐晓冬"; public function __constru ...
- 缩短服务器响应时间,美国服务器高并发情况下缩短响应时间的方法
美国服务器网站的响应时间是指系统响应请求的时间.网站响应时间越短,用户访问美国服务器网站的速度就越快.虽然响应时间并不直接反映网站的性能,但它在一定程度上反映了美国服务器网站系统的处理能力.下面将讨论 ...
- 在特定情况下的简单SSO实现方案
最近需要实现类似单点登录的功能.情况是这样的,最初在做网站A,做着做着,要做网站B了,要求与网站A完全分开作为两个应用,但用户数据要求与网站A保持一致,也要求用户在网站A登录后,转到网站B时不需要再登 ...
- Java的流读一行丢一行_java – 在少数特定情况下记录丢失的消息
我正在使用 java.util.logging来完成我的应用程序的所有日志记录. 直到最近,我在没有任何特定配置的情况下使用日志工具.一切都按预期工作,所有日志都在控制台中可见(stderr) 现在, ...
最新文章
- ASP.NET页生命周期概述
- 2021年春季学期-信号与系统-第九次作业参考答案-第三小题
- 3变量程序_PLC的程序结构及其特点
- ajax请求返回json实例,Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
- 无向图求割点(找桥)tarjan
- 【数据结构与算法】【算法思想】回溯算法
- java怎么自增2_从头认识java-2.3 自增自减与关系操作符
- 家里的所有网线都集中到了弱电箱怎么组网?
- Spring的AOP特性
- Oracle 11.2.0.2 Patch 说明
- NBU备份数据库时的ORA-27211错误分析解决
- 文件编辑vim常用命令
- Java基础算法看这一篇就够了,简单全面一发入魂
- wps如何将字体竖着排列_如何在短时间内,使自己的字看起来更舒服?
- MATLAB的变换器毕业设计,基于matlab的反激变换器分析与设计毕业设计doc.docx
- 豆瓣250信息爬取及保存到excel中
- php中判断一个文件是否存在,PHP中用于判断文件是否存在的函数是
- 什么样的人适合搞科研?
- 2021.11.08 - 143.猜数字游戏
- 智慧公交解决方案-最新全套文件
热门文章
- php curl 下载网页,php 通过cURL函数抓取网页、下载网页的简单示例
- python flask 教程_Flask 教程 第一章:Hello, World!
- python制作ios游戏_python自动化生成IOS的图标
- python图像分割算法_Opencv(二)—图像分割之分水岭算法!
- ==和equals的简单比较
- 自动挂载ios_Ubuntu自动挂载iso文件 | 学步园
- linux 中输入一个c程序,从c源程序到Linux可执行代码的过程
- 380v pcb 接线端子_连接器、接线端子、插针插孔三者究竟有什么区别?
- filewriter判断是否关闭_警示丨小伙用打火机检测煤气罐是否泄漏,瞬间被火焰吞噬!...
- linux syslogd 源码,syslogd 详解二