Design Compiler FAQ
Part1 DC Basics$ M0 f, G; {8 t$ M) a1 \
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 命令
文章评论(0条评论)
登录后参与讨论