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的空满指示比较地址的时候会使用到格雷码。

相关推荐
-木槿昔年-6 小时前
【米尔-安路MYD-YM90X创意秀】飞龙派学习和PS串口实践
学习·fpga开发
Aaron15886 小时前
基于RFSOC+VU13P+GPU架构在雷达电子战的技术
人工智能·算法·fpga开发·架构·硬件工程·信号处理·基带工程
jifengzhiling12 小时前
伺服驱动器中DSP与FPGA高效协同架构解析
fpga开发·foc电机控制
太爱学习了15 小时前
FPGA图像处理之:图像畸变矫正原理及matlab与fpga实现
图像处理·matlab·fpga开发
技术性摸鱼1 天前
FPGA选型参数
fpga开发
FPGA_小田老师1 天前
ibert 7 Series GT:IBERT远近端(内外)环回测试
fpga开发·ibert·gt测试·近端pcs环回·近端pma环回·远端pcs环回·远端pma环回
尤老师FPGA1 天前
【无标题】
fpga开发
175063319452 天前
VIVADO VLA VIO 硬件调试 降采样
fpga开发
FPGA小迷弟2 天前
基于FPGA开发高速ADC/DAC芯片笔记
图像处理·fpga开发·数据采集·fpga·adc
ZYNQRFSOC2 天前
基于XCKU5P纯逻辑 NVME测试
fpga开发