当前位置: 首页 > news >正文

FPGA随记-二进制转格雷码

反射二进制码(RBC),也称为反射二进制(RB)或格雷码(Gray code),得名于Frank Gray,是二进制数制的一种排列方式,使得连续两个值之间仅有一个比特(二进制位)不同。格雷码在数字电路中的应用有助于减少误差、提高系统的可靠性,并简化逻辑操作,因此被广泛应用于各种数字系统和电子设备中。

格雷码的最主要特点:各个相邻码之间仅有一位状态不同,首尾也是仅有一位状态不同

在现代数字通信中,格雷码在错误纠正中扮演着重要的角色。例如,在诸如QAM这样的数字调制方案中,数据通常以4位或更多位的符号传输,信号的星座图被安排成相邻星座点传达的位模式仅相差一个比特。通过结合能够纠正单比特错误的前向错误纠正,接收器可以纠正导致星座点偏离到相邻点区域的任何传输错误。这使得传输系统对噪声的影响更小。

格雷码在FIFO中的应用

在FIFO的设计中,在写请求中,写地址在写时钟作用下递增,在产生FIFO满信号时,需要将写地址和读地址进行比较,由于两个地址分别与其各自的时钟同步,但是彼此之间又是异步的关系,所以在使用二进制计数器实现地址的时候,就会出现现取样值错误的问题。如果我们有多个信号线(例如,4位计数器),并且这些信号线的延迟不一致,即skew不同,使用异步时钟采样更容易错误。为了避免这一问题,FIFO计数指针的常见方法是使用格雷码计数器。格雷码每个时钟转换只允许一位改变,从而消除了尝试在同一时钟边缘上同步多个改变信号所带来的问题。

使用格雷码编码地址可以减少在不同时钟域之间发生的时序问题,提高跨时钟FIFO的可靠性和性能。

  1. 将格雷码转换为二进制
  2. 根据条件递增二进制值
  3. 将二进制转换为格雷码
  4. 将计数器的最终格雷码保存至寄存器中

Verilog 语言描述二进制码转换为格雷码
module bin_to_gray (bin, gray);
parameter SIZE = 4;
input [SIZE-1:0] bin;
output [SIZE-1:0] gray;
assign gray = (bin >> 1) ^ bin;            //右移与自己异或
endmodule

Verilog 语言描述格雷码转换为二进制码:
module gray_to_bin (bin, gray);
parameter SIZE = 4;
input [SIZE – 1:0] bin;
output [SIZE – 1:0] gray;
reg [SIZE – 1:10] bin;
integer i;
always @ (gray)
for ( i = 0; i <= SIZE; i = i + 1)
bin[i] = ^(gray >> i);          //右移一位并按位异或
endmodule

所以一般用FIFO的空满指示比较地址的时候会使用到格雷码。

相关文章:

  • pytorch 加载模型参数后 如何测试数据,应用模型预测数据,然后连续变量转换成 list 或者numpy.array padans并保存到csv文件中
  • 单链表的实现(C语言)
  • Android 去掉SIM卡插拔出现的重启弹窗提示
  • STM32 的 SDIO 接口(基于STM32F429HAL库)
  • 【xhs截流软件】爬取小红书关键词笔记下的筛选评论
  • ComfyUI 节点、插件的基本指南
  • PHP程序如何实现限制一台电脑登录?
  • 024.PL-SQL进阶—游标
  • 吐血整理 ChatGPT 3.5/4.0 新手使用手册~ 【亲测好用】
  • ES6的简单介绍(第三部分)
  • 基于Java语言的充电桩平台+充电桩系统+充电桩管理系统+充电桩系统源码+充电桩管理后台+充电桩小程序
  • Service和Endpoints
  • python学习记录3
  • ansible部署二进制mysql 8
  • 文献阅读——基于拉格朗日乘子的电力系统安全域边界通用搜索方法
  • 【知识碎片】第三方登录弹窗效果
  • AngularJS指令开发(1)——参数详解
  • angular组件开发
  • JAVA多线程机制解析-volatilesynchronized
  • js中的正则表达式入门
  • SpringBoot 实战 (三) | 配置文件详解
  • zookeeper系列(七)实战分布式命名服务
  • 搭建gitbook 和 访问权限认证
  • 高程读书笔记 第六章 面向对象程序设计
  • 京东美团研发面经
  • 经典排序算法及其 Java 实现
  • 聊聊hikari连接池的leakDetectionThreshold
  • 前端知识点整理(待续)
  • 世界上最简单的无等待算法(getAndIncrement)
  • 温故知新之javascript面向对象
  • 项目实战-Api的解决方案
  • 《天龙八部3D》Unity技术方案揭秘
  • 1.Ext JS 建立web开发工程
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 说说我为什么看好Spring Cloud Alibaba
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • $(function(){})与(function($){....})(jQuery)的区别
  • $.ajax,axios,fetch三种ajax请求的区别
  • $refs 、$nextTic、动态组件、name的使用
  • (2)Java 简介
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (ros//EnvironmentVariables)ros环境变量
  • (第27天)Oracle 数据泵转换分区表
  • (过滤器)Filter和(监听器)listener
  • (黑马C++)L06 重载与继承
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (学习日记)2024.01.19
  • (一)面试需要掌握的技巧