博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我的 FPGA 学习历程(06)—— 二进制转格雷码
阅读量:6912 次
发布时间:2019-06-27

本文共 1013 字,大约阅读时间需要 3 分钟。

格雷码是一种无权编码,其特点是相邻的两数之间只有一个位不同,像这样:

        000-->001-->011-->010-->110-->111-->101-->100

对比二进制码是这样的:

        000-->001-->010-->011-->100-->101-->110-->111

       从格雷码的定义可以看到格雷码的顺序显然不是唯一的。虽然格雷码独特的编码方式使得它不便于阅读,但它的优点在于对比使用二进制编码的逻辑电路,比如像从 011 变到 100 的这个过程,在这种存在多个二进制位并行变化的情况下,由于电路本身的物理结构限制,导致变化存在先后顺序而不是同时的,短暂的时间差会产生一些非预想的中间状态比如 111,110,那么当这些中间状态被其他器件探测到时候就可能会引发错误。

书中讲到一种格雷码转化的方法

假设要把二进制串 b[i] (i=n-1, n-2, ..., 1, 0) 转换为格雷码串 g[i] (i=n-1, n-2, ..., 1, 0)

有以下方法:    
     1.  保留最高位 g[i] = b[i] (i = n-1) 
     2.  把其余各位 g[i] = b[i+1] ^ b[i] (i = n-2, n-3, ..., 1, 0)

对于 n = 3 的格雷码,具体转化步骤如下:

对于有限位数的具体的算法总是很容易被仿真工具检验的,但若想完全证明它就非常困难了。我认为对于算法这种东西,不必深究其原理,只学要会如何使用就足够了。

这里有一个通用的格雷码转化器,可以把 N 位的二进制码转化为相应的特定格式的格雷码,代码如下,各位可以试试。

module bin2gray(    input wire b[N-1:0],    output reg g[N:0]);//****************************//    parmater N = 3;    //这里设为 3 位的格雷码转化器//****************************//    assign g[N-1]   = b[N-1];    assign g[N-2:0] = b[N-2:1] ^ b[N-3:0];//***************************//endmodule

转载于:https://www.cnblogs.com/SummerSunnyDay/p/4990670.html

你可能感兴趣的文章
我的友情链接
查看>>
ppp链路的pap认证与chap认证的基本原理和配置
查看>>
[Java] 练习题004: 将一个正整数分解质因数
查看>>
速战速决---3小时快速搭建Exchange+SFB(2)
查看>>
关于VCPROJ文件的说明
查看>>
我的友情链接
查看>>
在主引导记录(MBR)的救援模式下如何重新安装GRUB引导装载程序
查看>>
我的友情链接
查看>>
git的基本使用和示例
查看>>
用户管理
查看>>
从输入 URL 到页面加载完的过程中都发生了什么事情?
查看>>
揭秘Windows Server2012 核心虚拟化技术Hyper-V
查看>>
去除文本中重复的行方法
查看>>
On Stack Replacement and JIT
查看>>
linux 搜索并替换文件内容
查看>>
java--xml文件读取(DOM)
查看>>
Bootstrap-表单
查看>>
hiveserver2连接报错: User: root is not allowed to impersonate anonymous (state=08S01,code=0)
查看>>
Gym 100090D Insomnia
查看>>
springboot shiro配置
查看>>