我的 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 和数码 ...
随机推荐
- pycharm terminal 'import' 不是内部或外部命令,也不是可运行的程序
https://blog.csdn.net/jiangyanting2011/article/details/79065778 Python import同级目录报错 pycharm的py文件impo ...
- Oracle 获取前几行数据问题的陷阱
查询用户数据表,需要根据时间正序排序,然后获取时间最早的前三条数据,是不是第一印象想这么写: select * from users where rownum<4 order by datati ...
- Unity 阴影的制作方式
Unity阴影制作的三种方式. 方式一:Light中Shadow Type的类型 包括Hard Shadows.Soft Shadows.No Shadows: Mesh Renderer中的属性 ...
- Spring Security 之API 项目安全验证(基于basic-authentication)
===================================Basic Authorization 规范===================================Request ...
- Karma (Test runner)
Karma https://baike.baidu.com/item/%E7%BE%AF%E7%A3%A8/7618552?fromtitle=Karma&fromid=878453 1,意译 ...
- Groovy 设计模式 -- 责任链模式
Chain of Responsibility Pattern http://groovy-lang.org/design-patterns.html#_chain_of_responsibility ...
- mysql和SQLYog工具使用
在做 android java web开发过程中,需要用到mysql数据库,使用可视化工具SQLYog管理工具,现介绍如下: 首先下载mysql工具 下载地址 https://dev.mysql. ...
- rocketmq 4.2.0集群配置
采用的是2m-2s-async模式 1. 修改每台机器的/etc/hosts 文件,增加如下内容 192.168.1.100 nameserver1192.168.1.102 nameserver ...
- Docker入门-docker-compose使用(二)
Docker Docker容器大行其道,直接通过 docker pull + 启动参数的方式运行比较麻烦, 可以通过docker-compose插件快速创建容器 1.安装docker-compose ...
- eclipse快捷键 (包括查找类、方法、变量)
♦[Ct rl+T] 搜索当前接口的实现类 1. [ALT +/] 智能提示 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类.方法和属性的名字时 ...