时钟分频电路及时钟选择电路的时钟约束技巧

时钟分频电路及时钟选择电路是 FPGA 开发中常用的基础电路,那么,该怎么对其进行时钟约束呢?

下面来举个例子说明。

时钟分频电路及时钟选择电路的时钟约束技巧

这里出现了 design 中常见的电路,包括分频电路以及时钟 mux,那么怎么定义 clock 是我们最想要的结果呢?

首先想到的就是通过 generated clock 来指定生成时钟。

在创建 generated clock 时,需要指定两个选项,分别是:

1、-mater_clock,用于指定该 generated clock 的 master clock;
2、-source,这个选项用于指定 generated clock 的 waveform 的参考点;

原文如下:

Specifies the master clock pin, which is either a master clock source pin or a pin in the fanout of the master clock and driving the generated clock definition pin. The clock waveform at the master pin is used for deriving the generated clock waveform.

这里要注意就是 -source 这个选项,通常情况下,我们往往会把 -source 选项中指定位 master clock 定义的点;但是这不是必须的,我们也可以指定-source 为其他 pin;这里需要注意的是,我们一旦通过 -source 指定的参考点,那么 generated clock 的 waveform 就是以这个参考点的 waveform 作为参考的。

如果是 -divide_by 2,那么分频后的波形是以 -source 中指定的 pin 去做 divide,而不是以 master clock 的 waveform 去做 divide,特别是 master clock pin 的 waveform 和 -source 中指定的 pin 的 waveform 不一致时;最后产生的波形会发生很大的变化,在做 GCA 时,会去 checkgenerated clock 与 master clock 之间的波形是否与 constraint 中约束的一致!

言归正传,上述例子中怎么定义 generated clock?

第一种:

create_clock -period 10 CLK
create_generated_clock -name CLKdiv2 -divide_by 2 UMUX/Y -source FFdiv2/CK -master CLK -add
create_generated_clock -name CLKdiv4 -divide_by 4 UMUX/Y -source FFdiv4/CK -master CLK -add
set_clock_groups -physically_exclusive -group {CLK} -group {CLKdiv2} -group {CLKdiv4}

这样定义完 clock 后,会不会有问题呢?当然有,下面一一列举

一、missing clock issue

在 mux 的输出 Y 端定义了两个 generated clock,由于这是一个新的 clock 的起始点,除了在这个点上定义的 generated clock 外,其他 clock 就无法穿过这个 mux 的 Y pin 了,所以 CLK 无法正确传递到 FF1 和 FF2 上;

When a generated clock is created at a pin, all other clocks arriving at that pin are blocked unless they too have generated clock versions created at that pin.

为了在 mux 的 Y 端也有 CLK 通过,我们在 mux 的 Y 端定义新的 generated clock,如下

create_clock -period 10 CLK
create_generated_clock -name CLK_mux -combinational UMUX/Y -source CLK -master CLK -add
create_generated_clock -name CLKdiv2 -divide_by 2 UMUX/Y -source FFdiv2/CK -master CLK -add
create_generated_clock -name CLKdiv4 -divide_by 4 UMUX/Y -source FFdiv4/CK -master CLK -add
set_clock_groups -physically_exclusive -group {CLK_mux} -group {CLKdiv2} -group {CLKdiv4}

我们在 mux 的 Y 端定义了 3 个 generated clock,这样 CLK 也可以传递到 FF1 和 FF2 了;

二、The Clock Source Latency Path Issue

在我们 report_timing 时,在计算 clock latency 时,也会出现问题,具体的 timing report 如下(以 CLKdiv2 这个 clock 的 timing path 为例)。

时钟分频电路及时钟选择电路的时钟约束技巧

可以发现,在计算 launch path 时,clock 实际走的是 mux 的 C 端,实际路径穿过了 FFdiv4,这样得到的 launch path delay 更大;同时在计算 capture path 时,走的是 mux 的 A 端,这样计算出来的 capture path 的 delay 更小;导致这个问题的原因是 pt 在计算 timing 时,是尽可能找出最悲观的 path。

也就是 master clock 和 generated clock 之间的 path 无法确定为具体的哪一条所导致的。

再看 generated clock 的定义,如下

时钟分频电路及时钟选择电路的时钟约束技巧

这里我们虽然通过 -source 选项指定了 div clock 的 source 点,分别是 FFdiv2/CK 和 FFdiv4/CK,为什么工具在计算 latency 时还会选择错误的路径呢?解释如下

The -source option of the create_generated_clock command determines the identity of the master clock, and the sense (non-inverted or inverted) of that master clock. It does not steer the source latency path. Once the master clock’s identity and sense are determined, all possible paths back to that clock’s source are considered for the source latency path.

也就是说-source 并不能指定工具如何计算 clock latency!

为了解决这个问题,我们需要更改 clock 的定义方法,我们在 FFdiv 的 Q pin 添加 generated clock,并将这些 clock 作为 mux/Y 端 clock 的 master clock,如下

时钟分频电路及时钟选择电路的时钟约束技巧

在创建 generated clock 时,缺少了 -master_clock 选项,这里 补充为 -master_clock CLK。

这样我们就不在 mux 的 Y 端定义 clock 了,在 report timing 时,也可以得到正确的 timing path。

因为 master clock 和 generated clock 之间的 path 是唯一的了。

三、 MUXs, Physical Exclusivity, and Crosstalk

那么按下面的定义就没有问题吗?

时钟分频电路及时钟选择电路的时钟约束技巧

我们知道,在 mux 的 Y 端,任何时刻只能存在一个 clock,所以在 mux 的 Y 端的 clock 应该是 physical exclusive 的关系;

但是我们在上面设置的是 CLK、CLKdiv2、CLKdiv4 之间为 physical exclusive 的关系,可以在 mux/Y 之前的逻辑,这些 clock 是同时存在的,而且之间还有 crosstalk,如果直接这么设置的话,那么在 mux/Y pin 之前的 crosstalk 就被忽略了,所以要调整 clock 的定义;

对于 mux 后的电路,任何时刻只能存在一个 clock,所以我们可以在 mux/A、B、C 端定义 generated clock,这些 generated clock 之间的关系是 physical exclusive,如下

时钟分频电路及时钟选择电路的时钟约束技巧

并设置如下关系

时钟分频电路及时钟选择电路的时钟约束技巧

另外,CLK、CLKdiv2 以及 CLKdiv4 之间是有 cross talk 的,我们只需保持他们的同步关系。

如果这三个 clock 之间确定没有 timing path 的话,那么就可以设置这些 clock 的关系为 logical exclusive,这样 PT 就不会去 report 这些 clock 之间的 path 了,但是在计算 crosstalk 时,还是会正常计算。

Note that no clock group relationships exist between the clocks upstream of the MUX (CLK, CLKdiv2, and CLKdiv4) because no timing paths exist between these clocks.

If there were additional flip-flops that were clocked off these pre-MUX clocks, then any cross-clock paths would likely be valid.

If they are not valid for functional reasons, an additional logically exclusive relationship would be needed between these pre-MUX clocks.

Others

The correct way to specify the clocks in an SI analysis is to create generated clocks at:

  • any point where the clock waveform is transformed (such as at the divider outputs), PLUS
  • any point where multiple clocks converge and become statically switched, such as at a MUX output

这是 solvnet 上给出的定义 generated clock 的两个条件。

Handling Cascaded Generated Clocks

对于级联的 generated clock,应该怎么处理呢?首先按下面的情况。

时钟分频电路及时钟选择电路的时钟约束技巧

定义 clock 如下

时钟分频电路及时钟选择电路的时钟约束技巧

这些 clock 在任意时刻都只能出现一个,所以需要设置下面的关系

时钟分频电路及时钟选择电路的时钟约束技巧

完整的 clock 定义如下

时钟分频电路及时钟选择电路的时钟约束技巧

参考文章:https://solvnetplus.synopsys.com/s/article/Specifying-MUXed-Clocks-in-PrimeTime-1576002495523

扫码关注尚为网微信公众号

尚为网微信公众号
每天学习电路设计嵌入式系统的专业知识,关注一波,没准就用上了。

原创文章,作者:sunev,如若转载,请注明出处:https://www.sunev.cn/embedded/1279.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年9月15日
下一篇 2022年9月20日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注