Primetime 的使用

2023-11-12

开始

先建立目录并将PrimeTime本身所带的一个例子拷到新建的目录下,在下面的内容中将要用到这个例子。

mkdir primetime

cd primetime

cp –r $SYNOPSYS/doc/pt/tutorial .

cd tutorial


运行PrimeTime:  pt_shell
后面的 命令都是在这个shell之下运行的
1. 编译时序模型 ( 这1 节中的操作并非对所有的设计都是必需的
1.1编译 Stamp Model
Stamp model 是针对于复杂模块--例如 DSP核心或者 RAM--而建立的静态时序模型。它一般是为晶体管级的设计而创建的,在设计中没有门级的网表。
一个 Stamp model 包括两个源文件:
1).mod 文件,包含对 pin-to-pin 的 arc 的描述(不包括延时)。
2).data 文件,包括.mod 文件中描述的每一个 arc 的延迟数据。
例如,对于 AM2910 设计中的 Y 模块(见图 2-2),编译其 Stamp model:
compile_stamp_model -model_file Y.mod -data_file Y.data -output Y
其中 Y.mod 和 Y.data 是源文件,编译后生成了两个.db 文件:Y_lib.db 和 Y.db。
其中 Y_lib.db 是一个库文件,其中包括一个被称为 core 的单元;而 Y.db 是一个
设计文件,是 Y_lib.db 中的单元 core 的例化。正是由于它们之间的这种关系,为
了在链接时能够正确地例化 Y.db,库 Y_lib.db 必须要加入到链接路径(link_path)中去。
1.2   编译快速时序模型
对于设计中的某些未完工的模块--比如说,该模块的 HDL,或者完整的
stamp model 没有完成--你可以创建一个快速时序模型来进行分析。快速时序模
型是一个临时性的模型,可以提供进行时序分析而需要的时序信息。实际上,快速
时序模型是包含一系列 pt_shell 命令的文件,而不是语言。这样比使用 Stamp mo
-del 的语言去写一个模型花费的时间更少。
例如为 AM2910 中的 STACK 模块创建一个快速时序模型:
source -echo stack.qtm.pt
report_qtm_model;
save_qtm_model -output STACK -format db 
其中 stack.qtm.pt 是一个脚文件,描述了建立快速时序模型所需要的所有
pt_shell 命令,所以在这里直接 source 就可以了。它的具体内容参见附录[1]。
创建好之后,用 save_qtm_model 命令把该模型保存为.db 格式的文件。同其
他类型的模型一样,PrimeTime 也创建了两个.db 文件,STACK_lib.db 和 STACK
.db。

Primetime <wbr>的使用

进入正题:
作一些基本的环境设置和准备工作
设置查找路径: set search_path "."                         这里“.”代表  当前目录
设置链接路径: set link_path "* pt_lib.db STACK_lib.db Y_lib.db"
读入设计文件: read_db AM2910.db     (还支持read_verilog   read_edif   read_vhdl 等)
链接顶层设计: link_design AM2910   
(显示当前已载入的设计: pt_shell>list_designs  得到当前载入单元的信息: pt_shell>report_cell
设置操作条件和线上负载/端口驱动 负载等
set_operating_conditions -library pt_lib -min BCCOM -max WCCOM
set_wire_load_mode top
set_wire_load_model -library pt_lib -name 05x05 -min
set_wire_load_model -library pt_lib -name 20x20 -max
set_driving_cell -lib_cell IV -library pt_lib [all_inputs]
set_capacitance 0.5 [all_outputs]         对所有的输出端设置50pf的电容负载。
对有关时钟的参数进行设置
create_clock -period 30 [get_ports CLOCK]
set clock [get_clock CLOCK]
set_clock_uncertainty 0.5 $clock
set_clock_latency -min 3.5 $clock
set_clock_latency -max 5.5 $clock
set_clock_transition -min 0.25 $clock
set_clock_transition -max 0.3 $clock
当然也可以这样设置:
create_clock -period 30 -waveform [0 15] clk
set_clock_uncertainty 0.5  [get_clocks clk]
set_clock_latency -min 3.5 [get_clocks clk]
set_clock_latency -max 5.5 [get_clocks clk]
set_clock_transition -min 0.25 [get_clocks clk]
set_clock_transition -max 0.3 [get_clocks clk]
设置时钟-门校验(clock-gating checks)
设定时钟-门的建立和保持时间的数值,以及最小的脉冲宽度。
set_clock_gating_check -setup 0.5 -hold 0.1 $clock
set_min_pulse_width 2.0 $clock
在开始静态时序分析之前,注意要执行下面的指令进行检查:
check_timing 
该命令会检查该设计的结构和约束,给出可能存在的时序问题,如果存在问题的话
则给出 errors 或者 warnings。
设置端口延迟并检验时序
对于所有与时钟相关的端口,都要设置输入、输出的延迟。
set_input_delay 0.0 [all_inputs] -clock $clock
set_output_delay 2.0 [get_port INTERRUPT_DRIVER_ENABLE]   -clock $clock
set_output_delay 1.25 [get_port MAPPING_ROM_ENABLE]   -clock $clock
set_output_delay 0.5 [get_port OVERFLOW]   -clock $clock
set_output_delay 1.0 [get_port PIPELINE_ENABLE]   -clock $clock
set_output_delay 1.0 [get_port Y_OUTPUT]   -clock $clock
或者最简单的:(相当于时序约束)
set_input_delay 15.0 -clock clk  [all_inputs]  
set_output_delay 15.0 -clock clk  [all_inputs]  
保存以上的设置
使用 write_script 命令将所作的设置保存到一个脚文件中,这样在下一次运行的时候可以直接通过该文件来完成所有的设置。
该命令可以生成三种格式的文件:
write_script -format dctc1 -output AM2910.tc1
write_script -format dcsh -output AM2910.dcsh
write_script -format ptsh -output AM2910.pt
运行基本的分析:
 得到约束报告
 report_constraint
如果在命令中加入-verbose 参数,将在 report 中得到更详细的细节。如果加入-all_violators 参数,在 report 中会列出对于每一项约束,设计中违反最严重的端点。
 report_constraint -all_violators
得到基于路径的时序分析
report_timing 
在没有任何命令参数时,在 report 中列出的是对于每个 path group,该设计中最长的最大路径。如果需要的是该设计中最短的最小路径的话,可以在命令中加上-delay min 参数。
或者加一些参数
report_timing  -to [all_outputs]
当然在分析前也可以添加时序例外后,再进行约束报告和时序分析。

注意: 读写SDF

对于起初的静态时序分析,估计网络的延时信息是基于一个连线负载模式。 实际上延时是与设计中单元和网络的布局布线有关的。

一个布局器或一个布线器提供更详细和更精确的延时信息,可以用来提供给PrimeTime作更精确的分析。这个过程被称作反标(back-annotation)。反标信息经常是以标准延时格式Standard Delay Format(SDF)提供的。


所以, 在布局布线后,现在的网表中已经包括了实际的时钟数信息。所以上面关于

对有关时钟的参数进行设置

create_clock -period 30 -waveform [0 15] clk
set_clock_uncertainty 0.5  [get_clocks clk]
set_clock_latency -min 3.5 [get_clocks clk]
set_clock_latency -max 5.5 [get_clocks clk]
set_clock_transition -min 0.25 [get_clocks clk]
set_clock_transition -max 0.3 [get_clocks clk]
这一段,,在布局布线后可以直接改为
create_clock -period 30 -waveform [0 15] clk
set_propagated_clock [get_clocks clk]
set_propagated_clock 命令可以根据时钟数,自动计算时钟信号到达终点的延时和偏移。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Primetime 的使用 的相关文章

  • Unable to find a single main class from the following candidates

    项目启动编译时报错 错误原因 当前项目下无法找到单个main方法 因为当前项目有两个main方法 有时可能有多个 此些main方法会列在 括号中 解决方式 把非启动类中的那些main方法注释掉 保证只有一个main方法
  • cocos自定义类 绑定到lua

    1 按照 frameworks cocos2d x tools tolua下的README mdown的指示一步一步做下去 务必要和文件中描述的一样 我已经被这个坑爹的东西坑的很惨了 检查这个有没有配置好的方法是 运行下那个genbindi
  • 循环依赖 三级缓存解决

    循环依赖的产生 A对象里面依赖着B对象 B对象依赖着A对象 流程 当A开始实例化A 然后初始化A 再初始化的A的时候 去实例化B 然后再初始化B 初始化B的时候在去实例化A 产生一个循环依赖 spring设置三级缓存来解决这个问题 Obje
  • 校招面试重点汇总之多线程(不多但都是高频面试题)

    一 进程和线程有什么区别 进程和线程都是操作系统中用来实现多任务的概念 但是它们之间有一些重要的区别 如下所述 1 定义方面 进程 进程是操作系统中分配资源的基本单位 是正在运行中的一个程序 一个进程可以包含多个线程 每个进程有自己独立的地
  • vscode检测到#include错误,请更新includePath。解决方法

    vscode检测到 include错误 请更新includePath 解决方法 最近电脑重做 重新安装了一边vscode 但是写代码的时候发现头文件会标错 显示无法找到 下面是我的解决办法 Linux 子系统 执行命令查看g 包含路径 g
  • Android Studio开发环境搭建及本地Gradle设置方法

    Android Studio开发环境搭建及本地Gradle设置方法 在进行Android应用程序开发时 Android Studio是一款非常强大的集成开发环境 IDE 它提供了丰富的工具和功能 帮助开发者轻松创建 测试和调试Android
  • java token生成规则_token的生成原理 使用方法!

    什么是token Token是服务端生成的一串字符串 以作客户端进行请求的一个令牌 当第一次登录后 服务器生成一个Token便将此Token返回给客户端 以后客户端只需带上这个Token前来请求数据即可 无需再次带上用户名和密码 基于 To
  • [解决办法]已经安装了数字证书,但是谷歌浏览器登录https协议的web系统时仍然提示证书不受信任...

    已经安装了数字证书 但是谷歌浏览器登录https协议的web系统时仍然提示证书不受信任 如下图 解决办法 1 单击Chrome浏览器右侧设置菜单 选择 设置 2 拖至页面下方 单击 显示高级设置 3 单击高级设置中的 HTTPS SSL 处
  • IDEA 热部署项目

    使用Idea 开发SpringBoot项目 修改完代码以后 要重新启动 Application 才可以看到效果 这样做开发效率肯定是大受影响的 可以通过热部署 热更新来实时加载更改 提高效率 1 引入热部署插件
  • 电脑蓝屏终止代码irql_一分钟教你看懂蓝屏代码,轻松解决电脑蓝屏问题

    电脑突然蓝屏的情况 想必很多朋友都遇到过吧 不知道你们是怎么解决的呢 重装系统 还是找专业人员维修呢 其实只要够看懂蓝屏代码 就能 对症下药 有些问题自己就能解决 今天小源就分享一些常见的蓝屏代码给大家 下面我们一起来看看吧 一 0X000
  • Python中的字典索引

    Python中的符合数据类型 字符串 列表和序列 它们用整数作为索引 如果你试图用其他的类型做索引 就会产生错误 gt gt gt list 1 2 3 gt gt gt list 0 1 gt gt gt list one Traceba
  • 【Linux】序列化和反序列化

    文章目录 定义 利用 Json 实现序列化反序列化 Json 的认识 Jsoncpp 库的下载与认识 实现序列化 实现反序列化 在网络编程中 直接使用 结构体 进行数据传输会出错 因为本质上socket无法传输结构体 我们只有将结构体装换为
  • 接口测试用例怎么写?一文1600字教你写一个优秀的接口测试的测试用例

    一 用例设计1 1 接口测试概念 接口测试 测试系统间接口的一种测试 测试的对象主要是接口 主要是测试外部系统与所测系统之间以及内部系统之间的交互点 2 接口测试方法 a 可以通过开发脚本代码进行测试 b 可以通过开源免费的接口调用调试工具
  • 虚拟文件系统 (VFS)-基于linux3.10

    引言 虚拟文件系统 VFS VirtualFileSystem 介于具体的文件系统和C库之间 其用提供一个统一的方法来操作文件 目录以及其它对象 其能够很好的抽象具体的文件系统 在linux上具体的文件系统主要分为三类 l 基于非易失性的存
  • 【CV with Pytorch】第 4 章 :构建图像分割模型

    我们周围的图像有不同的纹理 图案 形状和大小 它们携带着大量的信息 这些信息很容易被人眼和大脑理解 但计算机却不太容易理解 图像分割是一个问题集 我们试图训练计算机理解图像 以便它们可以分离不同的对象并将相似的对象分组 这可以是类似像素强度
  • 在远程服务器上执行本地的shell脚本

    1 使用ssh实现 ssh user hostname C bin bash lt test sh 2 使用expect实现 采用的策略就是先在本地通过expect把shell脚本推送到远程服务器上 之后再用expect模拟登录之后 先给远
  • Join中on条件是null的问题讨论

    MySQL dbs gt select from test1 id stu id stu age 1 1 25 2 1 NULL 2 rows in set 0 00 sec MySQL dbs gt select from test2 i
  • 【Vue + Koa 前后端分离项目实战9】使用开源框架==>快速搭建后台管理系统 -- part9 项目总结

    去读书 去学一门手艺 去做任何自己喜欢的事 永远不会晚 才不会辜负这份人生 本博客教学视频来源于imoom 0到1快速构建自己的后台管理系统 课程 官方演示地址 https talelin com 目录 一 项目介绍 1 技术准备 2 学到
  • doris tips

    1 schema表格式字段长度 如果是数字 字母这种的长度等于hive sql里面 length variable 的长度 如果是中文要占3 4个Char 2 表增加分区 可以通过脚本自己构造多个sql 语句 类似 ALTER TABLE
  • 【C语言】rand()函数(如何生成指定范围随机数)

    一 rand 函数简介 我们先来看一下cplusplus com The C Resources Network网站上rand函数的基本信息 系统生成随机数时需要使用rand函数 rand 会返回一个范围在0到RAND MAX 32767

随机推荐

  • groovy语言单元测试(spock)

    一 spock groovy单元测试的五种情况 单元测试 given mock单测中指定mock数据 模拟入参 when 触发行为 比如调用指定方法或函数 then 做出断言表达式 expect 期望的行为 when then的精简版 si
  • Linux的IO端口和IO内存

    Linux的IO端口和IO内存 分类 linux编程 2011 01 14 13 22 866人阅读 评论 1 收藏 举报 io linux linux内核 struct 平台 x86 CPU对外设端口物理地址的编址方式有两种 一种是IO映
  • 外界访问ubuntu端口bug解决

    跟着视频教程在ubuntu上部署了nacos 但是主机无法访问8848端口 虚拟机可以 检查防火墙以及8848端口 防火墙已关闭 端口也是开放的 virtual machine practice nacos logs sudo ufw st
  • iframe和form表单实现ajax请求上传数据

    form的target属性设置为iframe的name值时 表示提交到url后返回的数据显示到iframe区域
  • DeepSORT(工作流程)

    关于多目标跟踪 DeepSORT是针对多目标跟踪的跟踪算法 有人可能会想 将传统的单目标跟踪算法直接用于多目标跟踪 一起对每一个目标进行单目标跟踪不可以吗 理论上似乎可行 但是实际应用中会发现 单纯的套用单目标跟踪算法用于多个目标进行跟踪的
  • vue2在element UI的table中给指定列添加圆点标志,鼠标悬浮出提示信息

    项目场景 要求在列表数据给指定数据添加一些标志 鼠标悬浮提示指定数据 左侧为标志截图 右侧为悬浮提示截图 HTML布局 在template中想要添加标志的那一列添加圆点和悬浮提示信息两个节点 并添加单元格进入 退出事件两个事件 div cl
  • 想转行做软件测试?快来看看你适不适合

    我们来讨论这样一个问题 软件测试适合什么样的人干 每个人有每个人的看法 A 男生 B 女生 C 有耐性不足的人 沟通能力不好 抗打击能力不强的 逻辑太混乱 没有思路的人 比较懒的人 学习能力不强而又不积极主动的人 D 认真 负责 仔细 有恒
  • 【自然语言处理】BERT 讲解

    有任何的书写错误 排版错误 概念错误等 希望大家包含指正 在阅读本篇之前建议先学习 自然语言处理 Seq2Seq 讲解 自然语言处理 Attention 讲解 自然语言处理 ELMo 讲解 自然语言处理 Transformer 讲解 BER
  • vb中的三目运算

    IIf 函数 根据表达式的值 来返回两部分中的其中一个 语法 IIf expr truepart falsepart IIf 函数的语法含有下面这些命名参数 部分 描述 expr 必要参数 用来判断真伪的表达式 truepart 必要参数
  • 用爱思助手自签名ipa文件成功后安装失败

    设备 iPad pro 2021 系统版本 ios15 6 1 ipa文件已签名成功
  • python 将数组中取某一值的元素全部替换为其他元素的方法

    这里的问题是在做House Price Prediction的时候遇到的 尝试对GarageArea做log转化 但是由于有些房子没有车库 所以GarageArea 0 再通过log转化变成 inf了 所以我想把所有 inf的数据全部再转化
  • MySQL学习笔记

    自己学习MySQL时整理的笔记 包括实操中遇到的问题 不同版本之间的差异 后续也会继续完善 有PDF文档版 学习视频 https www bilibili com video BV1Kr4y1i7ru t 1 9 怎么学 收获 基础篇 初级
  • redis持久化(RDB、AOF)

    redis是内存数据库 但是不仅限于内存 redis有其持久化的方式 共有三种持久化的方式 方式1 生成dump rdb文件 方式2 生成appendonly aof文件 方式3 master slave 主从复制读写分离 RDB redi
  • 神州数码高端ERP系统在上海田岛工具顺利实施

    通过计算机和先进的管理软件实施企业高效管理 上海田岛工具有限公司是一家日资企业 位于上海工业之重的松江 松江工业园 经过近十年发展 已初具规模 并日益壮大 2001年二期厂房扩建并投产 公司主要从事刀具 卷尺及建筑用激光水准仪系列产品的加工
  • 【决战Koa之巅-1】花三分钟搭建一个简单的 Koa 服务

    KOA 是什么 基于 Node js 的下一代 web 开发框架 更直白一些就是使用 JS 开发 API 接口服务 怎么搭建 1 创建一个文件夹 mkdir koa test 2 进入文件夹 初始化 npm 根据提示输入即可 npm ini
  • 校园网络技术需求分析

    路由技术 路由协议工作在 OSI 参考模型的第 3 层 因此它的作用主要是在通信 子网间路由数据包 路由器具有在网络中传递数据时选择最佳路径的能力 除了可以完成主要的路由任务 利用访问控制列表 Access Control List ACL
  • ELK日志平台搭建(一)

    ELK企业级日志分析系统 ELK是由Elasticsearch Logstash Kiban三个开源软件的组合 在实时数据检索和分析场合 三者通常是配合共用 而且又都先后归于 Elastic co 公司名下 故有此简称 ELK中日志处理步骤
  • python二级模拟题

    PYTHON二级模拟题 一 选择题 每题1分 总分40分 1 下列叙述中正确的是 A 算法的时间复杂度是指算法在执行过程中基本运算的次数 B 算法的时间复杂度是指算法执行所需要的时间 C 算法的时间复杂度是指算法执行的速度 D 算法复杂度是
  • 滑动条控制(Slider Control)

    所有的控件的创建基本都是同一套道路 第一步 h中创建一个CSliderCtrl 类的对象 CSliderCtrl m ctrlSlider 第二步 cpp中的void CMyDlg DoDataExchange CDataExchange
  • Primetime 的使用

    开始 先建立目录并将PrimeTime本身所带的一个例子拷到新建的目录下 在下面的内容中将要用到这个例子 mkdir primetime cd primetime cp r SYNOPSYS doc pt tutorial cd tutor