时序分析基本概念介绍——Virtual Clock


一、什么是Virtual Clock

我们通常说的create_clock, create_generated_clock 都是real clock。而virtual clock则不挂在任何port或者pin上,只是虚拟创建出来的时钟。Virtual Clock是没有定义时钟源的时钟,而Real Clock是定义了时钟源的时钟。
Virtual clock与real clock的区别就在于是否有source,real clock有实实在在的source pin/port,沿着source可以trace到clock sink,可以对real clock做CTS;而virtual clock不行。

定义Real/Virtual clock cmd代码如下(示例):

# real clock, with source pin/port
create_clock -name "CLK" -period 10 -waveform [0 5] [get_ports clk]
# virtual clock
create_clock -name "CLK_V" -period 10 -waveform [0 5]

二、Virtual Clock的作用

我们通常会把input/output delay挂在virtual clock上,因为input/output delay约束本来就是指片外的时钟,所以挂在virtual clock上较为合理。

1. input/ouput dely

对于BLOCK,2个FF源于同一个clk,它们是同步的,所以RegA->RegB这条跨block的path需要检查timing;而对于BLOCK,这条path是看不见的,它只能看到RegA->PORT的path,即block内部看到的path比真实path要短。这样就需要对output port PORT 设output delay约束,delay value为从PORT到RegB/D的delay,如下图所示。
在这里插入图片描述
clock latency包括了clock source latency和clock network delay。
source latency是外部CLK source到BLOCK CLK port的delay;network latency是从CLK port 到RegA/CP的latency,这部分就是CTS后clock tree的长度。

当BLOCK中没有做clock tree 的时候,clock network delay 等于0, 是ideal的,这时候RegA到PORT这个path来说,用virtual clock还是用real clock效果都是一样的。

timing report 如下所示。

  Startpoint: data_out_reg
              (rising edge-triggered flip-flopclocked by clk_in)
  Endpoint: PORT (output port clocked by clk_in)
  PathGroup: clk_in
  PathType: max

  Point                                   Incr       Path
 ------------------------------
### 关于时钟延迟组的概念 在数字设计中,时钟延迟组用于管理不同路径上的时钟信号传播时间差异。这些延迟可以由多种因素引起,包括物理距离、布线资源以及逻辑单元本身的特性。 #### 虚拟时钟的作用 虚拟时钟(如VIRTUAL_CLKM)并不直接连接到实际硬件中的任何引脚[^2]。这种设置允许设计师通过软件模拟理想化的时序条件来评估电路性能而不受具体实现细节的影响。对于输入端口而言,`set_input_delay`命令用来指定数据到达该端口所需的时间间隔相对应于这个假想出来的参考点——即所谓的“虚拟时钟”。 #### 设置时钟延迟组的方法 为了有效地处理复杂的同步需求,在FPGA项目里通常会创建多个不同的时钟域并为其分配特定的延时参数。这可以通过综合工具提供的各种约束语句完成: - `create_clock`: 定义一个新的全局或局部时钟源及其频率。 - `set_clock_groups`: 将若干个独立运作却不互相干扰的时钟集合起来形成一组;此操作有助于简化多周期路径分析过程。 - `set_output_delay / set_input_delay`: 分别针对输出和输入设定相对于选定参照系(通常是某个已知稳定工作的内部节点或是前述提到过的虚拟时基) 的最短/最长容许传输时限。 ```tcl # 创建两个不同时钟域 create_clock -name clk1 -period 10 [get_ports CLK1] create_clock -name clk2 -period 20 [get_ports CLK2] # 声明这两个时钟互斥且不会相互影响 set_clock_groups -asynchronous \ -group [get_clocks clk1] \ -group [get_clocks clk2] # 对某些关键I/O施加额外的时序边界条件 foreach port {DIN DOUT} { set_input_delay 5 -clock clk1 [get_ports $port] set_output_delay 7 -clock clk1 [get_ports $port] } ``` 上述TCL脚本片段展示了如何利用Xilinx Vivado等EDA平台内置的功能构建起一套完整的时钟管理系统框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值