FPGA多bit跨时钟域之格雷码(2)
FPGA自学笔记分享 2023-03-22

上一篇文章我们讲了二进制转gray码,这次我们聊一下gray码转二进制码。

格雷码解码:原码:b[0~n];格雷码:g[0~n](n∈N);解码:b=F(g);解码:b[n]=g[n],b=g XOR b[i+1](i∈N,0≤i≤n-1).

代码如下:








































//============================================================// 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/1psmodule 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

代码综合结果如下:

仿真如下:



声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • FPGA
  • 可编程
  • PLC
  • verilog
下载排行榜
更多
评测报告
更多
广告