约束衍生时钟
系统中有4个衍生时钟,但其中有两个是MMCM输出的,不需要我们手动约束,因此我们只需要对clk_samp
和spi_clk
进行约束即可。约束如下:
1 | create_generated_clock -name clk_samp -source [get_pins clk_gen_i0/clk_core_i0/clk_tx] -divide_by 32 [get_pins clk_gen_i0/BUFHCE_clk_samp_i0/O] |
我们再运行report_clocks
,显示如下:
我们在理论篇的“create_generated_clock”一节中讲到,我们可以重新设置Vivado自动生成的衍生时钟的名字,这样可以更方便我们后续的使用。按照前文所讲,只需设置name
和source
参数即可,其中这个source
可以直接从report_clocks
中得到,因此我们的约束如下:
1 | create_generated_clock -name clk_tx -source [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKIN1] [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKOUT1] |
大家可以对比下report_clocks
的内容和约束指令,很容易就能看出它们之间的关系。
把上述的约束指令在tcl中运行后,我们再运行一遍report_clocks
,显示如下:
在时序树的分析中,我们看到,clk_samp
和clk2
两个异步时钟之间存在数据交互,因此要进行约束,如下:
1 | set_clock_groups -asynchronous -group [get_clocks clk_samp] -group [get_clocks clk2] |