一、什么是格雷码

格雷码,又叫循环二进制码或反射二进制码,格雷码是我们在工程中常会遇到的一种编码方式,它的基本的特点就是任意两个相邻的代码只有一位二进制数不同,这点在下面会详细讲解到。格雷码的基本特点就是任意两个相邻的代码只有一位二进制数不同,这点很重要。常用的二进制数与格雷码间的转换关系如下表:

二、二进制格雷码与自然二进制码的互换

1、二进制码转换成二进制格雷码

二进制码转换成二进制格雷码,其法则是保留二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。

verilog代码

`timescale 1ns / 1ns
module DecimaltoGray
#(parameter width=5
)
(
input wire clk,
input wire rst_n,
input wire decimal_load,
input wire [width-1:0] decimal,
output reg gray_finsh,
output reg [width-1:0] gray);
parameter [2:0]idle=3'd0;
parameter [2:0]load_decimal=3'd1;
parameter [2:0]finsh_gray=3'd2;reg [2:0] state;reg [width-1:0]decimal_reg1;always@(posedge clk or negedge rst_n) beginif(!rst_n)begindecimal_reg1<='d0;gray_finsh<=1'b0;endelse if(decimal_load) begindecimal_reg1<=decimal;gray<={decimal[width-1],decimal[width-1:1]^decimal[width-2:0]};gray_finsh<=1'b1;endelse begingray_finsh<=1'b0;decimal_reg1<=decimal_reg1;end
endendmodule

仿真代码

module graycode();
parameter width=5;
reg clk;
reg rst_n;
reg [width-1:0] decimal;
reg decimal_load;
wire gray_finsh;
wire [width-1:0] gray;
initial begin
clk<=1'b1;
rst_n<=1'b1;
#100
rst_n<=1'b0;
#100
rst_n<=1'b1;
#20
decimal_load<=1'b0;
decimal<=5'd1;
#20
decimal_load<=1'b0;
decimal<=5'd0;
#20
decimal_load<=1'b1;
decimal<=5'd1;
#20
decimal_load<=1'b0;
decimal<=5'd0;
#20
decimal_load<=1'b1;
decimal<=5'd2;
#20
decimal_load<=1'b0;
decimal<=5'd0;
#20
decimal_load<=1'b1;
decimal<=5'd3;
#20
decimal_load<=1'b0;
decimal<=5'd0;
#20
decimal_load<=1'b1;
decimal<=5'd4;
#20
decimal_load<=1'b0;
decimal<=5'd0;
#20
decimal_load<=1'b1;
decimal<=5'd5;
#20
decimal_load<=1'b0;
decimal<=5'd0;
#100
$finish;endalways #10 clk=~clk;DecimaltoGray
#(.width(width)
)
DecimaltoGray_inst(
.clk(clk),
.rst_n(rst_n),
.decimal_load(decimal_load),
.decimal(decimal),
.gray_finsh(gray_finsh),
.gray(gray)
);endmodule

仿真波形,使用vivado

2、二进制格雷码转换成二进制码

二进制格雷码转换成二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似

verilog代码

`timescale 1ns / 1ps
module GraytoDecimal#(parameter width=5
)
(
input wire clk,
input wire rst_n,
input wire gray_load,
input wire [width-1:0] gray,
output reg decimal_finsh,
output reg [width-1:0] decimal);reg [7:0]cnt;
parameter [2:0]idle=3'd0;
parameter [2:0]load_decimal=3'd1;
parameter [2:0]ing_gray=3'd2;
parameter [2:0]finsh_gray=3'd3;
reg [2:0] state;
reg [width-1:0] gray_reg;
reg [width-1:0] decimal_reg;always@(posedge clk or negedge rst_n) beginif(!rst_n)begingray_reg<='d0;decimal_reg<='d0;cnt<=8'd0;state<=idle;decimal_finsh<=1'b0;
end
else begincase(state)idle: begindecimal_finsh<=1'b0;if(gray_load)begingray_reg<=gray;state<=load_decimal;endendload_decimal:begincnt<=width-2;state<=ing_gray;decimal_reg[width-1]<=gray_reg[width-1];ending_gray:begincnt<=cnt-1;decimal_reg[cnt]<=decimal_reg[cnt+1]^gray_reg[cnt];if(cnt==8'd0) beginstate<=finsh_gray;endendfinsh_gray:begindecimal<=decimal_reg;decimal_finsh<=1'b1;state<=idle;enddefault:beginstate<=idle;endendcase
endendendmodule

仿真代码

`timescale 1ns / 1ns
module graycode();parameter width=5;
reg clk;
reg rst_n;
reg [width-1:0] gray;
reg gray_load;
wire decimal_finsh;
wire [width-1:0] decimal;
initial begin
clk<=1'b1;
rst_n<=1'b1;
#100
rst_n<=1'b0;
#100
rst_n<=1'b1;
#20
gray_load<=1'b1;
gray<=5'd0;
#20
gray_load<=1'b0;
gray<=5'd0;
#200
gray_load<=1'b1;
gray<=5'd1;
#20
gray_load<=1'b0;
gray<=5'd1;
#200
gray_load<=1'b1;
gray<=5'd2;
#20
gray_load<=1'b0;
gray<=5'd2;
#200
gray_load<=1'b1;
gray<=5'd3;
#20
gray_load<=1'b0;
gray<=5'd3;
#200
gray_load<=1'b1;
gray<=5'd4;
#20
gray_load<=1'b0;
gray<=5'd4;
#200
gray_load<=1'b1;
gray<=5'd5;
#20
gray_load<=1'b0;
gray<=5'd5;
#500
$finish;endalways #10 clk=~clk;GraytoDecimal
#(.width(width)
)
GraytoDecimal_inst(
.clk(clk),
.rst_n(rst_n),
.gray_load(gray_load),
.gray(gray),
.decimal_finsh(decimal_finsh),
.decimal(decimal)
);
endmodule

vivado仿真波形

由于格雷码求二进制需要逐位计算,因此需要周期比较长,本代码使用了一个状态机进行改过程计算。

格雷码与二进制的转换 verilog实现加仿真相关推荐

  1. 汇编实验:格雷码转二进制(ASCII码)的实现和调试

    实验说明 格雷码和二进制的转换 思路 为完成实验内容,可通过查表和格雷码计算两种方式完成,此处使用格雷码直接计算得出结果. SHL算术左移命令可将二进制数的高位存入CF,直接得出高位数据,通过异或操作 ...

  2. 数字电路基础知识——格雷码和二进制码的转换的算法和Verilog实现

    数字电路基础知识--格雷码和二进制码的转换的算法和Verilog实现 关于数字电路中的码制问题在这篇博客中已经做了详细分析, 数字电路基础知识--数字IC中的进制问题(原码,反码,补码以及各进制的转换 ...

  3. (132)FPGA面试题-Verilog实现格雷码转二进制

    1.1 FPGA面试题-Verilog实现格雷码转二进制 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-Verilog实现格雷码转二进制: 5)结束语. ...

  4. 格雷码转换成二进制c语言程序,格雷码与二进制的转换程序

    /* 格雷码与二进制的转换程序 * 本程序采用递推的方法进行推导,可以转换0~2147483647之间的数(1~31位) * 推导方式如下(以三位格雷码为例): * 序号 格雷码 格雷码实值 二进制码 ...

  5. 关于格雷码的规律、转换

    发现数电书中对于格雷码并没有很好地解释,这里保留下来所理解的知识供自己日后查看.这里主要说明排列规律和转换. 格雷码特点: 任意两个相邻的代码只有一位二进制数不同.并且首尾相连,属于循环码(这里我发现 ...

  6. 连环锁 POJ - 1832(格雷码与二进制)

    传送门 题意:给出九连环的两种状态,问第一种状态转化到第二种状态时至少需要多少步? 题解:这道题是与格雷码有关的题目,定义以及转化规则看这儿传送门 还有个好的视频解说传送门 由于九连环仅限的两种操作( ...

  7. BCD码与二进制的转换

    利用的数据结构:每列4bits 百位|十位|个位|二进制高4位|二进制低4位 二进制→BCD码 算法 从低到高依次判断个位.十位.百位这三列的数是否大于等于5,如果是则加3修正 左移整个数据结构1位 ...

  8. 格雷码、二进制码、BCD编码

    格雷码 格雷码(12页).pdf 格雷码(12页).pdf-其它文档类资源-CSDN下载 奇偶校验码(25页).pdf 奇偶校验码(25页).pdf-其它文档类资源-CSDN下载 经验:如何快速地写出 ...

  9. 数字逻辑代数基础——基本定理、公式与卡诺图化简法、格雷码、LSFR等

    复习一下数字电路,下次就省事直接看自己写的了. 目录 1.常用门电路图 2.逻辑代数的基本定理----化简时比较好用 3.化简逻辑函数时几个关键的公式(A'代表A的非) 4.格雷码与二进制的转换 5. ...

  10. 自然二进制码与格雷码相互转换【CSDN】

    自然二进制码与格雷码相互转换 一.格雷码简介 格雷码是由弗兰克·格雷于1953年发明,其主要特点是相邻编码值中间只有一个比特发生改变,又被称为循环码. 格雷码是一种无权码,采用绝对编码方式,典型格雷码 ...

最新文章

  1. 包含近 20 万本图书,OpenAI 级别的训练数据集上线
  2. 甲骨文 93 亿美元现金收购云计算商 NetSuite
  3. OA学习笔记-001-项目介绍
  4. Canvas知识点汇总
  5. 计算机网络实验(华为eNSP模拟器)——第十三章 VLAN注册协议(GVRP)
  6. Redis持久化(RDB 和 AOF)
  7. ImageButton单击切换按钮图片
  8. 程序路径查找 找到指定程序所在的目录
  9. Basis Cash公布V2路线图:将进行流动性迁移并将于Q3推出Basis Swap
  10. python使用ip代理抓取网页
  11. 中国能源统计年鉴面板数据-分省市主要污染物排放指标(包含ECXEL2020年中国统计年鉴)
  12. mysql8中文手册_mysql8 参考手册--mysql8 官方介绍
  13. 【历史上的今天】1 月 6 日:“互联网之子”的陨落;微软云服务先驱出生;世界上第一台 5G 笔记本
  14. 海南楼市充斥着传说 投机者必将自食其果
  15. “肆拾玖坊号”高铁冠名列车今日正式首发
  16. 注塑机网关 HFCL-EDGE
  17. Java Web完整学习记录
  18. 常见webshell工具
  19. SQL语句--关于赋值
  20. {转}tbl语言简介

热门文章

  1. bochs运行xp_使用Bochs模拟器瞬间安卓变XP教程
  2. 2018-10-8-如何安装-btsync
  3. mpp格式文用什么软件打开
  4. 关于虚拟机IP更改问题教给大家一个必杀技
  5. 数据统计分析(SPSS)【7】
  6. Javassist学习总结1
  7. java生成图表_java实现将数据生成图表至excel导出
  8. Materials studio中的简单聚合物的建立及盒子的弛豫
  9. php日历天气预报下载安装手机桌面_日历天气预报下载安装app_手机桌面时钟日历天气软件下载 安卓版 V7.5.1 - 罐头安卓网...
  10. Unity3D游戏开发之使用disunity提取Unity3D游戏资源