Part1 DC Basics
1.1 什么是DC?
$ d+ w' ~) c% d9 j% b# [( b, U DC(Design Compiler)是Synopsys的逻辑综合优化工具,它根据设计描述和约束条件自动综合出一个优化了的门级电路。它可以接受多种输入格式,如硬件描述语言、原理图和网表等,并产生多种性能报告,在缩短设计时间的同时提高读者设计性能。
( F, {, ]6 X- l9 K" C0 U0 X( b! z9 v5 R5 w) }! p5 ^7 C, |9 G- Z, D
1.2 DC能接受多少种输入格式?; M( i( V! U" R/ A! x! h# C
支持.db, .v, .vhd , edif等等。# {9 X' l3 n1 j7 v; u4 M9 |
}/ B8 n% _0 G+ ~( m0 C; |1.3 DC提供多少种输出格式?
8 b" V; X0 W7 X$ o
% n/ {1 l8 [5 h- }( Z3 K) v9 ~1.4 DC的主要功能或者主要作用是什么?0 a# H( |2 e& u- ?
DC是把HDL描述的电路综合为跟工艺相关的、门级电路。并且根据用户的设计要求,在时序和面积,时序和功耗上取得最佳的效果。在floorplanning和placement和插入时钟树后返回DC进行时序验证& i. H7 C& i3 u# [& q+ a9 X
/ P6 K7 C7 c: S
1.5 如何寻找帮助?+ B# V4 B5 x( }2 p9 ^" X; O
帮助可以分为3种求助方式:8 A3 x8 E2 `2 A3 Y- i N! t
1.使用SOLD,到文档中寻求答案* @) S6 m: ?3 r5 q- }
2. 在命令行中用man+ DC命令
* y" @5 ^: B9 V/ c- E% W 3. 在命令行中用info+ DC命令
- S- }- F3 `1 n' [. {) Q$ ]" ]" P3 h5 Y9 f' Q
1.6 如何找到SOLD文档?) R' J. k0 q$ S5 x* f* C
SOLD文档可以在teminal中输入sold&执行。4 \" y9 T+ w/ E# I$ _$ {( h/ {
$> sold&8 u) K9 j0 |) S0 G& w9 Y5 \. V/ y
或者用命令 which dc_shell找到dc的安装目录。找到online目录。1 I; u5 L+ {* O( a6 p5 |. m/ a
$ t- H* _4 {/ q8 l2 A
1.7 如何配置DC?" ` h" d. ~- a
综合设置提供必要的参数给DC,使工具能够知道进行综合时所需要的必要的信息,即重要参数:工艺库,目标库,标志库等等。要在. synopsys_dc.setup上设置好这些参数。而.synopsys_dc.setup要在三个目录下有说明,一个是synopsys的安装目录,一个是用户文件夹,最后一个是工程目录。由后一个设置覆盖前一个文件。
' Z7 I5 s+ a/ z1 u( q 参数包括:search_path, target_library, link_library, symbol_library- e2 `6 x- f% t' W4 i
|, ^2 Y! A. u3 F. y
1.8 target_library 是指什么?
0 N/ s3 }9 [( @) ~3 [- w) @ target_library是综合是在map时需要的实际的工艺库" U- b' R( ^- p( P, @( Y
+ L; N: v; o3 N
1.9 link_library如何指定?
4 k% t( L2 k7 u1 M1 o$ J( s, h. P 链接时需要的库,通常与library相同,设置时,需要加“*”,表示内存中的所有库。3 {% g& i) z% D# q; X
/ R5 A* K. Q/ l+ u) @8 A* q1.10 search_path 的设置? s" \; L. M6 y; ^" e: u
该参数指定,库的存储位置: C$ Z6 {1 E6 @: l: |2 A1 k
5 W' |4 p9 ^) J# Y# x
1.11 DA 和DC有什么区别?
7 ^4 @ _$ K1 I* Y DA是 Design Analyzer的简称, 它调用dc来进行综合. 但是它是图形化的. 可以看逻辑电路图,当然需要你的库有symbol库.# ^+ u3 p6 F( W8 U; ^) Z# R
- M3 F. c& N A5 x& c1.12 为什么要使用DA而不用shell接口?' j5 `9 _; h6 _! Y1 [1 }2 l
# b( V. }' x+ M d9 a$ P( r
1.13 SOLD是什么?
/ Q B/ f5 n: [0 o/ E SOLD是 Synopsys OnLine Document的简称, 基本包括了synopsys公司的所有工具的文档集合.
0 u1 |9 q; r, m+ q
. ?& g+ D9 |5 E7 q- O) t ^. C1.14. translation这一步是用什么DC命令来实现的?' E4 N; M5 K' U4 c0 c- r! k }* o
我们知道, DC综合过程包括3个步骤: translation + logic optimization + mapping
& ]1 V8 p: \7 ]" Y' c5 E transition 对应命令为 read_verilog1 T9 S6 }9 B$ W
lgoic optimization 和 mapping 对应于 compile
, R+ p- p1 k5 A' b+ M1 Q" H/ w- o! a
) G7 T$ V7 p* o# x0 s1.15. 逻辑优化和映射(logic optimization + mapping)又是用什么DC命令来实现的?
5 t# k! u# P5 d# j$ [* F) L. Y 逻辑优化和映射均在compile命令完成,但是可以指定使用特殊的优化方法:structural 和flatern
! c' l# A5 H2 Q! `- s. |. X, f C/ c$ n, @7 H% D% ?
1.16. 什么是DC script?
4 z1 ?5 A* T+ B2 ~6 d DC script 是一组dc 命令的集合. 使得综合可以流程化也易于管理.
6 q* c! F$ [& H4 z# s7 F2 G# Z/ D* v. P' F5 _, K
1.17. 基于路径的综合的意思是什么?
1 j ^4 f9 M) T$ O- x2 k5 z' q 路径(path),是DC中的一个重要概念。它包括4种路径方式:
1 `4 N" C0 ^6 S8 Z! [; S3 I a. 输入端口到DFF的data口;
) R8 \8 I" v- k; U- \ b. DFF的clk到另一个DFF的D口;5 ~! P' P. o! @1 m
c. DFF的clk到输出端口$ o% `. h1 _0 `8 S8 B
d. 输入端口到输出端口
0 T# L. H) P! {3 Y+ D# d 基于路径的综合就是对这四种路径进行加约束,综合电路以满足这些约束条件。
7 f* i- H7 f- \& q) w$ D0 \
, s" G4 D+ A* t) t) P1.18 DC中的各类参数的单位是如何确定的呢?# U$ C6 ?; _+ K8 p
参数的单位由所使用库文件决定,在读入库之后,可以用report_lib去看库的信息,里边有详细的单位说明
3 [3 k4 O' I# i" w( n
4 ^9 A! Y8 }9 Z8 n* z* G1.19 DC中的对象有哪些?
2 X4 R9 ^ t+ T8 ~/ |: [ DC中的设计变量:一共有八种:Design, cell, reference, port, pin, net, clock, library。其中cell是子设计的例化,reference是多个子设计例化的通称,port是design的输入输出,pin是cell的输入输出。
- i! P3 W/ d* ]4 E5 Y+ Y! K0 _! a4 J+ w6 z6 o" r8 h
1.20 什么叫start point 和 end point?* o+ D% B w7 U( V
这两个概念是DC中path概念的起始点和终点。
+ o. E0 l% j! j7 G2 C1 R 起始点可以是 输入端口和DFF的clk! n m4 J) [3 i! j& \# Z
终点可以是 DFF的data 和 输出端口。( {" h* ?( V9 W+ `/ c+ f
# X/ M; H, h* p, H* S/ \7 O
1.21 如何寻找想约束的对象?% ?0 }& V# G; U8 z
一个是全部查找包括:all_inputs , all_outputs, all_clocks, all_registers。一个是根据关键词进行查找:find_ports(),find(port,’ ‘)。
3 U* }0 W+ a6 i J1 z* x7 A! K$ g5 \3 F+ G; B0 U4 a4 O
1.22 什么叫一个设计(design) ?
, E6 O6 _7 L9 O0 x 设计是DC中的重要对象,你所要综合的东西就叫design,确切或者说你所要综合模块的top文件。, m1 D5 [! I! p4 E4 C }+ `
& g" A+ q4 E7 [; m7 @: b. f" j7 j% i6 j
1.23 什么叫cell ?
3 P( ^/ q, g8 Q* T# M7 c: Q; H 在design中,instance的子设计,称为cell。6 G5 t4 V' b+ }' m$ w7 |2 q* ~7 P
" z# H7 k$ {* D% C7 P. K$ j- U- p
1.24 reference 是指什么? 和cell 有什么区别?& O) w. e w. B0 L$ M: B; N
当存在一个模块被多次例化,那么该模块就称为reference
- m& O8 L, T- D. n# F# F/ ^: [! x) U
+ L5 y, p8 b/ C+ i1.25 如何读入一个design?' x7 o+ d2 Q6 ~5 n: g- A2 ]# }% U
使用analyze + elaborate 或者 read_verilog, read_vhdl, read_file 命令。
# R$ Z2 I0 x, T4 G9 g3 `
2 M# s* @$ f8 A9 Y+ j4 o1.26 analyze+ elaborate 和 read 命令有什么区别?
/ h4 d7 z- d1 e; l7 g; f read_file 是可以读取任何SYNOPSYS支持格式的;analyze和eloborate只支持verilog和VHDL两个格式,但是他们支持在中间过程中加入参数而且以便以后可以加快读取过程。" @. k; d6 t# X" M5 g" H
3 W D7 j1 z: z" Q$ }( E/ }' u1.27 如何处理多个引用的问题?
9 B# ?( E8 R5 G9 W3 F 一个方法是使用 uniquify,就是把引用几次那么就在内存中换名引入多个子设计,适用于不同时序约束要求;也可以用dont_touch命令,先对多个引用的设计进行编译之后,设置为dont_touch,适用于基本相同的环境要求;还有一种就是把两个引用进行flatten,之后进行综合。
; j8 z. F5 w8 P+ ?" ?% Z* L' ^: _: B4 p1 _5 M' g
1.28 link的作用是什么?
5 u3 |/ j) o0 o& E" C3 d 确定所有文件是否均存在并把它们链接到当前设计。
/ h: m. f2 k& |0 o
, K$ c+ m/ z8 N9 f, |1 e, l( n1.29 环境设置是指什么?2 ^* o9 G: S+ `9 ]" a1 h4 M
是指芯片物理上的参数,比如电压,温度等。
1 c6 P6 g# _8 ]
6 H3 N. h5 O/ }; B6 ^$ X. s1.30 如何设置线载模型?& v1 E* o' c E3 ^& v6 z) D' g
使用set_wire_model命令
6 i& ?7 N/ n1 A( U8 M7 o
" z: z1 ~% ~* W0 s2 J* c1.31 如何得知线载模型的种类?
- W/ R7 e2 D6 Z 读取库文件到DC中,使用report_lib看有多少可用的线载模型& o8 N4 l( f! h1 B6 p! w6 V5 Y! a/ \1 d2 [
a: n3 q9 k1 A" t4 G* R
1.32 如何设置工作环境变量?: U6 L8 H0 P& c4 Y, A
使用set_operating_conditions3 b6 S' x7 J6 H& n
" a1 c l+ i, v, o
1.33 工作环境变量的类别可以分为哪几类?. N, \. \9 T8 e2 X3 Z
一般可以分为最坏(worst case),典型(typical),最佳(best case)。$ L9 o5 W1 {" r, o+ R
' f' o8 a) \ y7 {
1.34 为什么要设置工作环境变量?
8 G+ Z$ W5 F7 Z5 n% R* A5 ~- ` 由于我们要做的是一颗要在实际环境中正常工作的芯片,而在不同的温度和环境下的电路的性能有很大影响,因此为了近可能地模拟芯片工作,设置合适的工作环境信息是非常必要的。) B' c6 K; X2 G- U, g0 u3 }
) _6 K4 I) `+ |5 X/ w1 Q. ~0 M1.35 read 和 analyze + ealborate做了哪些工作?% g. f# L# `1 L% f! n7 g
语法检查,建立GETECH库。值得注意的是,read命令不自动执行link操作。
: K) M0 P2 D/ I2 N& e" _% H3 W# s4 n% n7 ^9 p6 _9 U
1.36 getech库是做何用途的?
6 v% _5 Q T) a! Z GETCH库是由软宏(soft macros)组成的,是加法器,乘法器之类的东西,这些组件都是在DW里引用的。9 Q, F: o3 v3 S5 a& g" f5 I v
& g( A# W' D( B1 C/ B
1.37 调用getech 库中的加法器之后,如何去自己选择一个设计者需要的加法器?
5 C: {2 b$ g% x9 j) M4 X( e" B9 E: M3 a. v9 Y- `# I
1.38 调用了加法器之后在优化阶段还能够掉换不同的加法器么?+ H" i4 D% B; ^1 }& a- S
8 y$ p% Y8 {6 i4 p6 v3 U4 ^
1.39 如何检查script文件中有何错误呢?
3 C( A! { w) N* z2 H7 c8 [! S dc_shell -tcl -f
8 d" w4 |% Z$ _6 B. |. d8 k1 Q. H5 R4 o
1.40 如果在dc_shell启动后, 想修改库,怎么办?
5 A) t3 q: t" K8 f2 k
3 C. ^1 ~* D4 V8 h& J6 D1.41 如何在dc_shell环境下执行UNIX命令?
- |% |8 X; S4 p r8 C# k Q
- V+ O/ j6 m% [& \1 U( U1.42 优化分为几个层次?5 T/ D9 K/ z9 @& q" y1 Q
一个是基于HDL的结构优化转化为GETCH结构;基于GTECH的逻辑优化,包括架构(strcuture),打平(flatten),转化为优化过的GETCH;基于GETCH的门级优化,主要作用是映射到实际的工艺库中。$ I) q% j: _" X, H+ l2 H8 ~
& V! k; S+ g+ [
1.43 什么是约束?( [1 ]/ H% M. j* I, b) w
约束分为设计规则约束和优化约束。设计规则约束不由用户确定,已经由所采用的库确定了,用户只能添加进一步的约束。优化约束分为两个方面,时序约束和面积约束。时序约束又可分为组合电路的约束,时序电路的约束以及输入输出的约束。
$ p6 V- k+ L W1 }( T7 C' m2 p" o
7 Q' o1 y; F1 [( I: g7 ~4 o1.44 DC Script支持TCL么?
# N3 {- d" s Y dcsh和dc-tcl。前者是SYNOPSYS的内部语言,后者是TOOL COMMAND language(TCL)。/ B" U5 h8 ~; a- S
3 q: n b6 {; M6 }5 p1.45 综合时不想使用某些库单元进行mapping,怎么办?
2 m6 l* c( c i- r) L5 Y 使用set_dont_use 命令
Part 2 Constraint the design
" M4 c2 K/ b- g v3 \( `6 u6 A4 T9 F' _4 O: K9 T' e+ Z
2.1 约束一个设计分为几个方面?
9 A) Q h+ X; x6 L 总的分为,面积约束和时序约束。6 Z# U7 g% x" K a# @* B5 ]7 `: L0 N
* Y+ G* |4 Z0 E
2.2 面积约束的命令是什么?( |3 ?" s+ W# `9 M4 b: |! Z+ D
set_max_area6 B$ j0 K1 C" _/ S5 ~8 C
5 X( d4 W0 _, B2.3 如何对时钟进行约束?
, U0 H+ g5 P4 ?' l( q 对时钟进行约束是对时钟的周期,波形进行描述。4 Q7 d2 i4 ]' i- K/ b
使用create_clock 建立时钟约束1 K7 R0 ^6 N1 U, e
3 ]2 R$ e% G, ~, o
2.4 如何对pll进行约束?/ r. \' n% H) [9 P: Q7 `9 L
如果存在PLL,那么首先对输入的初始时钟用create_clock进行约束。
( K, n5 H1 Y; x- v% | 再用create_propagated_clock 对PLL输出时钟在基于输入时钟进行约束。
# P+ [) }3 _! o) D, A0 ~& c
# ]! c( b& P# a2.5 什么叫虚拟时钟约束?
f, E3 x2 n B/ Z 虚拟时钟是指在当前要综合的模块中不存在的物理时钟。比如,设计外的DFF的时钟。
: p8 v! v! i3 ?0 P4 N 建立这样的时钟有益于描述异步电路间的约束关系。
2 \, U8 _7 C- ]4 ?, X6 E' a; @ 4 \8 n p8 Z, S: Q2 O B
2.6 DC可以对时钟的哪些特性进行约束?
- d, a# \/ @3 i: Q$ E' i* i" w( W# ?5 k DC支持对时钟的周期,波形,jitter,skew,latency 描述
; ?. N! Q8 E* `7 R' E. Y' O( s% ]5 o; A9 Y' R b+ n6 g" ? f( u
2.7 如何约束时钟的jitter?
+ k2 e( \9 G: H6 k4 q. ?4 y3 l 使用set_clock_uncertainty -setup(-hold) 约束时钟的jitter: s+ J, _2 n8 k' B) H" N
# d2 }2 n/ V9 w
2.8 如何约束时钟的skew?
1 V/ _! s8 ~1 Q 使用set_clock_uncertainty 约束时钟网络的skew
; ^, o* Z3 ^$ p3 K) T9 J, Q
7 d. c' A$ N/ Y2.9 如何约束时钟的latency?3 N" M# X q4 g# X: }8 }3 _/ b/ V1 p
使用 set_clock_latency
# E& `6 D, |( k* r+ J- R1 g4 K+ f+ B6 V: C. {9 U
2.10 如何对当前设计的端口外部条件进行约束?( A1 A% m2 }; _/ A9 X: J
端口的外部条件包括 输入驱动大小,输出负载的大小,扇出大小。
! V+ l: X) W8 L" n, o2 L) _( b8 c
2.11 输入端口被多大的驱动所驱动?
. p9 `' t; U1 g$ l* m+ K& l 可以使用set_dirive 和set_driving_cell
0 k6 i$ Z" w$ e# F3 L+ x2 p$ p. S) N1 o4 c5 n0 j7 p0 j
2.12 输出端口要驱动多大的负载?
$ e5 f! M; i8 h9 T 使用set_load 对输出电容值进行约束' o: T% z; \ w( W( o9 I& F
& u" R+ z3 W8 ~# a; R
2.13 DC是基于path的综合,那么在约束时如何体现?1 f8 ~; z' A6 u& V; F$ h i
我们知道,基于path会有四种路径形式,DC中提供, o2 ~: k) V" b- G/ W0 O x
create_clock 定义寄存器和寄存器之间的路径;$ A$ J5 Z& X5 r ^+ {
set_input_delay 定义输入与寄存器之间的路径;- y+ F9 F& j% o- Q7 L! R% y9 ]
set_output_delay 定义寄存器与输出之间的路径;
. f4 b& y. e2 i3 Q4 E- x% A1 ~ set_max_delay和 set_min_delay定义输入和输出的组合路径;! U* D: w" g& Y' p
1 Z8 ^9 t8 P6 q3 q d3 ?3 |1 K
2.14 set_input_delay 的目的是什么?: k4 q* \0 Q8 b
定义输入延时,来约束设计中输入逻辑的时序
% e( ~' n; |% Y7 [, ]
) \& O/ n: j: R+ B/ u/ W) g- e2.15 set_output_delay 的目的是什么?, v* W; ?2 M/ m4 B# D9 G r1 _
定义输出延时,来约束设计中的输出逻辑的时序7 K5 X9 ~7 f; \( J8 L1 V- _( a0 H
0 Q4 `4 O1 i8 A; [# N/ S; Z) M
2.16 如何对组合电路进行约束?2 S2 s. R6 F, P. e4 `9 |0 P5 k9 @
组合电路有set_max_delay 和set_min_delay进行约束
% ]' `. g9 O6 J( x3 `+ y% t6 i9 |, B- F
2.17 如何对电路的速度进行约束? I/ R* v9 F; o' v
采用对电路时钟周期的约束的方式来约束电路的速度,使用create_clock
3 L! B" K5 F1 y% {; v3 ]* B( y5 d5 u7 ~' a+ h, O5 n; X
2.18 当一个组合电路超过了时钟周期约束,那么该如何处理?
q- f7 P0 W% T- e$ J: _+ U 如果必须要满足时钟周期约束,那必须修改设计,如果不必要严格要求,那么可以set_false_path可以躲过path check。
, [) G3 M a9 {0 _2 O" l9 P5 v" @! R- x! x
2.19 当出现环路电路是,如何约束电路?
0 V# }8 [: Y) X( k6 i1 V& v 对某一路径使用set_false_path/ k$ g6 ^% @* o0 V6 G
0 Y& X: l; t. W" Z# J. m
2.20 如何加强设计规则的约束?+ Q" K) {1 J$ j' r [, S
DRC是电路必须满足的设计规则,使用8 b% f; e# }+ H
set_max_capcitance 3 n! Q F, X _$ b5 \5 `8 g6 [
set_max_fanout6 t% ?! i& P6 F& z1 y
set_max_tansition' d, a5 E/ D( {7 y- ]
0 C6 r7 O9 E: d0 q
2.21 在添加了4种路径约束后,如何为某些路径移除约束呢?
: R$ F+ {; b- ~* q _6 { 使用set_flase_path使得某些路径不进行timing check
T% z: O/ R5 v% S1 d8 r5 W- t# i& T9 |: y% G2 _' U
2.22 对于某些路径需要在固定的几个周期内完成,如何对这些路径进行约束?
' ]: d' ?. Q; ?6 i; S9 s2 k 使用set_multicycle_path 对路径进行约束1 n1 T0 O% W$ e. j3 b- G' |# e2 [
3 m* V7 r/ N, u
2.23 在添加这些特殊的路径约束,如何恢复原来通用的时序约束?9 S) n/ B" ~1 E: n( M
使用reset_path" s M( i0 u7 \+ g; z% K6 F. K
& p0 c7 {2 W" O3 L2.24 如何对三态门进行约束?: f" b1 t/ V; i
由于综合时,默认三态门是enable的,所以对某些路径要设置set_false_path
: I. Q# v5 v: R9 a& b B
9 [$ E3 r) h- ^& ?* H6 U& U4 r2.25 如何对门控时钟进行约束,以保证功能正常?* ^# e0 b U: [4 p
对门控时钟电路进行setup和hold检查,使用set_gating_clock_check, z8 V* v, ?+ x N _4 r" m1 P
# J3 H6 m5 m8 f
2.26 设置对某些网络比如时钟或者复位不进行添加buffer等操作,应该怎么约束?
9 n5 y* a' |, T. Y: L 使用set_dont_touch_network
% E2 Y1 m7 d7 F& a! I. ]4 u5 t) a3 S, K* G$ j
2.27 如何修正hold 时间冲突?! Q& K$ |" N& `- d8 s
加入set_fix_hold约束
Part 3 Compile stategy
" f, k, d& s' Z, @" y1 _3.1 综合时,有多少选择综合策略呢?
6 r, g! @4 [- ?' j1 w: }; J 可以使用top-down 和bottom-top。/ `6 f2 ]& v+ k7 e+ d) c# W8 h
( V0 Y% O( W0 h% _: \) ^3.2 top-down 方式有何优点?9 S# S& d5 v' n8 M" D/ G$ M6 H
仅需提供单一TOP的script
0 Y3 ?8 A" M" M5 q+ O$ t 将设计作为一个整体,可得到较好的结果. J# c8 L. s3 f- [( X5 k
, H. C6 Q: X, A7 L# L$ ?
3.3 bottom-up方式有什么优点?" I' K# R% S2 z: |) B1 m( W
对多时钟的综合更为适合# e, j# U$ t4 R3 L
每个子模块都有自己的script,便于管理/ z% x, f/ z0 o% J
当一个模块改变时,不用重新综合所有设计' _/ M+ e* u& z, E+ w
& ^$ _/ }, e9 m
3.4 如何进行time-budge?
4 H1 {5 Z; L% H& L* \* f 使用characteristic
- o, u6 U8 x/ M4 s( l9 ^; A3 g" L* q
7 X$ M' M; w: Y- W+ X! o: h3.5 top-down 方式有何缺点?7 h: ?+ C0 ]. |7 t
编译时间长 p( p9 a; _3 F4 D0 R7 f( M' P
子模块改变则整个设计都要重新综合+ g, h" O! Q7 K }) O9 {, _
对多时钟设计综合效果不好
, e" ^. t" O9 Q# U8 P4 ?
7 L H5 r7 K8 T/ ~5 J$ N" I3.6 bottom-up方式有什么缺点?
6 t/ L! m) z; q 需要维护多个script6 y: b7 V! X n8 B% ~3 e) ^: f
TOP的关键路径在子模块也许并不是关键路径
: i9 d9 f5 P* @ k; T. B9 ~* j9 d$ T) T# z/ @3 h$ C8 g! [# n, j
3.7 编译时的 -incremental 是什么意思?! I, T2 e! A+ y8 \: t
设计映射为门之后,时序和面积约束可以再定义,incremental确保维持以前的电路结构,只作改善时序和性能,不添加不必要的逻辑。8 G/ O' |; f z
Part 4 Analyze the report
( F5 P) Y1 l j1 E' a3 m0 S
; C, H) [' e; t$ m1 O+ \3 H4.1 如何看面积报告?
7 b8 n8 h* ]2 e+ S/ p2 K/ P8 l report_area
6 g; |: |+ W( F, I1 M* M0 g; u, x; F, K$ y
4.2 如何看时序报告?2 |# p. x5 o7 n; a& ?! i" U! o5 ]! T
report_timing
* ?2 c6 Z( H; K# u2 v
( z ]" Y$ r; t7 D4.3 想对单独的单元看面积报告, 用什么命令?
% K! Q8 i; V$ A report_cell 但是缺省的report_cell只能看current_design下面的一级的cell的面积.因此就有两种方法解决这个问题:
' k& A) n/ A( s" v# [: X d 1, 用report_cell [get_cells -hier *]可以看所有的cells面积4 \. Q: u, ? Z- R, I! e. V
2. 用list_design列出所有的design, 然后改变current_design到你所想要看的那一级的cell, 然后直接用report_cell.
: l' p s) x) D1 k6 U3 t9 Y* K) c
+ ]% J+ j b! F4.4 如何看设计环境和线载模型?
. Z; `5 r$ m" K3 `1 p2 I. W& g report_design
( E, o+ a0 E& ?4 x, ~5 x2 M8 {+ j
' H" t! n+ E1 s3 E; `4 Y( @9 s4.5 若设计规则和时序违反约束,如何查看? B5 d# Y! f: J) C, {/ v8 j
使用report_constraint -all_violators
5 G; x d; T7 F q1 C! M7 ]
3 }# T- _6 Y3 v7 p0 \% J4.6 如何查看连线的扇入,扇出,负载,电容和跳变时间?$ j& W3 Y1 z4 z' Z- L5 ], p7 P, {) ]
使用report_net: C( y2 [5 f$ g
2 g$ {9 H$ ?5 Q2 v$ p/ ^8 I, h Z4.6 如何看整个综合后的网表中使用多少种类型的电路门?" Q0 f! Y: d8 I4 Z: |
使用report_hierarchy7 L3 _' u( T, }) w. [/ C
" k1 L3 g$ R7 p/ M$ m# t
4.7 如何查看timing exception的时序约束?6 k a) X2 X. V: B
使用report_timing_requirements
Part 5 Output the result
$ ], X8 `( @6 e7 \+ b: k: a9 V5 @4 m+ n" u
5.1 DC支持输出什么格式?
2 G9 q' X- m( e$ h% b! U) f DC可以输出.v , .vhdl , .db格式的文件3 [6 E, U/ Z6 g$ G* u, N" |5 {
1 L' n9 i5 r! M' s8 ^5.2 如何输出网表文件?
1 \+ p9 w% B' F' m- R& Z7 F% u 使用write -format 文件
) |. L' [2 D! t% N% |8 q( K