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

STA的时钟常规约束

    • 一、写在前面
      • 1.1 快速导航链接·
    • 二、时钟的特征
    • 三、create_clock
      • 3.1 定义时钟周期
      • 3.2 标识时钟源
      • 3.3 命名时钟
      • 3.4 指定占空比
      • 3.5 同源多时钟
      • 3.6 注释时钟
      • 3.7 虚拟时钟
    • 四、总结

一、写在前面

一个数字芯片工程师核心竞争力是什么?不同的工程师可能给出不同的答复,有些人可能提到硬件描述语言,有些人可能会提到对于特定算法和协议的理解,有些人或许会提到对于软硬件的结合划分,作者想说,这些说法,其实对也不对,硬件描述语言,翻来覆去无非是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约束中最为基本的命令——时钟约束,具体的内容可以区分为创建时钟,命名时钟,注释时钟,虚拟时钟,标识时钟这样的一些基本内容,而我们在下一节中,我们会讨论时钟信号的其他特性,如分频,倍频,门控等内容。

你可能感兴趣的:(静态时序分析,verilog,芯片,fpga,fpga开发,硬件架构)