上一篇文章总结了四种常用的多比特跨时钟域的设计。这篇我们主要来看一下 格雷码,文章目录如下:

  • 什么是格雷码
  • 格雷码转二进制码
  • 二进制码转格雷码
  • N比特格雷码转N-1比特格雷码

什么是格雷码 ?

A Gray code is an encoding of numbers so that adjacent numbers have a single digit differing by 1

符合这个条件的序列都可以叫做格雷码。

比如下面序列1和序列2都是格雷码。我们常用的标准格雷码是序列1的格式。

序列1:000 -> 001 -> 011 -> 010 -> 110 -> 111 -> 101 -> 100
序列2:000 -> 001 -> 011 -> 111 -> 101 -> 100 -> 000

图1是格雷码和二进制码的对比。

图1 - 格雷码与二进制码的对比

格雷码转二进制码

module gray2bin #(parameter WIDTH=4)
(   input  logic [WIDTH-1:0] gray,output logic [WIDTH-1:0] bin
);always_comb beginfor (int i=0 ; i<WIDTH ; i++) beginbin[i] = ^(gray >> i);endend
endmodule

这段代码是论文(参考资料1)中的推荐代码。那么如何理解呢。

符号 '^' 在verilog中如果其只有一个操作符表示缩减异或,可以用来判断操作数中1的个数的奇偶。如 ^1001, 含偶数个1,结果为0,而 ^1101,含奇数个1,结果为1。

所以上面代码是意思是 bin的不同位的值可以由gray不同子序列含1的奇偶 来判断。我们可以对比图1来验证一下,发现确实是这个规律的。

二进制码转格雷码

module bin2gray #(parameter WIDTH=4)
(   input  logic [WIDTH-1:0] bin,output logic [WIDTH-1:0] gray
);always_comb begingray = (bin >> 1)^bin;end
endmodule

这段代码也是论文(参考资料1)中的推荐代码。对应的电路结构如图2所示,意味着bin的每一比特 异或 其前一位的比特可以得到对应的gray的比特。

图2 - 二进制码转格雷码的电路图

N比特格雷码转N-1比特格雷码

一开始我以为N比特格雷码转N-1比特格雷码可以像二进制码那样,直接取低N-1比特即可

assign gray_new = gray_old[N-2:0];

后来发现是错误的,太想当然了。

格雷码其实还有一个特点,我们看图3。可以发现N比特格雷码的低N-1比特是有 对称 关系的。如果我们直接取低N-1比特,100 之后还是 100,不会回到 000。

图3 - N比特格雷码与N-1比特的关系

那么如何正确转换呢,将N比特格雷码的高两位异或一下作为N-1比特格雷码的最高位即可。

assign gray_new = {gray[N-1]^gray[N-2], gray[N-3:0]};   // N must be larger than 2

总结

本篇文章主要总结了格雷码的特点以及其与二进制码之间的转换。

参考资料

  1. 《Clock Domain Crossing (CDC) Design & Verification Techniques Using SystemVerilog》
  2. 《Simulation and Synthesis Techniques for Asynchronous FIFO Design》

3位格雷码的顺序编码_FPGA 设计之 跨时钟域(四 - 格雷码)相关推荐

  1. 3位格雷码的顺序编码_一种优化格雷码编码方式实现跨时钟域的装置的制作方法...

    本发明属于信号处理技术领域,尤其是涉及一种优化格雷码编码方式实现跨时钟域的装置. 背景技术: 随着时间的推移,集成电路行业发展至今,已有类似如intel这样先进的foundry,提出迈入10nm制程的 ...

  2. 4位格雷码的顺序编码_八位格雷码转换器.doc

    八位格雷码转换器 物理与信息技术系本科学年论文 题 目八位格雷码转换器设计 学生姓名 专业名称 测控技术与仪器 指导教师 2009年 9月30日 八位格雷码转换器设计 摘要8 Gray code co ...

  3. 4位格雷码的顺序编码_一种基于格雷码的方形QAM星座图编码方法和系统与流程...

    本发明属于测试技术领域,尤其涉及一种基于格雷码的方形QAM星座图编码方法和系统. 背景技术: 矢量信号分析中通常采用星座图来表征调制信号质量,星座图中星座点的编码方法直接影响信号解调后的BER(即比特 ...

  4. 4位格雷码的顺序编码_格雷码编码 解码 实现(Python)

    作者:曹博 01 二值码 02 格雷码编码 2.1 编码优点 2.2 编码生成 2.3 递归生成 2.4 二值码转换 2.5 编码图 03 格雷码投影 3.1 投影图案生成 3.2 DLP投影图像 0 ...

  5. 4位格雷码的顺序编码_格雷码那点事——递归非递归实现

    简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即"首尾相连",因此又称循环 ...

  6. 3位格雷码的顺序编码_绝对值编码器当中的格雷码

    格雷码:又叫循环二进制码或反射二进制码.格雷码是我们在旋转编码器中常会遇到的一种编码方式. 格雷码的特点: 任意两个相邻的代码只有一位二进制数不同: 循环码,0和最大数(2^n-1)之间只有一位不同: ...

  7. 4位格雷码的顺序编码_整理丨一文掌握编码器的工作原理!

    编码器的定义与功能 在数字系统里,常常需要将某一信息(输入)变换为某一特定的代码(输出).把二进制码按一定的规律编排,例如8421码.格雷码等,使每组代码具有一特定的含义(代表某个数字或控制信号)称为 ...

  8. 4位格雷码的顺序编码_格雷码编码规则_格雷码有什么规律

    格雷码 典型的二进制格雷码简称格雷码,因1953年公开的弗兰克·格雷专利"Pulse Code Communication"而得名,当初是为了通信,现在则常用于模拟-数字转换和位置 ...

  9. 3位格雷码的顺序编码_第3部分-计算机程序员(FPGA嵌入式应用)_3级_理论知识复习题...

    第3部分 理论知识复习题 基本概念 数字电路基础 一.判断题(将判断结果填入括号中.正确的填"√",错误的填"×"): 1.要构成5进制计数器,至少需要3个触发 ...

最新文章

  1. Serverless 工程实践 | Serverless 应用开发观念的转变
  2. python字典 items函数
  3. PHP curl采集
  4. error: undefined reference to 'cv::_OutputArray::_OutputArray(std::__ndk1
  5. SAP 电商云 Spartacus UI 同 SAP Customer Data Cloud 的集成
  6. phpcms点赞:表情点击(的统计功能) - 代码剥离篇
  7. 几何画板怎样添加操作按钮
  8. 贾跃亭发文祝父亲节快乐:FF就像我的孩子
  9. 【leetcode】【动态规划】股票买卖
  10. vue 绑定背景图片、图片
  11. python百分号字符串_python--003--百分号字符串拼接、format
  12. 装饰模式/适配器模式/代理模式
  13. 短信接口防盗刷解决方案
  14. 博客园2013年5月份第2周源码发布详情
  15. Android对接蓝牙打印机
  16. Java前景如何,容易找工作嘛
  17. Drag Drop 入门介绍
  18. 编译原理——中间代码生成(逆波兰表示)
  19. 对话Oneledger联合创始人Edwin Zhang
  20. idea 复制java文件_IDEA复制项目Module出现java文件夹source root解决方法

热门文章

  1. 【转】使用Apache CXF开发WebServices服务端
  2. vimrepress
  3. error: xxxx.o: Relocations in generic ELF (EM: 3)解决办法
  4. 学习-SQL查询连续号码段的巧妙解法--转载
  5. ASM - 条件判断
  6. ASP.NET一般处理程序新建一个方法里使用context.Response.Write的解决方法
  7. java异常——捕获异常+再次抛出异常与异常链
  8. 解决IDEA快捷键 Alt+Insert 失效的问题
  9. IntelliJ IDEA中跳转到上一个视图位置(向后/向前导航)的键盘快捷键
  10. 如何强制除法为浮点数? 除数一直舍入到0?