1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 二进制与格雷码相互转换

二进制与格雷码相互转换

时间:2019-02-09 09:58:19

相关推荐

二进制与格雷码相互转换

文章目录

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

前言

格雷码属于一种可靠性编码,是一种错误最小化的编码方式,因此格雷码在通信和测量技术中得到广泛应用。今天的任务是通过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_grayassign gray[i] = bin[i] ^ bin[i+1];//转换规则end endgenerateassign gray[PTR] = bin[PTR];//高位一致endmodule

编写Bin2Gray_tb.v测试文件,代码如下

`timescale 1ns/1nsmodule Bin2Gray_tb();parameter PTR = 3;//4位PTR+1reg [PTR:0] bin;//4位二进制wire [PTR:0] gray;//4位格雷码always #1 bin = bin + 1'b1;//二进制不断加1initial beginbin = {(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_grayassign gray[i] = bin[i] ^ bin[i+1];//转换规则end endgenerateassign 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_grayassign bin[i] = gray[i] ^ bin[i+1];//转换规则end endgenerateassign 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/1nsmodule Gray2Bin_tb();parameter PTR = 3;//4位PTR+1reg [PTR:0] bin;//4位二进制wire [PTR:0] bin_same;//转换后的二进制always #1 bin = bin + 1'b1;//二进制不断加1initial beginbin = {(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!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。