二进制码与格雷码的相互转换原理与Verilog实现

news2024/10/5 14:44:44

二进制码与格雷码的相互转换原理与Verilog实现

  • 一、写在前面
  • 二、二进制码与格雷码的相互转换
    • 2.1 二进制码转格雷码原理
    • 2.2 异或运算的特性
    • 2.3 格雷码转二进制码原理
  • 三、二进制码与格雷码相互转换的Verilog实现
  • 四、仿真验证
  • 五、写在后面

一、写在前面

  二进制码是一种基于二进制数系统的编码方式,使用 0 和 1 两个数字来表示数字信号。例如,数字 7 在二进制码中表示为0111。
  而格雷码是一种二进制反射码,也称为格雷反码。格雷码中的相邻两个码位只有一个位的变化,可以减少数字信号传输过程中的传输错误率。例如,数字 7 在格雷码中表示为 0100。
  在数字电路中,格雷码的编码方式可以大大简化电路的设计。由于相邻两个码位只有一个位的变化,因此在使用格雷码编码时,只需要使用异或门就可以实现数字信号的编码和解码。而使用二进制码进行编码时,需要使用更多的逻辑门才能实现编码和解码。

二、二进制码与格雷码的相互转换

2.1 二进制码转格雷码原理

  假设n比特的二进制码为 B n − 1 B n − 2 . . . B 1 B 0 B_{n-1}B_{n-2}...B_1B_0 Bn1Bn2...B1B0,而转换后的n比特格雷码为 G n − 1 G n − 2 . . . G 1 G 0 G_{n-1}G_{n-2}...G_1G_0 Gn1Gn2...G1G0,二进制码转格雷码的法则如下:格雷码的最高位等于二进制码的最高位,而格雷码得次高位等于二进制码的最高位与二进制码次高位的异或结果,格雷码的其他位与次高位的求法相类似。
G n − 1 = B n − 1 G i = B i + 1 ⊕ B i \begin{matrix} G_{n-1}=B_{n-1} \\ \\G_{i}=B_{i+1}\oplus B_{i} \end{matrix} Gn1=Bn1Gi=Bi+1Bi
  以4比特的二进制码转格雷码为例,如下图所示。

在这里插入图片描述

2.2 异或运算的特性

  在《数字电子技术基础》中,我们学过异或运算,异或运算有一点特性很重要。如果 A ⊕ B = C A \oplus B=C AB=C,则 A ⊕ C = B A \oplus C=B AC=B B ⊕ C = A B \oplus C=A BC=A,如下图所示。

在这里插入图片描述

2.3 格雷码转二进制码原理

  那么,根据异或运算的特性,我们可以对二进制转格雷码的法则进行变化,得到格雷码转二进制的公式,如下:
B n − 1 = G n − 1 B i = B i + 1 ⊕ G i \begin{matrix} B_{n-1}=G_{n-1} \\ \\B_{i}=B_{i+1}\oplus G_{i} \end{matrix} Bn1=Gn1Bi=Bi+1Gi
  即二进制码的最高位等于格雷码的最高位,而二进制码的次高位等于二进制码的最高位与格雷码的次高位异或结果。而二进制码的其他位与二进制码的次高位求法相似。
  以4比特的格雷码转二进制码为例,如下图所示。

在这里插入图片描述

三、二进制码与格雷码相互转换的Verilog实现

  根据上述的二进制码转格雷码与格雷码转二进制码的原理,可以编写Verilog代码,如下。

module BinaryGrayConvert
#(
  parameter DATA_WIDTH  = 8 //二进制码/格雷码位宽
)
(
  input		[DATA_WIDTH-1:0]		binary_in , //二进制码输入
  input		[DATA_WIDTH-1:0]		gray_in   , //格雷码输入
  output	[DATA_WIDTH-1:0]		binary_out, //二进制码输出
  output	[DATA_WIDTH-1:0]		gray_out    //格雷码输出
);

//二进制码转格雷码
assign gray_out = binary_in ^ (binary_in>>1);

//格雷码转二进制码
genvar i;
generate
  for(i=0;i<DATA_WIDTH;i=i+1) begin:gray2binary
    if(i==DATA_WIDTH-1)
	  assign binary_out[i] = gray_in[i];
	else
	  assign binary_out[i] = binary_out[i+1] ^ gray_in[i];
  end
endgenerate

endmodule

四、仿真验证

  对该二进制码与格雷码的相互转换模块编写TestBench进行仿真。

`timescale 1ns/1ns	//时间单位/精度

module tb_BinaryGrayConvert();

parameter DATA_WIDTH  = 8;

reg     clk,rst_n;
reg 	[DATA_WIDTH-1:0]		binary_in ; //二进制码输入
reg 	[DATA_WIDTH-1:0]		gray_in   ; //格雷码输入
wire	[DATA_WIDTH-1:0]		binary_out; //二进制码输出
wire	[DATA_WIDTH-1:0]		gray_out  ; //格雷码输出

initial begin
  clk = 1'b0;
  rst_n <= 1'b0;
  #20 
  rst_n <= 1'b1;
end

always #10 clk = ~clk;

always @(posedge clk or negedge rst_n)
  if(!rst_n) begin
    binary_in <= 8'b0000_0000;
    gray_in <= 8'b0000_0000;	
  end
  else begin
    binary_in <= binary_in + 1'b1;
    gray_in <= gray_in + 1'b1;	
  end
    
BinaryGrayConvert
#(
  .DATA_WIDTH(DATA_WIDTH) //二进制码/格雷码位宽
)
BinaryGrayConvert_inst
(
  .binary_in (binary_in ), //二进制码输入
  .gray_in   (gray_in   ), //格雷码输入
  .binary_out(binary_out), //二进制码输出
  .gray_out  (gray_out  )  //格雷码输出
);

endmodule

  仿真结果如下图所示,观察波形,以 ( 00000101 ) B i n a r y − > ( 00000111 ) G r a y (00000101)_{Binary} -> (00000111)_{Gray} (00000101)Binary>(00000111)Gray ( 00000101 ) G r a y − > ( 00000110 ) B i n a r y (00000101)_{Gray} -> (00000110)_{Binary} (00000101)Gray>(00000110)Binary为例,可见转换正确,符合我们预期实现的二进制码与格雷码的相互转换。

在这里插入图片描述

五、写在后面

  在本文中,我们学习了二进制码与格雷码相互转换的原理,并使用Verilog实现,同时编写TestBench文件对其进行仿真,验证模块的正确性。如果有疑义的地方欢迎评论区友好探讨学习!!!!!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/464068.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RibbitMQ之RabbitMQ的介绍与安装

RabbitMQ的介绍与安装 1. MQ 的相关概念1.1 MQ 的概念1.2 MQ 的作用1.3 MQ 的分类1.3.1 ActiveMQ1.3.2 Kafka1.3.3 RocketMQ1.3.4 RabbitMQ 1.4 MQ 的选择 2. RabbitMQ2.1 RabbitMQ 的概念2.2 RabibitMQ 的四大核心2.3 RabbitMQ 的核心部分2.4 RabbitMQ 名词介绍2.5 安装 Rabbi…

数学建模第五天:数学建模算法篇之层次分析法AHP

目录 一、前言 1、例题 2、层次分析法用途 二、层次分析法步骤 1、建立层次结构图 2、构造两两比较矩阵 3、确定相对权重向量 ①特征根法 ②和法 4、一致性检验 5、计算层次总排序权值和一致性检验 一、前言 1、例题 有大学生刘昊、小王、阿三、蛋仔四人&#xff0…

闪电加密和隐藏加密文件夹忘记密码怎么办?

闪电加密和隐藏加密是文件夹加密超级大师的两种文件夹加密类型&#xff0c;它们都拥有超快的加密算法&#xff0c;可以瞬间加密超大文件夹。那么这两种文件夹加密类型忘记密码该怎么办呢&#xff1f;下面我们一起来了解一下吧。 闪电加密和隐藏加密文件夹找回密码 首先&#x…

HashMap的扩容机制、初始化容量大小的选择、容量为什么是2的次幂

前置知识 先来看看HashMap中的成员属性 解释&#xff1a; size当前的容器中Entry的数量&#xff0c;也就是当前K-V的数量loadFactory装载因子&#xff0c;用来衡量HashMap满的程度&#xff0c;loadFactory的默认值是0.75threshold临界值&#xff0c;当实际KV数量超过threshol…

ChatGPT实现语义分析情感分类

语义分析情感分类 我们从开源社区找到了中科院谭松波博士整理的携程网酒店评论数据集(https://raw.githubusercontent.com/SophonPlus/ChineseNlpCorpus/master/datasets/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv)。一共七千余条数据&#xff0c;包括 label 和 review …

Domino中的时间日期格式设置

大家好&#xff0c;才是真的好。 今天我们谈管理运维问题&#xff0c;相对于前面的技术来说&#xff0c;会简单很多。 就是Domino服务器运行时的时间日期显示问题。这和你的邮件、应用等里面的文档时间日期也有关系。 简单来说&#xff0c;在默认的设置情况下&#xff0c;Do…

java——最小的K个数

题目链接 牛客在线oj题——最小的K个数 题目描述 给定一个长度为 n 的可能有重复值的数组&#xff0c;找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字&#xff0c;则最小的4个数字是1,2,3,4(任意顺序皆可)。 数据范围&#xff1a;0≤k,n≤10000&…

【刷题之路】LeetCode 206. 反转链表

【刷题之路】LeetCode 206. 反转链表 一、题目描述二、解题1、方法1——改变指针方向1.1、思路分析1.2、代码实现 2、方法2——头插到新链表2.1、思路分析2.2、代码实现 一、题目描述 原题连接&#xff1a; 206. 反转链表 题目描述&#xff1a; 给你单链表的头节点 head &…

4月26号软件更新资讯合集....

Tpflow V7.0.2&#xff0c;PHP 工作流引擎新版发布 ​欢迎使用 Tpflow V7.0.1 工作流引擎 TpFlow 工作流引擎是一套规范化的流程管理系统&#xff0c;基于业务而驱动系统生命力的一套引擎。彻底释放整个信息管理系统的的活力&#xff0c;让系统更具可用性&#xff0c;智能应用型…

设计模式天花板,详解23种设计模式+7大设计原则

这份文档完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起&#xff0c;包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等&#xff0c;让读者能系统、完整、准确地掌握每个模式&#xff0c;培养正确的“设计观”;中高级内容则深…

速速报名| 米尔将精彩亮相2023 STM32中国峰会暨粉丝狂欢节

STM32峰会已成功举办五届&#xff0c;第六届将于今年5月12日-13日在深圳重磅回归&#xff01;往年&#xff0c;米尔电子都作为官方合作伙伴&#xff0c;出席演讲并展出公司配套的核心板和开发板。 今年&#xff0c;STM32峰会更是集齐了值得你「点赞、收藏、转发」的一键三连精…

漫画 | Linux之父:财务自由以后,我失眠了!

前言&#xff1a;今年是Linux诞生的30周年&#xff01; 1991年的8月&#xff0c; Linus在新闻组中公布了他正在开发的一个免费的操作系统&#xff0c;这也是以后风靡世界的Linux操作系统的雏形。 今天翻到这篇漫画&#xff0c;看到Linux的诞生过程&#xff0c;很是感慨&#x…

FPGA实现10G万兆网UDP通信 10G Ethernet Subsystem替代网络PHY芯片 提供工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、详细设计方案传统 FPGA UDP 方案本 FPGA 10G UDP 方案(牛逼)10G Ethernet 框图10G Ethernet 发送解析10G Ethernet 接收解析10G Ethernet 寄存器配置10G Ethernet UI 配置 4、vivado工程详解5、上板调试验证并演示ping功能测试数据收发测…

新手必看:蓝牙耳机什么牌子的好用?2023年蓝牙耳机排名

上班通勤、健身运动、游戏娱乐都离不开蓝牙耳机&#xff0c;蓝牙耳机市场这几年逐渐饱和&#xff0c;涌现了大量的品牌&#xff0c;蓝牙耳机什么牌子的好用成为热议话题&#xff0c;新手们在挑选时会参考排行榜&#xff0c;小编接下来将盘点2023年蓝牙耳机排名。 ●JEET Air 2蓝…

【服务器数据恢复】HP MSA存储raid5数据恢复案例

服务器故障环境&#xff1a; HP MSA某型号存储&#xff0c;8块SAS的硬盘组建RAID5磁盘阵列&#xff0c;其中包括1块热备盘。故障存储中基于该RAID组的LUN均分配给HP-Unix小机使用&#xff0c;上层做的LVM逻辑卷&#xff0c;存储的数据为Oracle数据库及OA服务端。 服务器故障&a…

PyCharm更换pip源、模块安装、PyCharm依赖包导入导出

一、Pycharm更换安装源 在下载安装好Pycharm后&#xff0c;一个在实际编程开发过程中非常重要的问题是第三方库添加&#xff0c;然而Python默认的源网络速度有点慢&#xff0c;因此&#xff0c;我们常常需要做的是更换Pycharm的安装源。 在当前最新版&#xff08;2022.03版&…

[排序算法]桶排序

参考&#xff1a;《漫画算法-小灰的算法之旅》 目录 一、什么是桶排序 二、桶排序的工作原理 三、代码 四、时间复杂度和空间复杂度 一、什么是桶排序 桶排序是一种线性时间的排序算法&#xff0c;它类似于基数排序所创建的统计数组。桶排序需要创建若干个桶来协助排序。 …

企业数字化管理中,数据治理到底怎么“治”

随着信息化、数字化的理念、技术及其应用在社会的方方面面进行扩散&#xff0c;数据的规模和丰富程度已经达到了一个新的高度&#xff0c;所以当下如何更进一步利用好数据&#xff0c;充分发挥数据的价值&#xff0c;将其真正变为高质量的数据资产成为了企业要面对的重要问题&a…

Matlab高光谱遥感、数据处理与混合像元分解及典型案例

站在学员的角度去理解“高光谱”&#xff0c;用大家能听的懂的语言去讲述高光谱的基本概念和理论&#xff0c;帮助学员深入理解这项技术的底层科学机理。方法篇&#xff0c;将高光谱技术与MATLAB工具结合起来&#xff0c;采用MATLAB丰富的工具箱&#xff0c;快速复现高光谱数据…

爱快 Docker NodeRed Tcp服务器远程连接试验

有一台基于4415软路由安装的ubuntu server系统&#xff0c;在Ubuntu上通过Docker安装了NodeRed。ubuntu通过爱快硬路由与外网连接。爱快硬路由通过动态域名和端口映射实现远程访问ubuntu。 平时通过如下命令运行NodeRed镜像&#xff1a; docker run -it --rm -e TZ"Asia/…