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

时间:2024-04-13 18:17:05

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

     先看看这三种编码的定义

二进制码

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

格雷码

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

独热码

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

下面看看十进制数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中显示波形如下:FPGA学习笔记---二进制码、独热码、格雷码分析对比

 

 

展开二进制码波形

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

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

展开独热码波形

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

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

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

展开格雷码波形

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

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

展开全部波形

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

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

二进制码

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

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

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

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

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

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

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

独热码

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

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

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

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

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

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

格雷码

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

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

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

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

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

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

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

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