上一篇文章我們講了二進制轉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
+關注
關注
1630文章
21798瀏覽量
606049 -
格雷碼
+關注
關注
2文章
34瀏覽量
13229 -
bit
+關注
關注
0文章
48瀏覽量
32058 -
時鐘域
+關注
關注
0文章
52瀏覽量
9574 -
二進制碼
+關注
關注
0文章
3瀏覽量
6137
發布評論請先 登錄
相關推薦
FPGA界最常用也最實用的3種跨時鐘域處理的方法
介紹3種跨時鐘域處理的方法,這3種方法可以說是FPGA界最常用也最實用的方法,這三種方法包含了單bit和
發表于 11-15 20:08
?1.4w次閱讀
如何解決單bit和多bit跨時鐘處理問題?
一、簡要概述: 在芯片設計過程中,一個系統通常是同步電路和異步電路并存,這里經常會遇到CDC也就是跨時鐘域處理的問題,常見的處理方法,可能大家也已經比較熟悉了,主要有單bit
評論