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约束中最为基本的命令——时钟约束,具体的内容可以区分为创建时钟,命名时钟,注释时钟,虚拟时钟,标识时钟这样的一些基本内容,而我们在下一节中,我们会讨论时钟信号的其他特性,如分频,倍频,门控等内容。

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

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

    备战秋招,如何看懂一个陌生的timing report 一.写在前面 1.1 快速导航链接· 二.Timing Report 2.1 起始点与终止点 2.2 路径时钟域的归属 2.2 建立时间检查与保 ...

  2. [静态时序分析简明教程(一)] 绪论

    静态时序分析简明教程一:绪论 一.写在前面 1.1 快速导航链接· 二.什么是静态时序分析 三.为什么需要时序约束 四.约束的第一步:综合 4.1 什么是综合 4.2 综合与时序约束的关系 4.2.1 ...

  3. 静态时序分析简明教程(五)]生成时钟的sdc约束方法

    生成时钟的sdc约束方法 一.写在前面 1.1 快速导航链接· 二.生成时钟 2.1 标识时钟源 2.2 时钟命名 2.3 设定生成时钟的特性 2.3.1 -edges 2.3.2 -divide_b ...

  4. 静态时序分析简明教程(七)]端口延迟

    端口延迟 一.写在前面 1.1 快速导航链接· 二.端口延迟 2.1 输入有效 2.2 输出有效 2.3 set_input_delay 2.3.1 -clock clock_name 2.3.2 - ...

  5. FPGA之道(80)静态时序分析(六)常用时序约束介绍(基于ISE的UCF文件语法)

    文章目录 前言 常用时序约束介绍 时序环境约束 分组时序约束 TNM TNM_NET TIMEGRP 常用时序约束 周期约束 输入时钟周期约束 内部时钟周期约束 关联时钟周期约束 差分时钟周期约束 输 ...

  6. Javascript简明教程四 作用域

    上面讲了变量的和函数基本使用方式. 但是变量的使用还有一些问题,如果不明白这些问题是很容易出错的. 1.如果声明在全局作用域内,则该变量为全局变量 var x=1; function f(){ ret ...

  7. Linux下CMake简明教程(四)不同目录下多个源文件

    代码在git 一般来说,当程序文件比较多时,我们会进行分类管理,把代码根据功能放在不同的目录下,这样方便查找.那么这种情况下如何编写CMakeLists.txt呢? 我们把之前的源文件整理一下(新建2 ...

  8. 【Python简明教程四】Python语法之注释

    引言 注释的最大作用是提高程序的可读性,在开发过程中非常有必要加上注释.Python 支持两种类型的注释,分别是单行注释和多行注释. 1 单行注释 Python 使用井号#作为单行注释的符号,语法格式 ...

  9. IC验证:静态时序分析

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.数字IC设计流程(前端+后端) 二.静态时序分析在芯片设计中的地位 三.静态时序分析的作用 四.静态时序分析过程 ...

最新文章

  1. 老鸟运维该何去何从?
  2. java中servletcontext_java中获取ServletContext常见方法
  3. mycat连接mysql时间_Mycat连接MySQL 8时的注意事项
  4. python爬取知乎标题_python爬虫 爬取知乎文章标题及评论
  5. QT的foreach用法
  6. php 图片 处理,php图片处理类
  7. Batman崛起之地——Gotham
  8. 光流(五)--HS光流及稠密光流
  9. myeclipse 8.5安装freemarker插件方法
  10. 从单张图重建三维人体模型综述(六)
  11. arcpy.ProjectRaster_management
  12. 三极管特性——截止区、放大区、饱和区
  13. 透明图片下载求全透明png图片_微信“全透明”模式,让你的微信真正实现隐身效果!...
  14. 家有千金之冰糖绿豆汤
  15. 数字信号处理2-截止频率
  16. 语c语言描写,语c动作描写
  17. PAT_乙级_1003_筱筱
  18. 写《2020年11月线上自行车业务分析报告》
  19. python twisted教程_twisted基础教程.pdf
  20. Adobe acrobat修改批注名字

热门文章

  1. 岁月如歌:盘点网易云音乐上关于怀旧的歌单
  2. 35款开源工具助力IOT
  3. 如何查到营业执照_怎么查别人的营业执照
  4. OSChina 周一乱弹 —— 谁能与你风雨兼程?
  5. 数据库系统--关系代数中笛卡尔积,选择,投影,自然连接,除运算
  6. 计算机毕业设计PHP网上书城网站(源码+程序+VUE+lw+部署)
  7. 服装品牌SPA利器,成就谁的未来?
  8. windows的一些装B用法
  9. wmm功能与802.11n
  10. ts11_pmdarima_edgecolor_bokeh plotly_Prophet_Fourier_VAR_endog exog_Granger causality_IRF_Garch vola