格雷码的特点:从一个数变为相邻的一个数时,只有一个数据位发生跳变,
这种特点,就可以将跨时钟域中的多bit跨时钟域转换为单bit跨时钟域,最大限度的提高系统稳定性。
格雷码常用于通信,FIFO 或者 RAM 地址寻址计数器中。
格雷码编码
原码:b[0~n];格雷码:g0~n;编码:g=G(b);
最高位不变,其它位和高1位信号做异或
其代码如下:
//============================================================
// 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
代码综合结果如下:
下一篇将介绍gray转二进制及其仿真
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
FPGA
+关注
关注
1602文章
21326浏览量
593216 -
fifo
+关注
关注
3文章
369浏览量
43069 -
格雷码
+关注
关注
2文章
34浏览量
13093 -
bit
+关注
关注
0文章
47浏览量
31853 -
时钟域
+关注
关注
0文章
49浏览量
9455
发布评论请先 登录
相关推荐
格雷码简介及格雷码与二进制的转换程序
于模拟-数字转换[3]和转角-数字转换中[4] 。 典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求
发表于 04-22 09:00
什么是BCD码、8421码、余三码、格雷码
!!余三码是在8421BCD码的基础上,把每个数的代码加上0011(对应十进制数3)后得到的。格雷码的编码规则是相邻的两代码之间只有
发表于 11-03 17:36
【FPGA设计实例】FPGA跨越多时钟域
任务第4部分:数据总线道口顺便说一句,学习约metastablity(或为什么这么多的辛勤工作是需要跨时钟域),检查下面的链接 完整资料:[
发表于 03-19 15:16
看看Stream信号里是如何做跨时钟域握手的
popArea里stream.m2sPipe,这个版本效率相较于前者,略低一些:StreamFifoCC这个就没有什么好说的了,通过fifo来实现stream信号的跨时钟域,效率最高,
发表于 07-07 17:25
评论