跨时钟域处理方式

  假如设计中所有的 D 触发器都使用一个全局网络 GCLK ,比如 FPGA 的主时钟输入,那么我们说这个设计只有一个时钟域。假如设计有两个输入时钟,分别给不同的接口使用,那么我们说这个设计中有两个时钟域。在实际的 FPGA 系统设计中,经常需要处理多个时钟来源,比如 FPGA 作为一个转发桥连接几个不同的芯片,且不同的时钟域有着不同的时钟频率和时钟相位。

 

跨时钟域处理方式:

1、对于单比特数据的跨时钟域:打两拍(即定义两级寄存器对输入数据进行延拍,这个在解决“亚稳态”方式的随笔中已经提及)

2、FIFO(异步双口RAM)(适用于多比特数据的跨时钟域)

3、握手协议

  由于两个异步时钟域的频率关系不确定,触发器之间的建立时间和保持时间要求也无法得到保证。如果违反了建立时间或者保持时间的要求,那么接收域将会采样到处于亚稳态的数据,那么系统就可能崩溃。

  因此,我们可以使用握手协议方式处理跨时钟域数据传输,只需要对双方的握手信号(req 和 ack)分别使用脉冲检测方法进行同步。在具体实现中,假设 req、ack、data 总线在初始化时都处于无效状态,发送域先把数据放入总线,随后发送有效的 req 信号给接收域。接收域在检测到有效的 req 信号后锁存数据总线,然后回送一个有效的 ack 信号表示读取完成应答。发送域在检测到有效 ack 信号后撤销当前的 req 信号,接收域在检测到 req 撤销后也相应撤销 ack 信号,此时完成一次正常握手通信。此后,发送域可以继续开始下一次握手通信,依次循环。该握手协议方式能够保证接收到的数据稳定可靠,有效的避免了亚稳态的出现,但是控制信号握手检测会消耗通信双方较多的时间和资源。

转载于:https://www.cnblogs.com/PG13/p/10329678.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值