FPGA时序分析与约束(7)——通过Tcl扩展SDC
一、概述
术语“Synopsys公司设计约束”(又名SDC,Synopsys Design Constraints)用于描述对时序、功率和面积的设计要求,是EDA工具中用于综合、STA和布局布线最常用的格式。本文介绍时序约束的历史概要和SDC的描述。
二、时序约束的历史
20世纪90年代初引人了时序约束。这些主要用于指定HDL 中无法捕获的设计特性和用于驱动综合。那时候,它们是 DesignCompiler的命令,为综合工具提供指导,以优化设计的面积与性能曲线。当PrimeTime结合Tcl的概念时,这些约束被修改为Tcl 格式的扩展。该集合称为SDC或Synopsys公司设计约束。多年来,该集合也扩展用于获取电源的设计要求。
SDC命令基于Tcl语言。"工具命令语言"(又称Tcl,Tool Command Language)是一种非常流行的脚本语言,是常用于开发用户接口和嵌入式系统平台的应用程序。通过使SDC 扩展到Tcl,特定于工具的命令可以与原生的Tcl结构,如变量、表达式、语句和子程序相混合,使其成为实现工具非常强大的语言。现今,大多数实现和STA工具使用SDC作为标准格式以捕获对面积、功率和性能的设计意图。然而,特定的实现工具也可以使用该集合外的附加命令,以便指导其特定的算法或功能。这些命令通常称为非SDC命令。例如,Design Compiler和PrimeTime有许多非SDC命令,它们与 SDC 结构一起使用。这些扩展中的一些有助于分析约束,如集合(collections),其提供了一种迭代设计对象列表的方式。尽管一些非SDC命令仍然用于获取设计目标,但是根据其有用性和受欢迎程度,它们会定期包含在SDC修订版中。例如,set_clock_groups是表示时钟之间域关系的简洁方法,是非SDC命令,直到SDC标准1.7(2007年3月)才被包括进去。
三、Tcl基础知识
关于Tcl基本知识,可以阅读以下文章
Tcl基础知识
https://blog.csdn.net/apple_53311083/article/details/133979550?spm=1001.2014.3001.5501
四、SDC综述
SDC格式的约束可以大致分成以下几种:
- 时序约束
- 面积和功率约束
- 设计规范约束
- 接口约束
- 特定模式和配置约束
- 设计要求的异常
- 其他命令
一斯恶约束可能属于多个类别。
4.1 时序约束
时序约束为影响工作频率的设计参数提供指导。它包括指定时钟特性、端口延迟、引脚和路径的命令。
| create_clock | create_generated_clock | set_clock_groups |
| set_clock_latency | set_clock_transition | set_clock_uncertainty |
| set_clock_sense | set_propagated_clock | set_input_delay |
| set_output_delay | set_clock_gating_check | set_ideal_latency |
| set_ideal_network | set_ideal_transition | set_max_time_borrow |
| set_resistance | set_timing_derate | set_data_check |
| group_path | set_drive | set_load |
| set_input_transition | set_fanout_delay |
4.2 面积和功率约束
面积与功率约束为面积和功率提供指导的命令,其中设计必须适合面积和功率要求达到最优。下表给出了此类约束:
| set_max_area | create_voltage_area |
| set_level_shifter_threshold | set_max_dynamic_power |
| set_level_shifter_strategy | set_max_leakage_power |
4.3 设计规则约束
设计规则约束包括为目标技术的某些要求 提供指导的命令,下表列出了此类约束:
| set_max_capacitance | set_min_capacitance |
| set_max_transition | set_max_fanout |
4.4 接口约束
接口约束包括为假象设计提供指导的命令,此设计需要构造电路单元,同时这些电路单元和子系统、芯片或Soc相连或与之交互,下表给出了此类约束:
| set_drive | set_driving_cell | set_input_transition |
| set_load | set_fanout_load | set_port_fanout_number |
| set_input_delay | set_output_delay |
4.5 特定模式和配置约束
假设分析的约束包括一些命令,这些命令帮助设计人员对端口和引脚的允许值做出假设。通过在特定工作模式或任意工作模式下明确排除不可能出现的情况,这些命令有助于对特定模式的设计进行更好地优化。下表给出了此类约束:
| set_case_analysis | set_logic_dc |
| set_logic_zero | set_logic_one |
4.6 设计约束异常
该类别包括帮助设计人员放宽要求地命令,此命令是由其他命令所规定的,从而提供了约束放宽的适用范围,下表给出了此类约束,表格中标有星号的命令也可提供额外的收紧(而不是放宽)。
| set_false_path | set_multi_cycle_path | set_disable_timing |
| set_max_delay* | set_min_delay* |
4.7 其他命令
其余的SDC命令属于此类别。这些命令对工作条件、线负载模型、单位和时序约束版本提供指导。下表给出了这些命令:
| set_write_load_model | set_wire_load_mode |
| set_wire_load_selection_group | set_wire_load_min_block_size |
| set_units | set_operating_conditions |
| sdc_version |
五、SDC中的设计查询
除了前述的类别之外,SDC标准还提供了访问有关设计信息的一种方法,以便于设计查询、遍历和浏览。将它们与SDC约束和Tcl脚本结合,可以有效地将设计要求应用于设计中的正确位置。下表给出如下命令:
| 命令 | 描述 |
| get_cells | 返回设计或库元器件的实例 |
| get_ports | 返回设计的输入(input)、输入输出(inout)、输出(output)端口 |
| get_pins | 返回设计端口或元器件引脚的实例 |
| get_nets | 返回连接到端口或引脚的网络 |
| get_clocks | 返回设计中的时钟 |
| all_inputs | 返回设计中所有输入和输入输出(理论上也是输入)端口 |
| all_outputs | 返回设计中所有输出和输入输出(理论上也是输出)端口 |
| all_registers | 返回设计中的所有寄存器 |
| all_clocks | 返回设计中的所有时钟 |
| get_libs | 返回库列表 |
| get_lib_cells | 返回库中的元器件列表 |
| get_lib_pins | 返回库元器件中的引脚列表 |
| current_design | 为后续的命令和查询设置设计范围 如果没有给出参数,报告当前范围 |
六、小结
由于SDC符合Tcl标准,所以大部分支持SDC的工具支持原生Tcl。用户可以将Tcl的编程功能和SDC相结合,以更有效的方式指定设计要求。现在,SDC是行业标准格式,这有助于推动设计实现工具以满足设计的时间、功率和面积要求。
相关文章:
FPGA时序分析与约束(7)——通过Tcl扩展SDC
一、概述 术语“Synopsys公司设计约束”(又名SDC,Synopsys Design Constraints)用于描述对时序、功率和面积的设计要求,是EDA工具中用于综合、STA和布局布线最常用的格式。本文介绍时序约束的历史概要和SDC的描述。 二、时序约束…...
C++面试——多线程详解
C11提供了语言层面上的多线程,包含在头文件<thread>中。它解决了跨平台的问题,提供了管理线程、保护共享数据、线程间同步操作、原子操作等类。C11 新标准中引入了5个头文件来支持多线程编程,如下图所示: 多进程与多线程 多…...
matlab 布尔莎七参数坐标转换模型
目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。爬虫自重,把自己当个人。 一、算法原理 算法原理与实现代码已在免费文章:布尔莎七参数坐标转换模型一文中给出,不想看付费文章直接跳转即可。 二、代码实现 clc; clear; close all; %% --...
Android---StartActivity启动过程
在手机桌面应用中点击某一个 icon 之后,最终是通过 startActivity 去打开某一个 Activity 页面。我们知道,Android 中的一个 APP 就相当于一个进程。所以,startActivity 操作中还需要判断,目标 Activity 的进程是否已经创建。如果…...
隐私计算python实现Paillier同态加密
1.基本概念 Paillier同态加密是一种公钥加密方案,具有同态加密的特性。它由Pascal Paillier于1999年提出。 Paillier同态加密基于数论问题,其安全性基于大整数分解问题和离散对数问题的困难性。该方案可以用于保护隐私数据,同时支持在加密状态…...
代码随想录打卡第五十五天|● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组
300.最长递增子序列 **题目:**给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0…...
C# 创建Oceanbase ODBC数据源 DSN
需要管理员权限打开VS,因为只有管理员权限可以修改注册表 using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.Odbc; using System.Diagnostics; using System.Drawing;…...
C++ 常用函数汇总#include<algorithm>(3万字总结)
文章目录 1. 排序(Sorting)1.1 sort(first, last):对指定范围内的元素进行升序排序1.2 stable_sort(first, last):在保持相等元素的相对顺序的情况下对指定范围内的元素进行排序1.3 partial_sort(first, middle, last):对范围内的元素进行部分排序,使得前部分是最小的,但…...
Google Archive Patch 基础应用代码记录
项目地址 Google Archive Patch 前置 <!-- 差量应用模块 --> <dependency><groupId>com.google.archivepatcher</groupId><artifactId>archive-patch-applier</artifactId><version>1.0.4</version><scope>test</…...
机器学习——代价敏感错误率与代价曲线
文章目录 代价敏感错误率实现代价曲线例子 代价敏感错误率 指在分类问题中,不同类别的错误分类所造成的代价不同。在某些应用场景下,不同类别的错误分类可能会产生不同的代价。例如,在医学诊断中,将疾病患者错误地分类为健康人可…...
如何利用 ChatGPT 提升编程技能
目录 前言代码命名与 ChatGPT设计模式与 ChatGPT代码重构与 ChatGPT代码优化与 ChatGPTChatGPT 的潜在挑战与限制成功案例分析最佳实践与注意事项结语 前言 编程是一项充满创造性和挑战的任务,但也是一个需要花费大量时间和精力的领域。在日益复杂的软件开发环境中…...
ChatGPT:@EqualsAndHashCode(callSuper = false)是什么意思
ChatGPT:EqualsAndHashCode(callSuper false)是什么意思 EqualsAndHashCode(callSuper false)是什么意思? ChatGPT: EqualsAndHashCode(callSuper false) 是 Java 中的 Lombok 注解,用于自动生成 equals() 和 hashCode() 方法…...
docker部署的mariadb忘记密码
docker 里的 mariadb 数据库密码忘了,如果以前我会选择直接干掉重装,但是数据怎么办? 1 数据量小 就跳过密码登录进去备份出来 2 想办法改掉密码 我直接选择后者,跳过密码,mariadb10.4以后不能直接改密码了ÿ…...
一体化模型图像去雨+图像去噪+图像去模糊(图像处理-图像复原-代码+部署运行教程)
本文主要讲述了一体化模型进行去噪、去雨、去模糊,也就是说,一个模型就可以完成上述三个任务。实现了良好的图像复原功能! 先来看一下美女复原.jpg 具体的: 在图像恢复任务中,需要在恢复图像的过程中保持空间细节…...
[java/力扣110]平衡二叉树——优化前后的两种方法
分析 根据平衡二叉树的定义,只需要满足:1、根节点两个子树的高度差不超过1;2、左右子树都为平衡二叉树 代码 public class BalancedBinaryTree {public class TreeNode{int val;TreeNode left;TreeNode right;TreeNode(){}TreeNode(int va…...
吉他、班卓琴和贝斯吉他降分器:Arobas Music Guitar 8.1.1
Arobas Music Guitar 是一款专业的吉他、班卓琴和贝斯吉他降分器。在熟练的手中,它不仅可以让您创作,还可以编辑、聆听和录制,以及导入和导出乐谱。如果有人感兴趣的话,录音是在八个轨道上进行的,你可以为每个轨道单独…...
cocos tilemap的setTileGIDAt方法不实时更新
需要取消勾选 Enable Culling。同时代码添加:markForUpdateRenderData函数。 floor.setTileGIDAt(102427,newP.x,newP.y,0); //中心 floor.markForUpdateRenderData(); 具体问题参考官网说明: Cocos Creator 3.2 手册 - 项目设置...
机器学习---使用 TensorFlow 构建神经网络模型预测波士顿房价和鸢尾花数据集分类
1. 预测波士顿房价 1.1 导包 from __future__ import absolute_import from __future__ import division from __future__ import print_functionimport itertoolsimport pandas as pd import tensorflow as tftf.logging.set_verbosity(tf.logging.INFO) 最后一行设置了Ten…...
铁合金电炉功率因数补偿装置设计
摘要 由于国内人民生活水平的提高,科技不断地进步,控制不断地完善,从而促使功率因数补偿装置在电力等系统领域占据主导权,也使得功率因数补偿控制系统被广泛应用。在铁合金电炉系统设计领域中,功率因数补偿控制成为目前…...
表格识别软件:科技革新引领行业先锋,颠覆性发展前景广阔
表格识别软件的兴起背景可以追溯到数字化和自动化处理的需求不断增加的时期。传统上,手动处理纸质表格是一项费时费力的工作,容易出现错误,效率低下。因此,开发出能够自动识别和提取表格数据的软件工具变得非常重要。 随着计算机…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
医疗AI模型可解释性编程研究:基于SHAP、LIME与Anchor
1 医疗树模型与可解释人工智能基础 医疗领域的人工智能应用正迅速从理论研究转向临床实践,在这一过程中,模型可解释性已成为确保AI系统被医疗专业人员接受和信任的关键因素。基于树模型的集成算法(如RandomForest、XGBoost、LightGBM)因其卓越的预测性能和相对良好的解释性…...
