FPGA设计中跨时钟域信号同步方法(读书笔记)
从摘要中可以了解到这篇文章主要写了(1)亚稳态现象的出现(2)四种跨时钟域同步方案(3)评估分析(4)优化设计
可以理解为因为有跨时域的设计,在设计中容易出现亚稳态现象,所以要做好跨时钟域同步。
然后重点看这几种方案。
输入信号是一个脉冲的跨时钟同步方案,这个方案由一个电平翻转电路、一个基本同步器、一个用于延迟的触发器以及一个异或门输出组成。
电平翻转电路主要是当与输入脉冲信号FLAGIN_LCKA时,将输入电平进行翻转,是在时钟域A中,然后将翻转后的信号通过两级触发器串联构成的基本同步电路(通俗讲就是打两拍),再经过一级触发器进行延迟处理,最后将延迟前的信号和延迟后的信号进行异或得到FLAGOUT_LCKB。
当想要将输入的脉冲信号FLAGIN_CLK同步成B时钟域的一个电平信号,只需要在脉冲同步电路后再加上一个信号延长电路, 意思就是当FLAGOUT_CLKB为高时,输出一个高电平并用计数器计数,计数器的计数值就是高电平的时间。
目的是为了将A时钟域的数据同步到B时钟域上。分为基于握手的数据同步方案和基于异步FIFO的数据同步方案。
当数据进入总线时,首先时钟域A给时钟域B一个有效的请求REQ信号,当时钟域B检测到有效的REQ信号时,锁存数据总线,然后再发送给时钟域A一个ACK信号,表示读取完成。当时钟域A检测到ACK信号时,将REQ信号置0,同时当时钟域B检测到REQ为0时,也将ACK信号置零。
另外一种异步FIFO的方法就不多说,简而言之就是写入用时钟域A,读出用时钟域B。
这个方案比较易懂,就是使用我们上述的脉冲同步电路,也与握手协议类似。
首先任务发起方发送一个任务开始信号给任务响应方,这需要脉冲同步电路进行跨时钟域处理,由时钟域A的TASK_START_CLKA同步到时钟域B的TASK_START_CLKB,任务响应方开始执行任务,在执行任务完成后,发送一个信号给任务发起方,经过一个脉冲同步电路由时钟域B的TASK_DONE_CLKB到时钟域A的TASK_DONE_CLKA。
版权声明:本文由哟品培原创或收集发布,如需转载请注明出处。