我是靠谱客的博主 从容口红,最近开发中收集的这篇文章主要介绍格雷码与二进制相互转换的verilog实现自然二进制码(Binary Code)转格雷码(Gray Code)格雷码(Gray Code)转自然二进制码(Binary Code)testbench & 测试结果,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
格雷码是一种错误最小化的编码方式,其相邻两编码之间仅有一位不同,因此有很强的抗干扰性。在 异步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) begin
gray[Width-1] <= bin[Width-1];
for(i=0; i<Width-1; i=i+1) begin
gray[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) begin
bin[Width-1] = gray[Width-1]; //注意要使用阻塞赋值,因为使用到了本轮计算的高位结果
for(i=Width-2; i>=0; i=i-1) begin
bin[i] = bin[i+1] ^ gray[i];
end
end
endmodule
RTL图如下:
testbench & 测试结果
Testbench文件如下:
`timescale 1ns / 1ps
module 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;
end
task change_bin1;
input [Width-1:0] num;
begin
bin1 <= num;
end
endtask
Binary2Gray #(.Width(Width))
Binary2Gray_inst(
.bin (bin1),
.gray (gray)
);
Gray2Binary #(.Width(Width))
Gray2Binary_inst(
.gray (gray),
.bin (bin2)
);
endmodule
仿真结果如下:
最后
以上就是从容口红为你收集整理的格雷码与二进制相互转换的verilog实现自然二进制码(Binary Code)转格雷码(Gray Code)格雷码(Gray Code)转自然二进制码(Binary Code)testbench & 测试结果的全部内容,希望文章能够帮你解决格雷码与二进制相互转换的verilog实现自然二进制码(Binary Code)转格雷码(Gray Code)格雷码(Gray Code)转自然二进制码(Binary Code)testbench & 测试结果所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复