格雷码是一种错误最小化的编码方式,其相邻两编码之间仅有一位不同,因此有很强的抗干扰性。在 异步FIFO 中就使用到了 Gray Code。本博文给出自然二进制码(Binary Code)与格雷码(Gray Code)相互转换的 Verilog 实现。

自然二进制码(Binary Code)转格雷码(Gray Code)

/* * file     : Gray2Binary.v* author    : 今朝无言* date        : 2022-10-01*/
module Binary2Gray(
input       [Width-1:0] bin,
output  reg [Width-1:0] gray
);
parameter Width = 8;   //二进制与格雷码位宽
// 对于二进制码 B_{n-1},B_{n-2},...B_1,B_0
// 格雷码 G_{n-1},G_{n-2},...,G_1,G_0
// 对于最高位,G_{n-1} = B_{n-1}
// 对于其他位,G_i = B_{i+1} ^ B_i,i=0,1,2,...,n-2
// 其实最高位相当于 G_{n-1} = B_n ^ B_{n-1},而 B_n=0,因此 G_{n-1} = 0 ^ B_{n-1} = B_{n-1}integer  i;
always @(bin) begingray[Width-1]   <= bin[Width-1];for(i=0; i<Width-1; i=i+1) begingray[i]       <= bin[i+1] ^ bin[i];end
end// 下方写法相同
//assign gray = (bin >> 1) ^ bin;endmodule

  RTL图如下:

格雷码(Gray Code)转自然二进制码(Binary Code)

/* * file     : Gray2Binary.v* author    : 今朝无言* date        : 2022-10-01*/
module Gray2Binary(
input       [Width-1:0] gray,
output  reg [Width-1:0] bin
);
parameter Width = 8;   //二进制与格雷码位宽
// 对于二进制码 B_{n-1},B_{n-2},...B_1,B_0
// 格雷码 G_{n-1},G_{n-2},...,G_1,G_0
// 对于最高位,B_{n-1} = G_{n-1}
// 对于其他位,B_i = G_i ^ B_{i+1},i=0,1,2,...,n-2
// 最高位相当于 B_{n-1} = G_{n-1} ^ B_n,而 B_n=0,因此 B_{n-1} = G_{n-1} ^ 0 = G_{n-1}integer i;
always @(gray) beginbin[Width-1]   = gray[Width-1];       //注意要使用阻塞赋值,因为使用到了本轮计算的高位结果for(i=Width-2; i>=0; i=i-1) beginbin[i]     = bin[i+1] ^ gray[i];end
endendmodule

  RTL图如下:

testbench & 测试结果

  Testbench文件如下:

`timescale 1ns / 1psmodule gray_tb;
parameter Width = 8;reg        [Width-1:0] bin1;
wire    [Width-1:0] gray;
wire    [Width-1:0] bin2;initial begin#100;change_bin1(5);#100;change_bin1(127);#100;$stop;
endtask change_bin1;input   [Width-1:0] num;beginbin1   <= num;end
endtaskBinary2Gray #(.Width(Width))
Binary2Gray_inst(.bin   (bin1),.gray    (gray)
);Gray2Binary #(.Width(Width))
Gray2Binary_inst(.gray  (gray),.bin (bin2)
);endmodule

仿真结果如下:

格雷码与二进制相互转换的verilog实现相关推荐

  1. (132)FPGA面试题-Verilog实现格雷码转二进制

    1.1 FPGA面试题-Verilog实现格雷码转二进制 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-Verilog实现格雷码转二进制: 5)结束语. ...

  2. 格雷码转换成二进制c语言程序,格雷码与二进制的转换程序

    /* 格雷码与二进制的转换程序 * 本程序采用递推的方法进行推导,可以转换0~2147483647之间的数(1~31位) * 推导方式如下(以三位格雷码为例): * 序号 格雷码 格雷码实值 二进制码 ...

  3. 汇编实验:格雷码转二进制(ASCII码)的实现和调试

    实验说明 格雷码和二进制的转换 思路 为完成实验内容,可通过查表和格雷码计算两种方式完成,此处使用格雷码直接计算得出结果. SHL算术左移命令可将二进制数的高位存入CF,直接得出高位数据,通过异或操作 ...

  4. 二进制与格雷码之间的转换的Verilog实现(更多一点的讨论)

    目录 前言 二进制码转换为格雷码的方法 格雷码转换为二进制码的过程 更多一点讨论之generate for 更多一点讨论之for 最后对格雷码的介绍 前言 以前的博客也有写这方面的内容,只是没有显式的 ...

  5. 连环锁 POJ - 1832(格雷码与二进制)

    传送门 题意:给出九连环的两种状态,问第一种状态转化到第二种状态时至少需要多少步? 题解:这道题是与格雷码有关的题目,定义以及转化规则看这儿传送门 还有个好的视频解说传送门 由于九连环仅限的两种操作( ...

  6. Verilog中状态机编码方式的选择:二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码

    一般的,在Verilog中最常用的编码方式有二进制编码(Binary).格雷码(Gray-code)编码.独热码(One-hot)编码. 二进制码和格雷码是压缩状态编码. 若使用格雷编码,则相邻状态转 ...

  7. 数字电路基础知识——格雷码和二进制码的转换的算法和Verilog实现

    数字电路基础知识--格雷码和二进制码的转换的算法和Verilog实现 关于数字电路中的码制问题在这篇博客中已经做了详细分析, 数字电路基础知识--数字IC中的进制问题(原码,反码,补码以及各进制的转换 ...

  8. chisel格雷码二进制转换

    一.格雷码简介 格雷码是一个叫弗兰克*格雷的人在 1953 年发明的,最初用于通信.格雷码是一种循环二进制码或者叫作反射二进制码.格雷码的特点是从一个数变为相邻的一个数时,只有一个数据位发生跳变,由于 ...

  9. 自然二进制码与格雷码相互转换【CSDN】

    自然二进制码与格雷码相互转换 一.格雷码简介 格雷码是由弗兰克·格雷于1953年发明,其主要特点是相邻编码值中间只有一个比特发生改变,又被称为循环码. 格雷码是一种无权码,采用绝对编码方式,典型格雷码 ...

  10. 二进制和格雷码转换方法及程序

    二进制和格雷码转换方法及程序 1 格雷码介绍 2 二进制转格雷码 3 格雷码转二进制 1 格雷码介绍 格雷码(Gray code)是1880年由法国工程师Jean-Maurice-Emlle Baud ...

最新文章

  1. 厉害了我的VR!老师们用VR来教历史
  2. Android多媒体之SoundPool
  3. 近世代数--群同构--第三同构定理
  4. java堆外内存6_Java堆外内存排查小结
  5. Oracle10g下载地址
  6. Numpy基础(part2)--ndarray数组
  7. removeTask
  8. Html5 Video 节点
  9. NOIP模拟测试38「金·斯诺·赤」
  10. 云上赶年集、品年味,阿里云让云上中国年“春节不打烊”
  11. iPhone 12再陷“信号门”:用户称每天需多次重启恢复;蚂蚁集团打新资金退款如期到账;Mutt 2.0 发布|极客头条
  12. 仿英雄联盟网页HTML代码 学生网页设计与制作期末作业下载 大学生网页设计与制作成品下载 DW游戏介绍网页作业代码下载
  13. UEditor 编辑器的下载与安装
  14. linux红帽7修改时间,CentOS 7 and RedHat 7 时间同步即chrony服务配置
  15. java识别答题卡纸_opencv 识别答题卡
  16. 客户成功的起源——SaaS(软件即服务)
  17. 非淡泊无以明志,非宁静无以致远
  18. TiDB简单介绍 以及 MySQL与TiDB查询性能对比实验
  19. loj6089 小 Y 的背包计数问题
  20. PDF是如何在线分割的?

热门文章

  1. 推荐几个好用的 html5 游戏源码下载网站
  2. java分布式特点_java分布式架构是什么?分布式架构的优缺点有哪些?
  3. 三星手机怎么关掉android设置向导,三星手机自动关机怎么设置
  4. 仓储管理毕业论文【含matlab优化算法】
  5. java语言搭建app后台入门
  6. 英语计算机简历模板,计算机研究生英文简历模板
  7. 电子名片怎么制作,制作一张电子名片难吗?
  8. PYTHON Image Module中Pix[x,y]详解
  9. Java Web学习(1):Web应用程序与Web服务器
  10. 开源3D游戏引擎Irrlicht简介