在Verilog学习中常用的编码方式有二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码,对于新手来说,搞不清楚编码为什么要分这么多格式?统一用一种格式不好吗?那么现在就来看看这三种编码的区别和应用。

先看看这三种编码的定义

二进制码

格雷码

独热码

下面看看十进制数0---7用三种编码如何表示

十进制数

二进制

独热码

格雷码

0

3b000

8b0000_0001

3b000

1

3b001

8b0000_0010

3b001

2

3b010

8b0000_0100

3b011

3

3b011

8b0000_1000

3b010

4

3b100

8b0001_0000

3b110

5

3b101

8b0010_0000

3b111

6

3b110

8b0100_0000

3b101

7

3b111

8b1000_0000

3b100

在Modelsim中显示波形如下:

展开二进制码波形

二进制码用3个bit可以表示出十进制数0---7,消耗的触发器比较少,每次数字变化时,状态位会出现多位同时变化。

展开独热码波形

独热码用8个bit来表示十进制数0---7,也就是说用一个bit的高电平来表示一个数字,每次数字发生变化时,状态位2位同时变化。

bit[0]为高电平代表数字1,bit1[1]为高电平代表数字2,bit[2]为高电平代表数字3,依次类推。

展开格雷码波形

格雷码用3个bit来表示十进制数0---7,每次数字发生变化时,状态位只有一位发生变化。

展开全部波形

下面分析一个这三种编码在数字变化时,状态变化情况。

二进制码

二进制码由001变化到010时,变化波形如下:

此时bit[1]由低电平变为高电平,bit[0]由高电平变为低电平。理想情况下bit[0]和bit[1]同时跳变,但是在实际电路中会存在延时,那么bit[0]和bit[1]跳变时有先后顺序,假如bit[0]由高电平变为低电平后,bit[1]延迟了一段时间才由低电平变为高电平。

那么在bit[1]延时的这点时间内,bit[0]和bit[1]就会同时为低电平,那么输出的数据就会变成3'b000,这个0在电路中就相当于一个毛刺。

假如bit[1]由低电平变为高电平后,bit[0]延时了一段时间才由高电平变为了低电平,那么在bit[0]延时的这段时间内,输出数据就会变成3'b011,如果系统响应速度非常快的话,那么在数字1到2跳变时,就会出现一次3。造成代码中的逻辑错误。

独热码

独热码数字由2、3变化时,bit[1]由高电平变为低电平,bit[2]由低电平变为高电平。

在由数字2变为数字3时,理想情况下bit[2]和bit[3]要同时变化,但是在实际电路中存在延时。bit[2]和bit[3]电平变化时会有先后顺序。

假如bit[2]由低电平变为高电平后,bit[1]延迟了一段时间才由高电平变为低电平。

这样在很短的一段时间内就会出现bit[1] 和bit[2]同时为高电平的情况,根据独热码的特点,为高电平时代表数据有效,那么在这段时间内说明数字2和3同时有效。如果系统反应速度比较快的话,就会导致逻辑上的错误。相当于电路中出现了毛刺。

格雷码

格雷码在数字变化时,相邻两个数字之间每次只会有一个bit位的电平发生改变

由图上可以看书,数字1、2、3变化时,每次只有一个bit的电平发生改变,这样在实际电路中,bit电平变化时就算存在延时,也不会出现在数字变化过程中出现其他数字,造成程序逻辑或者时序上的错误。也就是说格雷码可以避免电路产生毛刺。

通过上面对三种编码的分析,可以总结出这三种编码的优缺点。

二进制编码:
    优点:属于压缩状态编码,使用的触发器位数少,可以直接比较大小和算术运算。
    缺点:译码复杂;相邻状态变换时,多位发生改变,电噪声大,转换速度较慢,易出错;

独热码:
    优点:状态比较时仅仅需要比较一个位,从而一定程度上简化了译码逻辑,译码简单,减少了毛刺产生的概率。
    缺点:速度较慢,触发器资源占用较多,面积较大;

格雷码:
    优点:属于压缩状态编码,使用的触发器位数少;相邻状态变换时,仅一位发生改变,电噪声小,转换速度较快;
    缺点:译码复杂,没有固定大小,很难直接进行比较大小和算术运算,需要转换为自然二进制码来判断。

在实际应用中,根据自己系统情况,选择适合自己的编码方式。

FPGA学习笔记---二进制码、独热码、格雷码分析对比相关推荐

  1. 小梅哥FPGA学习笔记

    小梅哥FPGA学习笔记 一.38译码器 功能: 译码器其任一时刻的稳态输出,仅仅与该时刻的输入变量的取值有关,它是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等).38 ...

  2. FPGA学习笔记(八):ASK调制解调的仿真

    笔记八是ASK调制解调的仿真实现. ASK调制解调的实现原理:首先使用MATLAB产生存储基带波形的coe文件,再让ROM读取coe文件输出基带波形,然后DDS产生正弦波信号作为载波信号,接下来使用乘 ...

  3. FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程

    FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程 很多做过单片机的朋友都知 道,我们在对MCU烧写完程序固件后,那么该程序固件就存储在了该MCU内部.即使MCU断电了再重新上电,程序 ...

  4. Ui学习笔记---EasyUI的EasyLoader组件源码分析

    Ui学习笔记---EasyUI的EasyLoader组件源码分析 技术qq交流群:JavaDream:251572072   1.问题1:为什么只使用了dialog却加载了那么多的js   http: ...

  5. FPGA学习笔记(七): DSB调制解调的仿真

    笔记七是DSB调制解调的仿真实现. DSB调制解调的实现原理:首先使用DDS产生低频正弦波信号作为调制信号,再用DDS产生高频信号作为载波信号,然后使用乘法器将两者相乘产生DSB信号,DSB信号与载波 ...

  6. FPGA学习笔记(1)简单的时序逻辑电路——流水灯

    FPGA学习笔记(1)简单的时序逻辑电路--流水灯 编程语言为Verilog HDL 原理 (1)设计一个计数器,使开发板上的4个LED状态每500ms翻转一次.开发板上的晶振输出时钟频率为50MHz ...

  7. FPGA学习笔记(八)同步/异步信号的打拍分析处理及亚稳态分析

    系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...

  8. FPGA学习笔记_ROM核调用与调试

    FPGA学习笔记 ROM核调用与调试 1. ROM存储器IP核的使用 2. 创建.mif文件 3. In system memory content editor内存查看工具的使用 4. Signal ...

  9. FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇尾

    FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇一 FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇二 ...

最新文章

  1. DotNetCore跨平台~System.DrawingCore部署Linux需要注意的
  2. IE再次曝出安全漏洞 微软表示正在调查
  3. Mybatis Generator的使用
  4. 软件项目经理需具备什么样的技术水平?
  5. 【NLP】词嵌入基础和Word2vec
  6. sublime text2快捷键
  7. java线程实现排序_【多线程实现快速排序】
  8. 用PD进行数据库建模经验总结
  9. Dubbo系列(1)_背景介绍和基本情况
  10. Ubuntu 10.04 安装在 VMware Workstation 7 后,键盘无反应的解决方法
  11. 发现了学XML最好的素材
  12. [纯前端]打造自己的ORK管理软件
  13. 三个数比较大小函数调用c语言,C语言程序系列第四弹–max函数判断三个数的大小...
  14. Ubuntu20.04代理设置
  15. java tibco client,TIBCO EMS 8.5.1 安裝 (Linux)
  16. 【latex】Latex文献报错 Something‘s wrong--perhaps a missing \item. \end{thebibliography}
  17. 张量(Tensor)的降维与升维
  18. 学习笔记:星火第一讲-使用Apollo 学习自动驾驶
  19. 【系统运维-Linux】使用U盘安装Linux
  20. 【MySQL】插入语句汇总

热门文章

  1. zend studio一些常用配置
  2. LAMP环境搭建过程中出现的问题——基于VM虚拟CentOS-5.6
  3. usage: git remote add [options] name url -f, --fetch fetch the remote branches ...
  4. Django之form组件is_valid校验机制
  5. C语言原码、反码、补码
  6. spring cloud 学习(6) - zuul 微服务网关
  7. Struts(十四):通用标签-form表单
  8. WPF 浏览文件夹,获取其路径
  9. c#与获得文件夹路径,站点目录
  10. Linq lambda表达式经验总结