概述
文章目录
- 前言
- 一、二进制转格雷码
- 二、格雷码转二进制
- 总结
前言
格雷码属于一种可靠性编码,是一种错误最小化的编码方式,因此格雷码在通信和测量技术中得到广泛应用。今天的任务是通过verilog实现二进制和格雷码之间的相互转换。
一、二进制转格雷码
- 原理图
- 编写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
- 编写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
- 仿真结果
二、格雷码转二进制
- 原理图
- 编写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
- 编写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
- 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
- 编写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
- 仿真结果
结果显示,完美!
总结
Who is gray? Don’t talk too much about gray,show me the code and simmulation!
最后
以上就是踏实电话为你收集整理的二进制与格雷码相互转换前言一、二进制转格雷码二、格雷码转二进制总结的全部内容,希望文章能够帮你解决二进制与格雷码相互转换前言一、二进制转格雷码二、格雷码转二进制总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复