跨时钟域处理(二):格雷码

在跨时钟域处理(一)中,我们介绍了针对单bit信号的跨时钟域处理方法—使用DFF打两拍,然而这个方法对多bit的数据并不管用。
首先,我们知道,使用DFF打两拍可以基本消除亚稳态的问题,但是无法保证采样得到的数据是正确的,因此,如果现在要采样的是一个多bit的跨时钟域信号,比如4bit信号,那么由于建立时间和保持时间的违例,虽然在打两拍之后可以得到一个稳定的数据,但该数据的每一个bit都不一定是正确的,所以其可能的值有 2 4 = 16 2^4=16 24=16种,这显然是无法接受的,因此,对于多比特信号的跨时钟域处理,不能照搬。
一种可以解决多bit跨时钟域信号传输的方法就是格雷码

格雷码

格雷码(又称循环码),它具有以下两个特点:
1、相邻的两个编码之间只有一位是不一样的。
2、当第N位从0变到1时,之后的数的N-1位会关于前半段对称,而比N位高的是相同的。
英文解释:

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

下图是格雷码和二进制码的一个对比
在这里插入图片描述
由于格雷码相邻数据只有一个bit不同,因此,在进行跨时钟域传输时,只有发生变化的那个bit有可能处于亚稳态,而其余bit由于保持不变,因此是稳定的,故多比特格雷码的跨时钟域传输相当于单比特信号的跨时钟域传输,我们采用打两拍的方法即可处理。

格雷码和二进制码的转换

二进制转格雷码

格雷码的产生是对二进制按位异或生成的,其RTL描述如下:

assign gray_code = (bnary >> 1) ^ bnary;

格雷码转二进制码

格雷码转换成二进制则需要对每位进行单独异或(以4bit为例):

Gray to Binary
b(3) = g(3)
b(2) = g(3) ^ g(2)
b(1) = g(3) ^ g(2) ^ g(1)
b(0) = g(3) ^ g(2) ^ g(1) ^ g(0)

RTL描述:

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

参考链接

https://zhuanlan.zhihu.com/p/149861619?from_voters_page=true
https://zhuanlan.zhihu.com/p/161681621

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
跨时钟域处理格雷码是指在不同时钟域之间进行格雷码的转换和处理。Verilog语言提供了一些机制来实现这样的跨时钟域处理。 首先,Verilog中可以使用时钟使能(clock enable)来控制时钟域切换时的格雷码转换。通过将格雷码生成逻辑放置在与时钟同步的时钟域中,然后通过时钟使能来控制格雷码转换的触发。例如,当时钟使能信号为高电平时,才允许进行格雷码转换。这样可以确保在不同的时钟域之间进行同步的格雷码处理。 其次,Verilog中也可以使用寄存器来存储并传递格雷码数据。在不同的时钟域之间,可以使用寄存器来进行数据的缓存和同步。通过在时钟域切换的边缘上,将新的格雷码数据写入到寄存器中,并在另一个时钟域的相应边缘上,将寄存器中的格雷码数据读取出来。这样可以确保在跨时钟域处理过程中,数据传递的正确性和可靠性。 最后,需要注意跨时钟域处理的时延问题。由于不同时钟域之间存在时钟延迟,因此需要合理的时序设计来保证跨时钟域处理的正确性。可以使用合适的时钟域切换信号和时钟域边缘触发机制,来确保时序的正确性和时延的合理性。 总而言之,通过合理的时钟使能控制、寄存器存储和时序设计,可以实现跨时钟域处理格雷码的Verilog设计。这样可以确保在不同的时钟域之间进行格雷码转换和处理的正确性和可靠性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA硅农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值