复旦大学数字集成电路设计时序分析和验证教程.docx

上传人:b****8 文档编号:9185193 上传时间:2023-02-03 格式:DOCX 页数:42 大小:38.45KB
下载 相关 举报
复旦大学数字集成电路设计时序分析和验证教程.docx_第1页
第1页 / 共42页
复旦大学数字集成电路设计时序分析和验证教程.docx_第2页
第2页 / 共42页
复旦大学数字集成电路设计时序分析和验证教程.docx_第3页
第3页 / 共42页
复旦大学数字集成电路设计时序分析和验证教程.docx_第4页
第4页 / 共42页
复旦大学数字集成电路设计时序分析和验证教程.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

复旦大学数字集成电路设计时序分析和验证教程.docx

《复旦大学数字集成电路设计时序分析和验证教程.docx》由会员分享,可在线阅读,更多相关《复旦大学数字集成电路设计时序分析和验证教程.docx(42页珍藏版)》请在冰豆网上搜索。

复旦大学数字集成电路设计时序分析和验证教程.docx

复旦大学数字集成电路设计时序分析和验证教程

摘要:

本文介绍了数字集成电路设计中静态时序分析(StaticTimingAnalysis)和

形式验证(FormalVerification)的一般方法和流程.这两项技术提高了时序分

析和验证的速度,在一定程度上缩短了数字电路设计的周期.本文使用Synopsys

公司的PrimeTime进行静态时序分析,用Formality进行形式验证.由于它们都是

基于Tcl(ToolCommandLanguage)的工具,本文对Tcl也作了简单的介绍.

关键词:

静态时序分析形式验证PrimeTimeFormalityTcl

目录

第一章绪论………………………………

(1)

1.1静态时序分析

1.2时序验证技术

第二章PrimeTime简介………………………………(3)

2.1PrimeTime的特点和功能

2.2PrimeTime进行时序分析的流程

2.3静态时序分析中所使用的例子

2.4PrimeTime的用户界面

第三章Tcl与pt_shell的使用………………………………(6)

3.1Tcl中的变量

3.2命令的嵌套

3.3文本的引用

3.4PrimeTime中的对象

3.4.1对象的概念

3.4.2在PrimeTime中使用对象

3.4.3针对collection的操作

3.5属性

3.6查看命令

第四章静态时序分析前的准备工作………………………………(12)

4.1编译时序模型

4.1.1编译StampModel

4.1.2编译快速时序模型

4.2设置查找路径和链接路径

4.3读入设计文件

4.4链接

4.5设置操作条件和线上负载

4.6设置基本的时序约束

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

4.6.2设置时钟-门校验

4.6.3查看对该设计所作的设置

4.7检查所设置的约束以及该设计的结构

第五章静态时序分析………………………………(18)

5.1设置端口延迟并检验时序

5.2保存以上的设置

5.3基本分析

5.4生成pathtimingreport

5.5设置时序中的例外

5.6再次进行分析

第六章Formality简介………………………………(22)

6.1Formality的基本特点

6.2Formality在数字设计过程中的应用

6.3Formality的功能

6.4验证流程

第七章形式验证………………………………(27)

7.1fm_shell命令

7.2一些基本概念

7.2.1ReferenceDesign和ImplementationDesign

7.2.2container

7.3读入共享技术库

7.4设置ReferenceDesign

7.5设置ImplementationDesign

7.6保存及恢复所作的设置

7.7验证

第八章对验证失败的设计进行Debug………………………………(32)

8.1查看不匹配点的详细信息

8.2诊断程序

8.3逻辑锥

8.3.1逻辑锥的概念

8.3.2查看不匹配点的逻辑锥

8.3.3使用逻辑锥来Debug

8.3.4通过逻辑值来分析

 

诸论1

第一章绪论

我们知道,集成电路已经进入到了VLSI和ULSI的时代,电路的规模迅速上升

到了几十万门以至几百万门.而IC设计人员的设计能力则只是一个线性增长的曲

线,远远跟不上按照摩尔定律上升的电路规模和复杂度的要求.这促使了新的设计

方法和高性能的EDA软件的不断发展.

Synopsys公司的董事长兼首席执行官AartdeGeus曾经提到,对于现在的IC

设计公司来说,面临着三个最大的问题:

一是设计中的时序问题;二是验证时间太

长;三是如何吸引并留住出色的设计工程师.他的话从一个侧面表明了,随着IC

设计的规模和复杂度的不断增加,随着数百万系统门的设计变得越来越普遍,时序

分析和设计验证方面的问题正日益成为限制IC设计人员的瓶颈.

对于这些问题,设计者们提出的策略有:

创建物理综合技术,开发更快更方便

的仿真器,使用静态时序分析和形式验证技术,推动IP的设计和应用等等.本文

将着重于探讨其中的静态时序分析和形式验证两项技术,在集成电路设计日益繁复

的背景下,它们为IC产品更快更成功地面对市场提供了可能.

§1.1静态时序分析

一般来说,要分析或检验一个电路设计的时序方面的特征有两种主要手段:

态时序仿真(DynamicTimingSimulation)和静态时序分析(StaticTimingAna

-lysis).

动态时序仿真的优点是比较精确,而且同后者相比较,它适用于更多的设计类

型.但是它也存在着比较明显的缺点:

首先是分析的速度比较慢;其次是它需要使

用输入矢量,这使得它在分析的过程中有可能会遗漏一些关键路径(criticalpat

-hs),因为输入矢量未必是对所有相关的路径都敏感的.

静态时序分析的分析速度比较快,而且它会对所有可能的路径都进行检查,不

存在遗漏关键路径的问题.我们知道,IC设计的最终目的是为了面对竞争日益激

诸论2

烈的市场,Time-to-market是设计者们不得不考虑的问题,因此对他们来说,分

析速度的提高,或者说分析时间的缩短,是一个非常重要的优点.

§1.2形式验证技术

我们知道,验证问题往往是IC产品开发中最耗费时间的过程之一,而且它需

要相当多的计算资源.开发一个带有相应的测试向量的测试平台是很费时的工作,

而且它要求开发者必须对设计行为有很好的很深入的理解.而形式验证技术,简单

地说就是将两个设计--或者说一个设计的两个不同阶段的版本--进行等效性比

较的技术,由于能够很有效地缩短为了解决关键的验证问题所花费的时间,正在逐

渐地被更多的人接受和使用.这方面的工具有Synopsys公司的Formality和Verp

-lex公司的ConformalLEC等.

本文将讨论使用Synopsys的工具PrimeTime和Formality进行静态时序分析

和形式验证的一般方法和流程.本文的第二章简要介绍了PrimeTime的基本功能和

特点.第三章介绍了Tcl在PrimeTime中的基本使用,重点是关于对象和属性的操

作.第四章介绍了在进行静态时序分析之前要作的准备工作.第五章介绍了对一个

具体例子进行静态时序分析的过程.第六章介绍了Formality的基本特点和验证流

程.第七章介绍了对一个具体例子进行形式验证的过程.第八章介绍了对验证失败

的设计进行Debug的各种技巧.

PrimeTime简介3

第二章PrimeTime简介

正如本文前面所提到的,静态时序分析方法由于有着更快的分析速度等优点,

正在被更多的设计者们所重视.PrimeTime是Synopsys的静态时序分析软件,常

被用来分析大规模,同步,数字ASIC.PrimeTime适用于门级的电路设计,可以和

Synopsys公司的其它EDA软件非常好的结合在一起使用.

这一章将简要介绍PrimeTime的基本功能和特点,以及使用PrimeTime进行静

态时序分析的一般过程.

§2.1PrimeTime的特点和功能

作为专门的静态时序分析工具,PrimeTime可以为一个设计提供以下的时序分

析和设计检查:

建立和保持时间的检查(setupandholdchecks)

时钟脉冲宽度的检查

时钟门的检查(clock-gatingchecks)

recoveryandremovalchecks

unclockedregisters

未约束的时序端点(unconstrainedtimingendpoints)

master-slaveclockseparation

multipleclockedregisters

组合反馈回路(combinationalfeedbackloops)

基于设计规则的检查,包括对最大电容,最大传输时间,最大扇出的检查

等.

PrimeTime具有下面的特点:

1)PrimeTime是可以独立运行的软件,它不需要逻辑综合过程中所必需的各

种数据结构,而且它对内存的要求相对比较低.

2)PrimeTime特别适用于规模较大的,SOC(system-on-chip)的设计.

PrimeTime简介4

在数字集成电路设计的流程中,版图前,全局布线之后已经版图后,都可以使

用PrimeTime进行静态时序分析.

§2.2PrimeTime进行时序分析的流程

使用PrimeTime对一个电路设计进行静态时序分析,一般要经过下面的步骤:

1)设置设计环境

在可以进行时序分析之前,首先要进行一些必要的设置和准备工作.具体来说

包括了:

设置查找路径和链接路径

读入设计和库文件

链接顶层设计

对必要的操作条件进行设置,这里包括了线上负载的模型,端口负载,驱

动,以及转换时间等

设置基本的时序约束并进行检查

2)指定时序约束(timingassertions/constraints)

包括定义时钟周期,波形,不确定度(uncertainty),潜伏性(latency),以及

指明输入输出端口的延时等.

3)设置时序例外(timingexceptions):

这里包括了:

设置多循环路径(multicyclepaths)

设置虚假路径(falsepaths)

定义最大最小延时,路径的分段(pathsegmentation)以及无效的arcs

4)进行时序分析:

在作好以上准备工作的基础上,可以对电路进行静态时序分析,生成constra

-intreports和pathtimingreports.

以上仅仅是PrimeTime进行静态时序分析的简单流程,在本文以下的部份中将

会有更详细的叙述.

PrimeTime简介5

§2.3静态时序分析中所使用的例子

在本文中,进行静态时序分析时所用的例子是微处理器AMD2910,图2-2给

出了它的顶层的电路图.

Figure2-2AMD2910微处理器

§2.4PrimeTime的用户界面

PrimeTime提供两种用户界面,图形用户界面GUI(GraphicalUserInterf

-ace)和基于Tcl的命令行界面pt_shell,其运行方式分别是:

%PrimeTime

%pt_shell

退出的命令是quit,exit或者^d.事实上,在GUI界面中通过菜单进行的每一个

操作,都对应着相应的pt_shell的命令.因此,本文以下的章节都只针对于pt_

shell来完成.

Tcl与pt_shell的使用6

第三章Tcl与pt_shell的使用

Tcl是ToolCommandLanguage的缩写,由于PrimeTime的命令语言是基于

Tcl标准的,所以在这一章里我想大致介绍一下Tcl在PrimeTime中的基本使用.

除了一些最常用的Tcl命令之外,主要介绍了pt_shell中有关对象和属性的操

作.

事实上,大多数synopsys公司的EDA工具都是基于Tcl标准的.例如在第二

章的图2-1中可以看到的综合软件DesignCompiler也是.由于都基于Tcl标准,

PrimeTime中的大多数命令以及命令参数都和DesignCompiler中是相同的.

§3.1Tcl中的变量

我们可以把Tcl看作是一种比较高级的语言,它很容易理解和使用,所以这里

对它的介绍也是很简单的.

与变量有关的有下列操作:

1)定义变量:

set变量名变量值

例如:

setclock_period10

2)引用变量:

$变量名

例如:

echo$clock_period

3)删除变量:

unset变量名

4)打印变量:

printvar变量名(无变量名时打印所有变量)

或者:

echo$变量名

举个例子,在使用PrimeTime之前,我们可以把它设置成分页显示,以便于浏

览在运行时生成的信息,此时可以使用如下的命令:

setsh_enable_page_modetrue

如果希望每次运行时PrimeTime总是分页显示,可以到.synopsys_pt.setup文件

中去更改sh_enable_page_mode变量的设置.

Tcl与pt_shell的使用7

§3.2命令的嵌套

在使用PrimtTime的过程中,命令的嵌套经常会被用到.嵌套命令时,用方括

号([])分隔开每一层的命令,例如:

命令1[命令2[命令3]]

在这样一个例子中,命令3首先被执行,它的结果将被作为命令2的一个参数,然

后依次执行下去.

§3.3文本的引用

在Tcl中,可以使用两种方法来引用文本或者说字符串:

1)弱引用:

使用双引号来引用文本.在双引号里出现的变量,命令和反斜杠

不会被转义,仍然保持特殊意义.

2)强引用:

使用大括号来引用文本.大括号中的字符串将按照字面上被引

用.

例如:

setmydelay10

echo"Thevalueofmydelayis$mydelay"

得到的结果将是:

Thevalueofmydelayis10,而

echo{Thevalueofmydelayis$mydelay}

得到的结果将是:

Thevalueofmydelayis$mydelay.

除此之外,可以使用反斜杠来转义一个单一的特殊字符,以及使用expr命令

来得到算术表达式的值.

§3.4PrimeTime中的对象

§3.4.1对象的概念

在IC设计中,"对象(object)"是一个常用的概念.一般来说,一个设计会

包含以下的对象:

Design,Cell,Port,Pin,Net,Clock等.在分析和验证的过

程中,也经常要跟这些对象打交道.因此搞清楚这些概念,才不会在使用软件的过

程中遇到不必要的障碍.

Tcl与pt_shell的使用8

Design:

有一定逻辑功能的电路描述,它可以是独立的,也可以包含有其他

的子设计.虽然严格地来说子设计只是设计的一部份,但是Synopsys也把它看作

是一个design.

Cell:

在Synopsys的术语中,cell和instance被认为是同样的概念,都是

design中例化的一个具体元件.

Port:

指主要的input,output或者design的I/O管脚.

Pin:

对应于设计中的cell的input,output或者I/O管脚.

Reference:

cell或者instance参考的源设计的定义.

Net:

是指信号的名字,即通过连接ports与pins或者pins与pins而把一

个设计连接在一起的金属线的名字.

Clock:

作为时钟源的port或者pin.

下面的例子是用VHDL语言描述的一个电路,包含了上面所说的各种对象:

Figure3-1

§3.4.2在PrimeTime中使用对象

PrimeTime提供了一个命令来选中这些对象,或者更准确地说是建立一个这些

对象的collection,命令的形式为:

get_objtype

其中objtype是这种对象的类型,可以使用"helpget_*"来查看.这个命令与

DesignCompiler中的find命令有点类似.

值得注意的是,这个命令并不是返回被选中对象的列表,而是建立一个指向被

选中对象的collection.这种方法比在memory中保存一个庞大的列表要节省时间

和资源.要列举所选中的对象,可以用query_objects命令.通常可以把建立的

collection设置为变量,以方便使用,例如:

setdata_ports[get_portsD

]

query_objects$data_ports

另外,也可以用all_objtype命令来建立某种对象的collection,例如:

all_clocks,all_inputs,all_outputs,all_instances,all_registers,

Tcl与pt_shell的使用9

all_connected等.其中all_connected的作用是列出与某对象连接的所有pin,

port或者net,例如要得到所有连接到CLOCK的对象,可以:

query_objects[all_connected[get_netsCLOCK]]

§3.4.3针对collection的操作

1)foreach_in_collection

顾名思义,这个命令的作用是对一个collection中的所有的对象进行某种操

作,其形式为

foreach_in_collectionvariablecollection{body}

例如,要打印出端口总线Y_OUTPUT的电容:

foreach_in_collectionoutpin[get_portsY_OUTPUT

]{

setmaxcap[get_attribute$outpinwire_capacitance_max]

setpinnname[get_attribute$outpinfull_name]

echo"Maxcapacitanceofport$pinnameis$maxcap"

}

说明:

①问号表示命令尚未结束,出现在引号,大括号和中括号里.

②这个命令比较复杂,它的执行过程是这样的:

执行get_ports命令得到

collection;依次定义三个新的变量:

outpin,maxcap以及pinname;然后对于

collection中的每一项,依次执行echo命令.

foreach_in_collection命令是针对于collection的,对于一般的列表可以

使用Tcl中的标准命令foreach.

2)从collection中增加或删除对象

add_to_collectioncollectionobject

remove_from_collectioncollectionobject

其中的object表示要增加或者删除的对象,这两个命令将返回一个新的

collection.

3)collection的过滤

Tcl与pt_shell的使用10

根据一定的条件对collection进行过滤,可以使用filter_collection命

令,它将在collection中寻找符合条件的对象,并返回一个新的collection,如

果没有匹配的对象的话将返回空的字符串.也可以collection命令中使用-filter

参数.

filter命令中的条件表达式可以使用以下的运算符:

==,!

=,>,=,<=,=~

例如,要列出名字是ND2,ND21,ND3,ND4p诸如此类的cells:

query[get_cells*-hier-filter"ref_name=~ND*"]

说明:

在使用PrimeTime时可以使用缩略的命令,这里就使用了query来代替

query_objects.

§3.5属性

属性(arritubes)可以是PrimeTime预定义的,也可以是从综合软件如Design

Compiler继承下来的(例如时钟周期,输入延迟,net的电容等),也可以是由用户

定义的.

与属性相关的命令有:

list_arritubes

get_arritube

report_arritube

define_user_arritube

set_user_arritube

remove_user_arritube

利用这些命令可以很方便地了解设计,例如想知道AM2910设计中的最大电

压,可以:

get_attribute[get_designsAM2910]voltage_max

§3.6查看命令

与Unix相似,可以使用help或者man来查看命令的用法.例如查看与clock

相关的命令可以:

Tcl与pt_shell的使用11

help*clock

查看命令的参数可以用如下的命令:

help-verbose

其他的命令这里就不再赘述了,在后面的章节中使用到时再一一作介绍.

静态时序分析前的准备工作12

第四章静态时序分析前的准备工作

从第二章里的时序分析流程可以看到,在对一个设计进行静态时序分析之前,

首先要作一些基本的环境设置和准备工作,包括:

设置查找和链接路径;

读入并链接所要分析的设计;

设置操作条件和线上负载模型(wireloadmodel);

设置基本的时序约束(timingassertions);

检查所设置的约束以及该设计的结构.

这一章将依次介绍这些内容.

§4.1编译时序模型

§4.1.1编译StampModel

Stampmodel是针对于复杂模块--例如DSP(digitalsignalprocessing)的

核心或者RAM--而建立的静态时序模型.它一般是为晶体管级的设计而创建的,

在设计中没有门级的网表.Stampmodel中可以包含的时序信息有:

pin-to-pin的

arcs(),建立和保持时间,pin的电容和负载,以及三态输出,锁存器,内建时

钟等.

一个Stampmodel包括两个源文件:

1).mod文件,包含对pin-to-pin的arc的描述(不包括延时).

2).data文件,包括.mod文件中描述的每一个arc的延迟数据.

例如,对于AM2910设计中的Y模块(见图2-2),编译其Stampmodel:

compile_stamp_model-model_fileY.mod-data_fileY.data-outputY

其中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

静态时序分析前的准备工作13

_path)中去.

§4.1.2编译快速时序模型

对于设计中的某些未完工的模块--比如说,该模块的HDL,或者完整的

stampmodel没有完成--你可以创建一个快速时序模型来进行分析.快速时序模

型是一个临时性的模型,可以提供进行时序分析而需要的时序信息.实际上,快速

时序模型是包含一系列pt_shell命令的文件,而不是

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1