咱们以Vivado自带的wave_gen工程为例,该工程的各个模块功用较为清晰,如下图所示。为了引进异步时钟域,咱们在此程序上由增加了另一个时钟–clkin2,该时钟发生脉冲信号pulse,samp_gen中在pulse为高时才发生信号。
下面咱们来一步一步进行时序束缚。
1. 整理时钟树
咱们首先要做的便是整理时钟树,便是工程顶用到了哪些时钟,各个时钟之间的联系又是什么样的,假如自己都没有把时钟联系理清楚,不要盼望归纳东西会把一切问题露出出来。
在咱们这个工程中,有两个主时钟,四个衍生时钟,如下图所示。
确认了主时钟和衍生时钟后,再看各个时钟是否有交互,即clka发生的数据是否在clkb的时钟域中被运用。
这个工程比较简单,只要两组时钟之间有交互,即:
clk_rx与clk_tx
clk_samp与clk2
其间,clk_rx和clk_tx都是从同一个MMCM输出的,两个频率尽管不同,但他们却是同步的时钟,因而他们都是从同一个时钟分频得到(能够在Clock Wizard的Port Renaming中看到VCO Freq的巨细),因而它们之间需要用set_false_path来束缚;而clk_samp和clk2是两个异步时钟,需要用asynchronous来束缚。
完结以上两步,就能够进行详细的时钟束缚操作了。