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

相关推荐
ALINX技术博客2 小时前
【202601芯动态】全球 FPGA 异构热潮,ALINX 高性能异构新品预告
人工智能·fpga开发·gpu算力·fpga
JJRainbow9 小时前
SN75176 芯片设计RS-232 转 RS-485 通信模块设计原理图
stm32·单片机·嵌入式硬件·fpga开发·硬件工程
s91236010110 小时前
FPGA眼图
fpga开发
北京青翼科技11 小时前
【PCIe732】青翼PCIe采集卡-优质光纤卡- PCIe接口-万兆光纤卡
图像处理·人工智能·fpga开发·智能硬件·嵌入式实时数据库
minglie111 小时前
verilog信号命名规范
fpga开发
XINVRY-FPGA14 小时前
中阶FPGA效能红线重新划定! AMD第2代Kintex UltraScale+登场,记忆体频宽跃升5倍
嵌入式硬件·fpga开发·硬件工程·dsp开发·fpga
南檐巷上学20 小时前
基于FPGA的音频信号监测识别系统
fpga开发·音频·verilog·fpga·傅立叶分析·fft·快速傅里叶变换
Aaron15881 天前
基于RFSOC的数字射频存储技术应用分析
c语言·人工智能·驱动开发·算法·fpga开发·硬件工程·信号处理
碎碎思1 天前
当 FPGA 遇见怀旧计算:486 与 Atari ST 的硬件级重生
fpga开发
数字芯片实验室2 天前
怎么定义芯片上的异步时钟?
单片机·嵌入式硬件·fpga开发