FPGA多bit跨时钟域之格雷码(一)

描述

FPGA多bit跨时钟域适合将计数器信号转换为格雷码。

格雷码的特点:从一个数变为相邻的一个数时,只有一个数据位发生跳变,

这种特点,就可以将跨时钟域中的多bit跨时钟域转换为单bit跨时钟域,最大限度的提高系统稳定性。

格雷码常用于通信,FIFO 或者 RAM 地址寻址计数器中。

fifo

格雷码编码

原码:b[0~n];格雷码:g0~n;编码:g=G(b);

编码:g=b XOR bi+1,g[n]=b[n];

最高位不变,其它位和高1位信号做异或

fifo

其代码如下:

//============================================================
// File Name: cm_bin2gray
// 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_bin2gray #(
    parameter                         C_DATA_WIDTH = 4 )
    (                  
    input wire                        I_sys_clk   , ///输入时钟
    input wire [C_DATA_WIDTH-1:0]     I_data_bin  , ///输入二进制数据
    output reg [C_DATA_WIDTH-1:0]     O_data_gray   ///输出二进制数据
    );


// ============================================================
// main code
// ============================================================


always @(posedge I_sys_clk)
    O_data_gray <= I_data_bin ^ (I_data_bin >> 1);




endmodule

代码综合结果如下:

fifo

下一篇将介绍gray转二进制及其仿真

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分