上一篇文章我们讲了二进制转gray码,这次我们聊一下gray码转二进制码。
格雷码解码:
原码:b[0~n]; 格雷码:g0~n; 解码:b=F(g);
代码如下:
//============================================================
// File Name: cm_gray2bin
// VERSION : V1.0
// DATA : 2022/10/2
// Author : FPGA干货分享
// ============================================================
// 功能:二级制编码转格雷码
//
// 原码:b[0~n];格雷码:g[0~n](n∈N);编码:g=G(b);解码:b=F(g);
// 编码:g=b XOR b[i+1](i∈N,0≤i≤n-1),g[n]=b[n];
// 解码:b[n]=g[n],b=g XOR b[i+1](i∈N,0≤i≤n-1).
//
// ============================================================
`timescale 1ns/1ps
module cm_gray2bin #(
parameter C_DATA_WIDTH = 4 )
(
input wire I_sys_clk , ///输入时钟
input wire [C_DATA_WIDTH-1:0] I_data_gray , ///输入gray码
output reg [C_DATA_WIDTH-1:0] O_data_bin ///输出二进制数据
);
// ============================================================
// wire reg
// ============================================================
wire [C_DATA_WIDTH-1:0] S_data_bin ;
// ============================================================
// main code
// ============================================================
assign S_data_bin[C_DATA_WIDTH-1] = I_data_gray[C_DATA_WIDTH-1];
assign S_data_bin[C_DATA_WIDTH-2:0] = I_data_gray[C_DATA_WIDTH-2:0]^S_data_bin[C_DATA_WIDTH-1:1];
always @(posedge I_sys_clk)
O_data_bin <= S_data_bin;
endmodule
代码综合结果如下:
仿真如下:
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
FPGA
+关注
关注
1629文章
21729浏览量
603046 -
格雷码
+关注
关注
2文章
34浏览量
13185 -
bit
+关注
关注
0文章
48浏览量
32014 -
时钟域
+关注
关注
0文章
52浏览量
9535 -
二进制码
+关注
关注
0文章
3浏览量
6112
发布评论请先 登录
相关推荐
FPGA界最常用也最实用的3种跨时钟域处理的方法
介绍3种跨时钟域处理的方法,这3种方法可以说是FPGA界最常用也最实用的方法,这三种方法包含了单bit和
发表于 11-15 20:08
•1.4w次阅读
如何解决单bit和多bit跨时钟处理问题?
一、简要概述: 在芯片设计过程中,一个系统通常是同步电路和异步电路并存,这里经常会遇到CDC也就是跨时钟域处理的问题,常见的处理方法,可能大家也已经比较熟悉了,主要有单bit
评论