Tcl语言:SDC约束命令create_generated_clock详解(下)

相关阅读

Tcl语言https://blog.csdn.net/weixin_45791458/category_12488978.html?spm=1001.2014.3001.5482


设定生成时钟特性

前文的末尾提到,当使用-divide by或-multiply_by选项创建生成时钟时,会根据master clock的时钟周期派生出生成时钟的周期,但对于时钟边沿的处理,两者则不一致。但是,仍然有方法在一定程度上对占空比进行设定。现在拿图1中的时钟倍频器举例说明,图2是它的波形图,假设clk的周期是20ns。

图1 时钟倍频器

图2 倍频器电路时钟波形

对clk时钟和生成时钟clk_out的定义为:

create_clock -period 20 -waveform {5 15} [get_port clk]
create_generated_clock -source [get_port clk] -multiply 2 [get_port clk_out]

而前文所说,生成时钟的周期变为10ns,而所有的沿出现的时间都除以2,如图3所示。

图3 生成倍频时钟

此时,可以通过-duty_cycle选项设定占空比,该选项只能和-multiply_by一起使用,用以表示时钟信号中占空比,继续拿图1举例,可以看出生成时钟和原时钟的占空比都为50%,如果想要一个占空比为30%的生成时钟,则可以使用下面的命令,生成时钟的占空比可以从图4中看出确实变为了30%。

create_generated_clock -source [get_port clk] -multiply 2 [get_port clk_out] 
    -add -name test -duty_cycle 30

图4 -duty_cycle选项改变倍频生成时钟占空比

如果存在不止一个高脉冲会怎么样,下面像前文一样定义一个复杂的时钟,拥有两个脉冲,占空比分别为20%和25%,并试图改变它的倍频生成时钟的占比,结果如图5所示,可以看到Design Compiler直接忽略了除第一个正脉冲之外的所有脉冲。

create_clock -period 20 -waveform {2 6 12 17} [get_port clk]
create_generated_clock -source [get_port clk] -multiply 2 [get_port clo_out] -duty_cycle 10

图5 试图改变多脉冲生成时钟的占空比

时钟沿偏移

前文介绍的-divide by和-multiply_by在生成一些波形时无能为力,因为无法控制生成信号的占空比。但-edge_shift选项使得创建任意形状的生成时钟成为了可能,下面举例说明。假设要根据图6生成图7所示的波形。

图6 原时钟波形

图7 生成时钟波形

可以使用下面的命令,这意味对于生成时钟,第一个上升沿对齐原时钟的第一个上升沿,下一个下降沿出现在原时钟的第一个上升沿后2ns,第二个上升沿出现在原时钟的第二个上升沿(第三个沿)。时钟偏移可以是正向的。也可以是负向的,这使得用-edge和-edge_shift对任意复杂波形的建模成为了可能。

create_generated_clock -source [get_port clk] -edge {1 1 3} 
    -edge_shift {0 2 0} [get_port clk_out]

生成时钟源引脚出现多个时钟

正如前文所述,如果一个引脚或端口上有多个时钟传播至此,则无法推断出生成时钟属于哪个master clock,需要显式指明。这可以使用-master_clock选项实现,只需指定参数为master_clock的名字即可,下面我们用一个例子说明这一点,对于图8所示的电路,我们在U4的输出Y上定义了两个时钟,现在假设在输出c上定义两个生成时钟,它们分别基于clk1和clk2。

图8 多个生成时钟

create_clock -name clk1 -period 10 [get_pin U4/Y]
create_clock -name clk2 -period 20 [get_pin U4/Y] -add

create_generated_clock -source [get_port U4/Y] -divide_by 1 
    -master_clock [get_clock clk1] [get_port c] -name clk1_
create_generated_clock -source [get_port U4/Y] -divide_by 1 
    -master_clock [get_clock clk2] [get_port c] -add -name clk2_

组合电路生成时钟

图9给出了一个源同步接口。在源同步接口中,时钟随着数据一起作为输出,这种结构的优点是结构时钟和数据的传输延迟相同,从而它们的延时大小不重要。接收设备可以根据输入时钟对输入数据进行采样。

图9 源同步接口

图中的dataout引脚的延迟应该根据clk_out设定。这种情况下,生成时钟应该定义在clk_out上。这可以利用-combinational选项实现,设定了该选项后,生成时钟的周期与master clock相同,相当于-divide_by 1,这时不能用其他任何选项。

create_generated_clock -name clk_out -combinational -source [get_pins clk_out0_reg/Q]
    [get_port clk_out]
相关推荐
szxinmai主板定制专家24 分钟前
【国产NI替代】基于FPGA的32通道(24bits)高精度终端采集核心板卡
大数据·人工智能·fpga开发
HIZYUAN6 小时前
AGM FPGA如何配置上拉或者下拉电阻
fpga开发
∑狸猫不是猫6 小时前
(13)CT137A- 简易音乐盒设计
fpga开发
ThreeYear_s12 小时前
基于FPGA 的4位密码锁 矩阵键盘 数码管显示 报警仿真
fpga开发·矩阵·计算机外设
Anin蓝天(北京太速科技-陈)18 小时前
252-8路SATAII 6U VPX高速存储模块
fpga开发
如何学会学习?20 小时前
2. FPGA基础了解--全局网络
fpga开发
Anin蓝天(北京太速科技-陈)21 小时前
271-基于XC7V690T的12路光纤PCIe接口卡
嵌入式硬件·fpga开发
碎碎思1 天前
FPGA新闻速览-WiMi开发基于FPGA的数字量子计算机验证技术
fpga开发·量子计算
hi941 天前
Vivado - 远程调试 + 远程综合实现 + vmWare网络配置 + NFS 文件共享 + 使用 VIO 核
嵌入式硬件·fpga开发·vivado 远程开发·vmware网络配置
乘风~&2 天前
基于发FPGA 练手智能小车顶层文件
fpga开发