我是靠谱客的博主 踏实电话,最近开发中收集的这篇文章主要介绍二进制与格雷码相互转换前言一、二进制转格雷码二、格雷码转二进制总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • 一、二进制转格雷码
  • 二、格雷码转二进制
  • 总结


前言

  格雷码属于一种可靠性编码,是一种错误最小化的编码方式,因此格雷码在通信和测量技术中得到广泛应用。今天的任务是通过verilog实现二进制和格雷码之间的相互转换。

在这里插入图片描述

一、二进制转格雷码

  1. 原理图
    在这里插入图片描述
  2. 编写Bin2Gray.v代码,代码如下
module Bin2Gray#(parameter PTR=3)(

	input wire [PTR : 0] bin,//输入二进制
	output wire [PTR : 0] gray//输出格雷码
);
	
	generate//generate for 固定使用
		genvar i;
		for(i=0; i < PTR; i = i+1)begin:bin_gray
			assign gray[i] = bin[i] ^ bin[i+1];//转换规则
		end 
	endgenerate
	assign gray[PTR] = bin[PTR];//高位一致
endmodule 
  1. 编写Bin2Gray_tb.v测试文件,代码如下
`timescale 1ns/1ns
module Bin2Gray_tb();
parameter PTR = 3;//4位PTR+1
reg  [PTR:0]  bin;//4位二进制
wire [PTR:0]  gray;//4位格雷码

always #1 bin = bin + 1'b1;//二进制不断加1

initial begin
	bin = {(PTR+1){1'b0}};//初始化
	#((PTR+1)**2);//观察,位宽的平方
	$stop;//停止
end 

Bin2Gray#(PTR)	u_Bin2Gray(
.bin  (bin),

.gray (gray)
);
endmodule 
  1. 仿真结果

在这里插入图片描述

二、格雷码转二进制

  1. 原理图

在这里插入图片描述

  1. 编写Bin2Gray.v文件,代码与第一章节中的Bin2Gray.v文件一致,把二进制转换为格雷码,代码如下
module Bin2Gray#(parameter PTR=3)(

	input wire [PTR : 0] bin,//输入二进制
	output wire [PTR : 0] gray//输出格雷码
);
	
	generate//generate for 固定使用
		genvar i;
		for(i=0; i < PTR; i = i+1)begin:bin_gray
			assign gray[i] = bin[i] ^ bin[i+1];//转换规则
		end 
	endgenerate
	assign gray[PTR] = bin[PTR];//高位一致
endmodule 
  1. 编写Gray2Bin.v文件,把格雷码转换为二进制,代码如下
module Gray2Bin#(parameter PTR=3)(

	input wire [PTR : 0] gray,//输入格雷码
	output wire [PTR : 0] bin//输出二进制
);
	
	generate//generate for 固定使用
		genvar i;
		for(i=0; i < PTR; i = i+1)begin:bin_gray
			assign bin[i] = gray[i] ^ bin[i+1];//转换规则
		end 
	endgenerate
	assign bin[PTR] = gray[PTR];//高位一致
endmodule 


  1. Bin2Gray2Bin.v文件,调用2、3模块,代码如下
module Bin2Gray2Bin#(parameter PTR=3)(
	input wire [PTR:0] bin,//输入二进制
	
	output wire [PTR:0] bin_same//输出格雷码转换后的二进制
);

wire [PTR:0] gray;//格雷码转换后的二进制

//实例化二进制转格雷码模块,输出格雷码
Bin2Gray#(PTR)	u_Bin2Gray(

.bin	(bin),//输入二进制

.gray	(gray)//输出格雷码
);

//实例化格雷码转二进制模块,观察bin和bin_same是否一致
Gray2Bin#(PTR)	u_Gray2Bin(
.gray	(gray),

.bin (bin_same)
);
endmodule 
  1. 编写Gray2Bin_tb.v测试文件,测试4中的模块,观看输入输出信号是否一致,代码如下
`timescale 1ns/1ns
module Gray2Bin_tb();
parameter PTR = 3;//4位PTR+1
reg  [PTR:0]  bin;//4位二进制
wire [PTR:0]  bin_same;//转换后的二进制
always #1 bin = bin + 1'b1;//二进制不断加1

initial begin
	bin = {(PTR+1){1'b0}};//初始化
	#((PTR+1)**2);//观察,位宽的平方
	$stop;//停止
end 


Bin2Gray2Bin#(PTR) u_Bin2Gray2Bin(
.bin		(bin),//输入二进制
			
.bin_same(bin_same)//输出格雷码转换后的二进制
);

endmodule 
  1. 仿真结果

在这里插入图片描述
  结果显示,完美!

总结

  Who is gray? Don’t talk too much about gray,show me the code and simmulation!

最后

以上就是踏实电话为你收集整理的二进制与格雷码相互转换前言一、二进制转格雷码二、格雷码转二进制总结的全部内容,希望文章能够帮你解决二进制与格雷码相互转换前言一、二进制转格雷码二、格雷码转二进制总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部