专栏名称: 嵌入式微处理器
关注这个时代最火的嵌入式微处理器,你想知道的都在这里。
目录
相关文章推荐
桂林头条  ·  今天起,可以查分了! ·  13 小时前  
桂林头条  ·  今天起,可以查分了! ·  13 小时前  
康石石  ·  全国多地硕士人才引进政策汇总! ·  17 小时前  
康石石  ·  保研也能捡漏!广美正在悄悄扩招…… ·  3 天前  
51好读  ›  专栏  ›  嵌入式微处理器

FPGA的虚拟时钟如何使用?

嵌入式微处理器  · 公众号  ·  · 2024-05-13 15:58

正文

昨天给大家介绍了 虚拟时钟 但文中对其应用部分,讲解得还不够详 细。因此,本篇再对虚拟时钟做一个补充。
首先,虚拟时钟用于什么地方?
虚拟时钟通常用于设定输入和输出的延时,即 set_input_delay set_output_delay 。可能有同学忘记这两个约束的用法了,这里我们再展示一下:
set_input_delay 0.5 -clock clkA [get_ports A]
set_output_delay 1 -clock clkB [get_ports B]

其中, clkA clkB 就是我们使用 create_clock 创建的主时钟或者虚拟时钟。

主时钟在创建的时候需要指定时钟输入端口,而虚拟时钟不需要指定端口,所以称之为虚拟时钟。

那么,什么场景 下要用到虚 拟时钟呢?

1、外部IO的参考时钟并不是设计中的时钟

下图中,外部IO的参考时钟比设计中主时钟的路径上多了一个BUFFER,因此我们需要使用虚拟时钟来进行约束。

create_clock -name sysclk -period 10 [get_ports clkin]
create_clock -name virtclk -period 10
set_clock_latency -source 1 [get_clock virtclk]
set_input_delay -clock virtclk -max 4 [get_ports dina]
set_input_delay -clock virtclk -min 2 [get_ports dina]

2、FPGA I/O路径参考时钟来源于内部衍生时钟,但与主时钟的频率关系并不是整数倍

如果I/O路径参考时钟源于内部的衍生时钟,那 set_input_delay set_output_delay 约束中 -clock 参数后的时钟不能是衍生时钟,比如下图的例子中,输入10MHz时钟经过了MMCM后去采输入的数据。

a)如果MMCM没有负的相移而且输出的频率也是10MHz,那么直接使用主时钟来约束input delay。

create_clock -period 100.000 -name clk [get_ports clk]
set_input_delay -clock clk -max 2.000 [get_ports datain]
set_input_delay -clock clk -min 1.000 [get_ports datain]

b)如果MMCM输出频率是60MHz,那么这个衍生时钟跟主时钟并不是整数倍关系,这时就需要用到虚拟时钟了。

create_clock -period 100.000 -name clk [get_ports clk] 
create_clock -name clk_port_vclk -period 16.67
set_input_delay -clock clk_port_vclk -max 2 [get_ports datain]
set_input_delay -clock clk_port_vclk -min 1 [get_ports datain]

3、在不修改时钟特性的情况下针对I/O指定不同的jitter和latency

这个需求我们可以在 Constraints Wizards 中指定,简单又方便。
在设置完成后,可以看到 Tcl Command Preview 中提示的约束指令。


END

来源:傅里叶的猫


版权归原作者所有,如有侵权,请联系删除。








请到「今天看啥」查看全文