我的 FPGA 学习历程(06)—— 二进制转格雷码
格雷码是一种无权编码,其特点是相邻的两数之间只有一个位不同,像这样:
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-:],
output reg g[N:]
); //****************************//
parmater N = ; //这里设为 3 位的格雷码转化器
//****************************//
assign g[N-] = b[N-];
assign g[N-:] = b[N-:] ^ b[N-:];
//***************************// endmodule
我的 FPGA 学习历程(06)—— 二进制转格雷码的更多相关文章
- 我的 FPGA 学习历程(01)—— FPGA 基础知识和 Quartus 的安装
高级的嵌入式市场主要分为以下三类:ARM.DSP 和 FPGA. 其中 ARM 是行业内的佼佼者,目前几乎所有的安卓智能手机都使用 ARM 授权的 CPU架构:而 DSP(数字信号处理器) 早年就被大 ...
- 我的 FPGA 学习历程(09)—— 时序逻辑入门
讲到这篇时,组合逻辑就告一段落了,下面是一些总结: 描述组合逻辑时,always 语句中的敏感信号列表中需要列出全部的可能影响输出的变量 描述组合逻辑时,always 语句中的赋值总是使用阻塞赋值符号 ...
- 我的 FPGA 学习历程(07)—— BCD 编码:移位加 3 算法
2-10 进制码,也称为 BCD 码,它的编码方式则是通过一个 4 位二进制来表示一个 10 进制数,部分十进制对应的 BCD 码如下 十进制数 | BCD 码 13 --> 0001_0011 ...
- 我的 FPGA 学习历程(05)—— 使用 Modelsim 仿真工具
在第 3 篇中讲到了如何使用图形进行仿真激励输入,图形输入法尽管简单易学,但如若要求复杂的仿真输入激励.较长的仿真时间或是要求打印输出信息乃至输出文件日志则显得不够用了. 本篇以上一篇的 3-8 译码 ...
- 我的 FPGA 学习历程(02)—— 实验:点亮 LED 灯
关于 Quartus 的操作可以使用 Quartus 自带的帮助,帮助中带有全套的操作教程. 中文网络教程链接(链接至 altera中文官网,点击观看) Quartus II 软件设计系列:基础 Qu ...
- 我的 FPGA 学习历程(14)—— PWM 脉冲宽度调制
PWM 是一种调节输出功率的技术(俗称调压),其原理在于改变输出方波的占空比,具体输出见下图: 输出信号为电压值,当负载为恒阻时,上图中的输出功率分别为 25%.50%.75%. 实现方法如下: 设置 ...
- 我的 FPGA 学习历程(12)—— 电子钟项目准备
初学 FPGA 的时候,我们总是存在很多疑问,比如:xilinx 和 altera 的 FPGA 那种比较好.verilog 语言被如何综合成具体硬件电路.RTL 级电路是什么意思等等.现在我们就不会 ...
- 我的 FPGA 学习历程(11)—— 实验:按键消抖
按键是一个输入设备,在理论上可以归为开关一类,理想的按键波形如下: 然而由于按键的机械特性,断开和闭合动作是不可能在一瞬间完成的,实际的波形如下: 抖动期间电平处于临界值,由于晶振的频率相当的高,数字 ...
- 我的 FPGA 学习历程(10)—— 实验:数码管驱动
根据黑金 AX301 手册,数码管位选信号命名为 SEL[5:0],其中 SEL[5] 对应最左边的数码管,而SEL[0] 对应最右边数码管:作为约定,在下面的描述中我们对应的称之为数码管 5 和数码 ...
随机推荐
- python+turtle 笔记
用Python+turtle绘制佩琪: from turtle import * def nose(x,y):#鼻子 penup()#提起笔 goto(x,y)#定位 pendown()#落笔,开始画 ...
- 老男孩Python全栈学习 S9 日常作业 005
1.有如下变量,请实现要求的功能 tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age& ...
- ES6 数组遍历方法的实战用法总结(forEach,every,some,map,filter,reduce,reduceRight,indexOf,lastIndexOf)
目录 forEach every some map filter reduce && reduceRight indexOf lastIndexOf 前言 ES6原生语法中提供了非常多 ...
- [再寄小读者之数学篇](2014-06-23 Gronwall-type inequality)
Suppose that $$\bex \cfrac{\rd f}{\rd t}+h\leq gf\quad (f,g,h\geq 0,\ t\in [0,T]). \eex$$ Then for $ ...
- H5取经之路——HTML的基本标签
一.head中的基本标签 1.HTML文档的结构: a.<head>头部部分,b.<body>主体部分 <!DOCTYPE html> <!-- ↑为 ...
- golang slice分割和append copy还是引用
转载自:http://studygolang.com/articles/724 1. slice1:= slice[0:2] 引用,非复制,所以任何对slice1或slice的修改都会影响对方 dat ...
- ADO五大对象
ADO.NET五大对象, 1. Connection:与数据源建立连接. 2. Command:对数据源执行SQL命令并返回结果. 3. DataReader:读取数据源的数据,只允许对将数据源以只 ...
- error: no matching function for call to 'std::exception:exception(const char[16])'
环境:codeblocks 语言:C++ 在执行:throw new exception("queue is empty.");时 遇到问题:error: no matching ...
- 论文笔记:Deep feature learning with relative distance comparison for person re-identification
这篇论文是要解决 person re-identification 的问题.所谓 person re-identification,指的是在不同的场景下识别同一个人(如下图所示).这里的难点是,由于不 ...
- WebService - [Debug] java.net.BindException: Can't assign requested address
Connected to the target VM, address: '127.0.0.1:57803', transport: 'socket' Exception in thread &quo ...