单bit数据跨时钟域处理

主要介绍高频时钟域下的信号如何传输到低频时钟域下。

例如,高频时钟下的脉冲信号可能不会在低频时钟下被采集到,这时就需要进行处理,让高频信号在低频时钟域下保持至少一个时钟周期。代码实现如下:

module sync(
    input  wire clk  ,
    input  wire rst1 ,

    output reg  rst2
);

reg r0_rst = 1'b0 ;
reg r1_rst = 1'b1 ;

always @(*)begin
    if(rst1 & !r0_rst)
        r0_rst = 1'b1 ;
    else if(r1_rst)
        r0_rst = 1'b0 ;
    else
        r0_rst = r0_rst ;
end

always @(posedge clk)begin
    if(r0_rst)
        r1_rst <= 1'b1 ;
    else
        r1_rst <= 1'b0 ;
end

always @(posedge clk)
    rst2 <= r1_rst ;

endmoudle

代码仅以高有效的复位信号举例,该信号可替换为任意单bit信号的输入。

异步数据处理可通过异步FIFO或双口RAM,握手信号等等方法。对于这些方法的认识其中异步FIFO最为常用,握手信号可能类似于IIC协议中的应答信号之类的,当然跨时钟域的信号处理本人用的最熟悉的还是异步FIFO。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值