格雷码与二进制的转换 verilog实现加仿真
一、什么是格雷码
格雷码,又叫循环二进制码或反射二进制码,格雷码是我们在工程中常会遇到的一种编码方式,它的基本的特点就是任意两个相邻的代码只有一位二进制数不同,这点在下面会详细讲解到。格雷码的基本特点就是任意两个相邻的代码只有一位二进制数不同,这点很重要。常用的二进制数与格雷码间的转换关系如下表:
二、二进制格雷码与自然二进制码的互换
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实现加仿真相关推荐
- 汇编实验:格雷码转二进制(ASCII码)的实现和调试
实验说明 格雷码和二进制的转换 思路 为完成实验内容,可通过查表和格雷码计算两种方式完成,此处使用格雷码直接计算得出结果. SHL算术左移命令可将二进制数的高位存入CF,直接得出高位数据,通过异或操作 ...
- 数字电路基础知识——格雷码和二进制码的转换的算法和Verilog实现
数字电路基础知识--格雷码和二进制码的转换的算法和Verilog实现 关于数字电路中的码制问题在这篇博客中已经做了详细分析, 数字电路基础知识--数字IC中的进制问题(原码,反码,补码以及各进制的转换 ...
- (132)FPGA面试题-Verilog实现格雷码转二进制
1.1 FPGA面试题-Verilog实现格雷码转二进制 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-Verilog实现格雷码转二进制: 5)结束语. ...
- 格雷码转换成二进制c语言程序,格雷码与二进制的转换程序
/* 格雷码与二进制的转换程序 * 本程序采用递推的方法进行推导,可以转换0~2147483647之间的数(1~31位) * 推导方式如下(以三位格雷码为例): * 序号 格雷码 格雷码实值 二进制码 ...
- 关于格雷码的规律、转换
发现数电书中对于格雷码并没有很好地解释,这里保留下来所理解的知识供自己日后查看.这里主要说明排列规律和转换. 格雷码特点: 任意两个相邻的代码只有一位二进制数不同.并且首尾相连,属于循环码(这里我发现 ...
- 连环锁 POJ - 1832(格雷码与二进制)
传送门 题意:给出九连环的两种状态,问第一种状态转化到第二种状态时至少需要多少步? 题解:这道题是与格雷码有关的题目,定义以及转化规则看这儿传送门 还有个好的视频解说传送门 由于九连环仅限的两种操作( ...
- BCD码与二进制的转换
利用的数据结构:每列4bits 百位|十位|个位|二进制高4位|二进制低4位 二进制→BCD码 算法 从低到高依次判断个位.十位.百位这三列的数是否大于等于5,如果是则加3修正 左移整个数据结构1位 ...
- 格雷码、二进制码、BCD编码
格雷码 格雷码(12页).pdf 格雷码(12页).pdf-其它文档类资源-CSDN下载 奇偶校验码(25页).pdf 奇偶校验码(25页).pdf-其它文档类资源-CSDN下载 经验:如何快速地写出 ...
- 数字逻辑代数基础——基本定理、公式与卡诺图化简法、格雷码、LSFR等
复习一下数字电路,下次就省事直接看自己写的了. 目录 1.常用门电路图 2.逻辑代数的基本定理----化简时比较好用 3.化简逻辑函数时几个关键的公式(A'代表A的非) 4.格雷码与二进制的转换 5. ...
- 自然二进制码与格雷码相互转换【CSDN】
自然二进制码与格雷码相互转换 一.格雷码简介 格雷码是由弗兰克·格雷于1953年发明,其主要特点是相邻编码值中间只有一个比特发生改变,又被称为循环码. 格雷码是一种无权码,采用绝对编码方式,典型格雷码 ...
最新文章
- 包含近 20 万本图书,OpenAI 级别的训练数据集上线
- 甲骨文 93 亿美元现金收购云计算商 NetSuite
- OA学习笔记-001-项目介绍
- Canvas知识点汇总
- 计算机网络实验(华为eNSP模拟器)——第十三章 VLAN注册协议(GVRP)
- Redis持久化(RDB 和 AOF)
- ImageButton单击切换按钮图片
- 程序路径查找 找到指定程序所在的目录
- Basis Cash公布V2路线图:将进行流动性迁移并将于Q3推出Basis Swap
- python使用ip代理抓取网页
- 中国能源统计年鉴面板数据-分省市主要污染物排放指标(包含ECXEL2020年中国统计年鉴)
- mysql8中文手册_mysql8 参考手册--mysql8 官方介绍
- 【历史上的今天】1 月 6 日:“互联网之子”的陨落;微软云服务先驱出生;世界上第一台 5G 笔记本
- 海南楼市充斥着传说 投机者必将自食其果
- “肆拾玖坊号”高铁冠名列车今日正式首发
- 注塑机网关 HFCL-EDGE
- Java Web完整学习记录
- 常见webshell工具
- SQL语句--关于赋值
- {转}tbl语言简介
热门文章
- bochs运行xp_使用Bochs模拟器瞬间安卓变XP教程
- 2018-10-8-如何安装-btsync
- mpp格式文用什么软件打开
- 关于虚拟机IP更改问题教给大家一个必杀技
- 数据统计分析(SPSS)【7】
- Javassist学习总结1
- java生成图表_java实现将数据生成图表至excel导出
- Materials studio中的简单聚合物的建立及盒子的弛豫
- php日历天气预报下载安装手机桌面_日历天气预报下载安装app_手机桌面时钟日历天气软件下载 安卓版 V7.5.1 - 罐头安卓网...
- Unity3D游戏开发之使用disunity提取Unity3D游戏资源