zoukankan      html  css  js  c++  java
  • 《FPGA全程进阶---实战演练》第十二章 二进制码与格雷码PK

      大家在写程序的时候,可能会听闻,什么独热码,什么格雷码,什么二进制码等等,本节意在解释这几种编码之间的区别和优势以及用verilog怎么去实现,下面先介绍这几种编码的区别。

    1 基础理论部分

    1.1 独热码

      独热码,在英文文献中称做 one-hot code, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。

      如,有十六个状态的独热码状态编码应该是:0000000000000001,0000000000000010,0000000000000100,0000000000001000,0000000000010000,0000000000100000 ,……,10000000000000000。但是通常我们为了方便书写,将二进制简化为十六进制表示(从右往左每四位二进制位用一位十六进制数表示),那么,以上十六状态的独热码可以表示成0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, ……, 0x8000。

    1.2 格雷码

      在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。

    1.3 二进制码

      二进制代码:由两个基本字符'0'、'1'组成的代码。其中,码元:"一位"二进制代码。码字:N个码元可以组成的不同组合,任意一个组合称一个码字。

    1.4 二进制编和格雷码利弊

      二进制编码、格雷码编码使用最少的触发器,消耗较多的组合逻辑,而独热码编码反之。独热码编码的最大优势在于状态比较时仅仅需要比较一个位,从而一定程度上简化了译码逻辑。虽然在需要表示同样的状态数时,独热编码占用较多的位,也就是消耗较多的触发器,但这些额外触发器占用的面积可与译码电路省下来的面积相抵消。

      由于CPLD更多地提供组合逻辑资源,而FPGA更多地提供触发器资源,所以CPLD多使用gray-code,而FPGA多使用one-hot编码。另一方面,对于小型设计使用gray-code和binary编码更有效,而大型状态机使用one-hot更高效。

      关于独热码,我们在使用状态机的时候,会详细解释。为了更进一步说明二进制码和格雷码之间的关系,可以查看下图12.1。

    方法一:

    wps3066.tmp

    图12.1 二进制码与独热码

      上述的方法可以称为递归法,从0~7的高位都是0,后8~15的高位都是1,那么由二进制怎么去实现格雷码,如下图12.2所示。

    方法二:适合于编程实现

    wps3086.tmp

    图12.2 计算格式

      也即对原位进行移位,然后和原位进行求抑或操作。

      那么格雷码怎么去实现二进制呢?且看下图12.3解释:

    wps3097.tmp

    wps30A8.tmp

    图12.3

      由上图可以分析得出,最高位是保持不变的,然后以后每一位都要和前几位进行求异或操作。下面我们就用verilog来实现。

    2 Verilog代码实现部分

    2.1 二进制转格雷码

    讲解最重要的代码部分,如图12.4

    wps30B8.tmp

    图12.4 代码实现部分

      最重要的代码一行搞定。请大家看懂。

    2.2 格雷码转二进制

      让大家感受一下FPGA的并行的魅力,重要代码如图12.5所示,利用FPGA的并行加速,可以实现其他CPU不能比拟的速度。

    wps30B9.tmp

    图12.5 转换实现部分

    3 Modelsim仿真部分

      部分重要代码如图12.6所示

    wps30CA.tmp

    图12.6 仿真程序

      将输入数据封装成一个任务,然后在initial中直接调用任务即可,但要注意,data_init为输入数据的初始化,一定要放在task_reset复位信号的前面,这一点不容忽视。

    图12.7为binary2gray仿真的波形。

    wps30CB.tmp

    图12.7 仿真波形

      关于板级仿真,大家可以去利用四位LED或者数码管去实现,这里不再赘述。

      图12.8为testbench代码部分,gray2binary

    wps30DC.tmp

    图12.8 代码实现部分

    图12.9为gray2binary仿真的波形

    wps30EC.tmp

    图12.9 仿真波形

  • 相关阅读:
    面向对象———类
    二维数组简单使用
    数组——算法
    第6章 约束满足问题CSP
    第5章 对抗搜索
    第4章 超越经典的搜索
    140303 命令行选项 ccf
    150904 高速公路 ccf
    170304 地铁修建 ccf
    vector容器
  • 原文地址:https://www.cnblogs.com/raymon-tec/p/5136985.html
Copyright © 2011-2022 走看看