静态时序分析简明教程(四)]时钟常规约束

简介: 静态时序分析简明教程(四)]时钟常规约束

一、写在前面


一个数字芯片工程师的核心竞争力是什么?不同的工程师可能给出不同的答复,有些人可能提到硬件描述语言,有些人可能会提到对于特定算法和协议的理解,有些人或许会提到对于软硬件的结合划分,作者想说,这些说法,其实对也不对,硬件描述语言,翻来覆去无非是always和assign这几个语句的反复使用,而一些基础的协议算法,深究起来其实也并不复杂,于作者而言,在常规的技能以外,有两项额外的技能颇为重要,其中之一便为sdc/STA的分析能力,它的重要之处在于作为桥梁建立了前端和后端的连接,虽然对于DE工程师而言,初版交付的sdc往往不甚准确,也没有办法通过这份sdc生成一份无误的timing report,但sdc的内容体现却是完完整整的将时序约束从行为级的描述映射到了gate level这样一个真实的电路层次上面。

写此专栏,一为学习记录,二为交流分享,以犒粉丝读者。


1.1 快速导航链接·

静态时序分析简明教程(一)绪论

静态时序分析简明教程(二)基础知识:建立保持时间,违例修复,时序分析路径

静态时序分析简明教程(三)备战秋招,如何看懂一个陌生的timing report

静态时序分析简明教程(四)时钟常约束

静态时序分析简明教程(五)时钟其他特性

静态时序分析简明教程(六)端口延迟

静态时序分析简明教程(七)完整端口约束

静态时序分析简明教程(八)虚假路径

静态时序分析简明教程(九)多周期路径

静态时序分析简明教程(十)组合电路路径

静态时序分析简明教程(十一)模式分析与约束管理

静态时序分析简明教程(十二)浅议tcl语言


二、时钟的特征


首先,我们需要强调的是,我们静态时序分析简明教程四的前提,是同步设计电路,STA的静态时序分析,对异步电路,是无效的。

其次,在我们对时钟进行约束的条件下,我们需要掌握时钟的三个特性,他们分别是:


  1. 周期:是指经过特定时间之后时钟信号重复的动作。
  2. 有效沿:时钟沿分为上升沿和下降沿。
  3. 占空比:正相位时间在整个时钟周期所占的百分比。


三、create_clock


create_clock -period period_value
    [source_objects]
    [-name clock_name]
    [-waveform edge_list]
    [-add]
    [-comment comment_string]


3.1 定义时钟周期

-period 选项用于定义时钟周期,通常情况下,时钟信号的单位默认是ns,但是我们也可以通过set_units设置ps等时钟单位。

create_clock -period 10


上面的语句意味着,我们设置了一个时钟周期为10ns的时钟信号,即100Mhz的时钟频率。


3.2 标识时钟源

当我们确定了时钟周期后,我们也需要将时钟信号对应于某一个源对象(比如说是一个clk的端口,或者是触发器的引脚P、网络N),这一步操作就像是将一个STA中的时钟信号映射到电路层面的某一个对象加以驱动

我们可以使用如下的语句加以标识


#代表作为时钟源端口
create_clock -period 10 [get_ports A]
#代表作为时钟源的网络
create_clock -period 10 [get_nets N]
#代表作为时钟源的引脚,若触发器的名称为FF的话
create_clock -period 10 [get_pins FF/P]


3.3 命名时钟

当我们将端口做映射后,一个紧接着出现的问题就是这个时钟的命名,假如我们不单独指定名称,工具会将一个默认的名称赋值给该时钟,在STA的时序分析中,时钟的名称是很重要的信息,因为一旦时钟信号被定义和命名的话,其他所有依赖这个时钟的SDC命令,只需要提到该时钟即可。我们通过 -name 的尾缀来命名时钟,比如

#创建一个10ns的时钟,映射到端口A,时钟命名为PCLK
create_clock create_clock -period 10 [get_ports A] -name PCLK


3.4 指定占空比

这里我们可以简略一点,因为对于数字电路而言,占空比不是1:1的电路结构,种类很少,但假如我们想要指定占空比的话,我们可以使用 -waveform 来进行,贴一下资料地址,感兴趣的读者可以自行查阅学习

Intel® Quartus® Prime Standard Edition User Guide: Timing Analyzer


3.5 同源多时钟

当我们设计一个模块的时候,很多时候它的工作频率并不固定,比如一个UART模块,我们可能会将它用在200MHz的APB总线上,也可能会将它用在400M/1GHz的APB总线上,假如这个设计需要在时钟源指定多个时钟,从而满足多IO速度协议的需求,我们可能就需要在SDC中,对于进行约束,我们可以以“-add”的形式增加尾缀,使STA的过程中可以考虑到所有的时钟。假如我们不增加"-add"的话,后一个时钟信号可能就会覆盖掉前一个时钟信号

#同时对CLK端口做100MHz和50MHz的时钟约束
create_clock -name C1 -period 10 [get_ports CLK]
create_clock -name C2 -period 20 [get_ports CLK] -add


3.6 注释时钟

除了使用tcl语言的注释外,SDC也给工程师们提供了注释的选项,使用 -comment的尾缀,我们可以将时钟信号的文档信息,以备注的形式加以添加,比如:


#设定一个时钟信号,周期为10ns,信号名称为PCLK,映射到clk端口,备注为“Clock for UART input”
create_clock -period 10 -name PCLK 9get_ports clk] -comment "Clock for UART input"


3.7 虚拟时钟

最终的一个概念是虚拟时钟,顾名思义,虚拟时钟没有办法映射到真实的端口网络或引脚,但是他们的出现可以帮助设计者使用更为灵活的时钟特性(比如时钟偏移等)去进行检查,命令如下:


#建立一个周期为10ns,名称为vclk,不映射到具体端口的时钟(虚拟时钟)
create_clock -period 10 -name vclk


四、总结


本篇文章中,我们讨论了STA分析/SDC约束中最为基本的命令——时钟约束,具体的内容可以区分为创建时钟,命名时钟,注释时钟,虚拟时钟,标识时钟这样的一些基本内容,而我们在下一节中,我们会讨论时钟信号的其他特性,如分频,倍频,门控等内容。


相关文章
|
4月前
|
前端开发 JavaScript
构建一个动态时钟
构建一个动态时钟
|
3月前
软件的质量特性及其子特性快速记忆表
软件的质量特性及其子特性快速记忆表
31 0
|
10月前
|
异构计算
【FPGA】基本实验步骤演示 | Verilog编码 | 运行合成 | 设备/引脚分配 | 综合/实施 | 设备配置 | 以最简单的逻辑非为例
【FPGA】基本实验步骤演示 | Verilog编码 | 运行合成 | 设备/引脚分配 | 综合/实施 | 设备配置 | 以最简单的逻辑非为例
83 0
|
4月前
静态时序分析:工艺库的特征化条件和工作条件
静态时序分析:工艺库的特征化条件和工作条件
35 0
|
算法 异构计算
基于FPGA的控制参数在线实时调整的自适应PI控制器设计,包含testbench测试程序
基于FPGA的控制参数在线实时调整的自适应PI控制器设计,包含testbench测试程序
204 0
|
机器学习/深度学习 定位技术 计算机视觉
即插即用 | CEASA模块给你所有,小目标精度提升的同时速度也变快了(一)
即插即用 | CEASA模块给你所有,小目标精度提升的同时速度也变快了(一)
374 0
|
数据可视化
即插即用 | CEASA模块给你所有,小目标精度提升的同时速度也变快了(二)
即插即用 | CEASA模块给你所有,小目标精度提升的同时速度也变快了(二)
132 0
|
算法 前端开发 芯片
[静态时序分析简明教程(八)]虚假路径
[静态时序分析简明教程(八)]虚假路径
[静态时序分析简明教程(八)]虚假路径
【蓝桥杯嵌入式】STM32定时器的配置,解析预分频系数和重装载值与时钟频率的关系
【蓝桥杯嵌入式】STM32定时器的配置,解析预分频系数和重装载值与时钟频率的关系
782 0