Primetime 的使用

原创 2016年08月29日 12:49:32

开始

先建立目录并将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 命令可以根据时钟数,自动计算时钟信号到达终点的延时和偏移。

Primetime&nbsp;的使用

开始 先建立目录并将PrimeTime本身所带的一个例子拷到新建的目录下,在下面的内容中将要用到这个例子。 mkdir primetime cd primetime cp –r $SYNOPS...
  • leexurui
  • leexurui
  • 2016年08月29日 12:49
  • 230

Struts2的简单使用(一)

今天学习了一下Struts2框架的搭配~ 也简单的使用Struts2框架学习了Action和怎么使用核心配置文件struts.xml~ 主要实现了网页上的简单登录注册~ 项目结构如图: 写了俩...
  • qq_33642117
  • qq_33642117
  • 2016年07月11日 20:51
  • 1207

GUID使用的使用

GUID(Global unique identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。 它的生成算法还是比较有意思的,用到了以太网卡地址、...
  • xiaolongwu8666
  • xiaolongwu8666
  • 2013年08月02日 16:45
  • 330

weblogic使用简介

 (1)安装weblogic,默认安装即可;  (2)在开始菜单中选择Weblogic 的Configuration新建weblogic配置     在BEA Weblogic Congigurati...
  • hxmcGu
  • hxmcGu
  • 2007年06月25日 13:35
  • 3776

Eclipse Debug的一些用法

转自:http://mgoann.iteye.com/blog/1396637 Debug视图 认识debug视图,红色部分框为线程堆栈视图,黄色部分框为表达式、断点、变量视图,蓝色部分为代码视图...
  • u012917700
  • u012917700
  • 2015年09月03日 12:56
  • 2674

C++错误:不允许使用不完整的类型

写了下面这个代码,结果在ifstream处提示“不允许使用不完整的类型”     string from,to;     cin>>from>>to;     ifstream is(f...
  • qq10593994
  • qq10593994
  • 2015年07月28日 20:36
  • 9783

swift中block的简单使用

var finishBlock: ((_ mm :String )->String)?     override func viewDidLoad() {         super.view...
  • BianHuanShiZhe
  • BianHuanShiZhe
  • 2016年12月24日 14:52
  • 258

eclipse使用大全

基本设置部分: 1、设置代码的字体类型和大小: Window -> Preferences -> General -> Appearance -> Content Assist -> Colors...
  • wl4066261
  • wl4066261
  • 2016年12月20日 00:08
  • 2041

Android-ViewPagerIndicator使用方法

转自http://blog.csdn.net/dalancon/article/details/41696373 现在很多的应用页面都是由一个个的TAB组成的,我们可以用布局加事件监听实现tab...
  • rankun1
  • rankun1
  • 2016年08月12日 18:29
  • 965

MyBatis基本使用步骤

MyBatis是一个数据持久层(ORM)框架。把实体 类和SQL语句之间建立了映射关系,是一种半自 动化的ORM实现。MyBATIS需要开发人员自己来写sql语句,这可以增加了程序的灵活性,在一定程度...
  • archer119
  • archer119
  • 2016年06月01日 23:27
  • 3386
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Primetime&nbsp;的使用
举报原因:
原因补充:

(最多只允许输入30个字)