(3) Innovus LAB5-6/LAB5-7

本章节主要学习定义芯片(模块)尺寸大小。

GUI界面操作: Floorplan—-> Specify Floorplan

方式 你需要设置什么 工具做什么 适合场景
Aspect Ratio + Utilization 利用率、宽高比例 自动计算 H 和 W 初学、自动估算 floorplan
Dimension 直接指定宽度 W 和高度 H 按指定尺寸生成 floorplan 尺寸已经确定的芯片/模块

芯片或模块大小有两种方式来指定。本lab是根据Aspect Ratio,即给定利用率,工具自己来算出H和W(高度和宽度)。因此这里默认是矩形形状,H*W即为面积。

还有一种方式是通过Dimension,即直接指定H和W大小。

另外,对于本lab是带IO的设计,所以我们还需要指定Core2IO的间距。如果是模块级的,我们就需要指定Core2Die的间距。

怎么理解这句话呢:

Floorplan 中 Core2IO 和 Core2Die 的区别

在 Innovus 做 floorplan 时,需要设置 Core 区域和外围边界之间的间距

这里要先区分几个概念:

概念 含义
Die 整个芯片或模块的最外边界
Core 标准单元真正摆放的区域
IO 芯片四周的 IO Pad
Core2IO Core 区域到 IO Pad 的距离
Core2Die Core 区域到 Die 边界的距离

1. 带 IO 的设计:设置 Core2IO

如果是 chip-level 顶层设计,芯片四周通常会有一圈 IO Pad。

示意图如下:

1
2
3
4
5
6
7
+--------------------------------+
| IO Pad |
| +------------------------+ |
|IO | Core Area | IO|
| +------------------------+ |
| IO Pad |
+--------------------------------+

这种情况下,Core 外面不是直接到 Die 边界,而是先到 IO Pad。

因此需要指定:

1
Core2IO

也就是:

Core 区域到 IO Pad 之间的距离。

这个距离主要用于给以下内容预留空间:

用途 说明
IO 到 Core 的连线 方便 IO 信号连接到内部逻辑
Power Ring 给电源环预留空间
信号布线通道 避免 IO 附近布线过于拥塞
Pad 相关结构 给 ESD、Pad 结构等留空间

所以,如果本 Lab 是 带 IO 的设计,就需要设置 Core2IO 间距


2. 模块级设计:设置 Core2Die

如果是 block-level / module-level 设计,通常没有 IO Pad,只有模块边界和内部 Core。

示意图如下:

1
2
3
4
5
6
7
8
+--------------------------------+
| Die |
| |
| +----------------------+ |
| | Core Area | |
| +----------------------+ |
| |
+--------------------------------+

这种情况下,Core 外面直接就是 Die 边界。

因此需要指定:

1
Core2Die

也就是:

Core 区域到 Die 边界之间的距离。

这个距离主要用于给以下内容预留空间:

用途 说明
Power Ring 给模块电源环预留空间
Block Pin 给模块边界引脚留空间
信号布线通道 给外部信号连接内部逻辑预留通道
边界保护区域 避免标准单元太靠近模块边界

3. Core2IO 和 Core2Die 对比

对比项 Core2IO Core2Die
适用设计 带 IO Pad 的芯片级设计 不带 IO Pad 的模块级设计
距离含义 Core 到 IO Pad 的距离 Core 到 Die 边界的距离
外围对象 IO Pad Die 边界
常见用途 IO 连线、电源环、Pad 结构、布线通道 电源环、Block Pin、布线通道、边界保护
常见场景 Top-level chip Block-level module

4. 简单记忆

1
2
有 IO Pad:设置 Core2IO
没有 IO Pad:设置 Core2Die

也可以这样理解:

芯片级设计看 Core 到 IO 的距离;模块级设计看 Core 到 Die 边界的距离。


5. 本 Lab 中的情况

本 Lab 是 带 IO 的设计,芯片四周有 IO Pad,因此需要指定:

1
Core2IO

也就是:

Core 区域到 IO Pad 之间的间距。

设置这个间距的目的是为了给 IO 连线、电源环和布线通道预留足够空间。

点击OK后,layout显示如下图所示。IO和CORE之间就有了100um的距离。

LAB5-7

这个章节介绍设计导入后的基本检查,主要检查设计参考库以及netlist本身的问题。

本节就介绍一个命令——checkDesign -netlist的使用及其意义。

这个命令主要检查以下几个要点:

总而言之,就是检查设计(netlist)是否导入成功,物理库,比如lef是否正确,是否有缺失,时序库library (lib)是否有缺失等等。

1)物理库缺,比如某个macro或者标准单元的lef缺了。那后面的所有结果都是错的。

2)lib库缺,就会出现cell的unresolved,即无法link成功,这样timing都是不准的,相关的timing大概率都不会做优化。

3)电源和地的连接是否正确,主要是derive pg是否正确。

4)tie cell的定义是否正确等。

我们这个lab执行checkDesign -netlist后结果如下:

从结果上我们可以看到当前设计有192条 output floating net。当然设计中是允许存在output floating的。

设计中有3条high fanout net。

设计中有4种cell有dont use 属性。

在我们的work/checkDesign/目录下会生成一个叫DTMF_CHIP.main.htm.ascii的文件,这里面会有checkDesign的详细信息。比如三条High fanout net分别为macro的时钟端clk和scan_enI。

当前设计里有 192 个未使用输出、3 个高扇出网络、4 种被标记为 dont_use 但仍被实例化的 cell。这些不一定是错误,但需要确认是否符合设计预期。

后端对于命令的掌握都是需要通过项目实战慢慢积累起来的。而命令的学习掌握都是通过man和help来获取命令的使用方法以及各种选项。

比如想要知道checkDesign的相关解释以及用法,可以通过下面两种方式来获取。

man checkDesign
help checkDesign (或checkDesign -help)

下面看一下checkDesign -netlist之后打印的相关log:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
###############################################################
# Generated by: Cadence Innovus 21.10-p004_1
# OS: Linux x86_64(Host ID vmachine)
# Generated on: Sat Jun 6 21:47:43 2026
# Design: DTMF_CHIP
# Command: checkDesign -netlist
###############################################################


==============================
Design Stats
==============================
Design Name: DTMF_CHIP
------------------------------
Cells used in the design
------------------------------
ADDFHX1
ADDHX1
AND2X1
AND3X1
AND4X1
AOI211X1
AOI21X1
AOI221X1
AOI221XL
AOI222X1
AOI222XL
AOI22X1
AOI2BB1X1
AOI31X1
AOI32X1
AOI33X1
BUFX1
BUFX2
BUFX3
BUFXL
CLKBUFX2
CLKBUFX3
CLKBUFXL
DFFRHQX1
INVX1
INVXL
MX2X1
MXI2X1
NAND2BX1
NAND2X1
NAND3BX1
NAND3X1
NAND3XL
NAND4BBX1
NAND4BXL
NAND4X1
NOR2BX1
NOR2X1
NOR3BX1
NOR3X1
NOR4BBX1
NOR4BX1
NOR4X1
OAI211X1
OAI21X1
OAI21XL
OAI221XL
OAI222XL
OAI22X1
OAI2BB1X1
OAI2BB2X1
OAI31X1
OAI32X1
OAI33X1
OR2X1
OR3XL
OR4X1
SDFFHQX1
SDFFNRX1
SDFFNX1
SDFFNXL
SDFFRHQX1
SDFFSHQX1
SEDFFX1
XNOR2X1
XOR2X1
PDIDGZ
PDO04CDG
PVDD1DGZ
PVSS1DGZ
PCORNERDG
Number of cells used in the design 71
Please refer to DTMF_CHIP_cell.list for more details
------------------------------
Non-uniquified instances used in the design
------------------------------
IOPADS_INST/Pibiasip
IOPADS_INST/Ppllrstip
IOPADS_INST/Prefclkip
IOPADS_INST/Pintip
IOPADS_INST/Presetip
IOPADS_INST/Pspidip
IOPADS_INST/Pspifsip
IOPADS_INST/Ptestmdip
IOPADS_INST/Pscanin2ip
IOPADS_INST/Pscanin1ip
IOPADS_INST/Pscanckip
IOPADS_INST/Pscanenip
IOPADS_INST/Ptdspip00
IOPADS_INST/Ptdspip01
IOPADS_INST/Ptdspip02
IOPADS_INST/Ptdspip03
IOPADS_INST/Ptdspip04
IOPADS_INST/Ptdspip05
IOPADS_INST/Ptdspip06
IOPADS_INST/Ptdspip07
IOPADS_INST/Ptdspip08
IOPADS_INST/Ptdspip09
IOPADS_INST/Ptdspip10
IOPADS_INST/Ptdspip11
IOPADS_INST/Ptdspip12
IOPADS_INST/Ptdspip13
IOPADS_INST/Ptdspip14
IOPADS_INST/Ptdspip15
IOPADS_INST/Pvcomop
IOPADS_INST/Pscanout2op
IOPADS_INST/Pscanout1op
IOPADS_INST/Pvcopop
IOPADS_INST/Ptdigop0
IOPADS_INST/Ptdigop1
IOPADS_INST/Ptdigop2
IOPADS_INST/Ptdigop3
IOPADS_INST/Ptdigop4
IOPADS_INST/Ptdigop5
IOPADS_INST/Ptdigop6
IOPADS_INST/Ptdigop7
IOPADS_INST/Ptdigfgop
IOPADS_INST/Ptdspop00
IOPADS_INST/Ptdspop01
IOPADS_INST/Ptdspop02
IOPADS_INST/Ptdspop03
IOPADS_INST/Ptdspop04
IOPADS_INST/Ptdspop05
IOPADS_INST/Ptdspop06
IOPADS_INST/Ptdspop07
IOPADS_INST/Ptdspop08
IOPADS_INST/Ptdspop09
IOPADS_INST/Ptdspop10
IOPADS_INST/Ptdspop11
IOPADS_INST/Ptdspop12
IOPADS_INST/Ptdspop13
IOPADS_INST/Ptdspop14
IOPADS_INST/Ptdspop15
IOPADS_INST/Pcornerlr
IOPADS_INST/Pcornerll
IOPADS_INST/Pcornerur
IOPADS_INST/Pcornerul
IOPADS_INST/Pavss0
IOPADS_INST/Pavdd0
IOPADS_INST/Pvdd3
IOPADS_INST/Pvdd2
IOPADS_INST/Pvdd1
IOPADS_INST/Pvdd0
IOPADS_INST/Pvss3
IOPADS_INST/Pvss2
IOPADS_INST/Pvss1
IOPADS_INST/Pvss0
Number of Non-uniquified instances in the design 71
Please refer to DTMF_CHIP_cell.list for more details

==============================
Top Level Netlist Check
==============================
Floating Ports: 0
Ports Connect to multiple Pads: 0
Ports connected to core instances: 0

==============================
Instance Pin Check
==============================
Output pins connected to Power Ground net 0
------------------------------
Instances with multiple input pins tied together
------------------------------
Inst Net Term Term...
DTMF_INST/SPI_INST/spi_sr_reg_1 DTMF_INST/SPI_INST/spi_sr[0] D SI
DTMF_INST/SPI_INST/spi_sr_reg_2 DTMF_INST/SPI_INST/spi_sr[1] D SI
DTMF_INST/SPI_INST/spi_sr_reg_3 DTMF_INST/SPI_INST/spi_sr[2] D SI
DTMF_INST/SPI_INST/spi_sr_reg_4 DTMF_INST/SPI_INST/spi_sr[3] D SI
DTMF_INST/SPI_INST/spi_sr_reg_5 DTMF_INST/SPI_INST/spi_sr[4] D SI
DTMF_INST/SPI_INST/spi_sr_reg_6 DTMF_INST/SPI_INST/spi_sr[5] D SI
DTMF_INST/SPI_INST/spi_sr_reg_7 DTMF_INST/SPI_INST/spi_sr[6] D SI

Instances with input pins tied together 7
TieHi/Lo term nets not connected to instance's PG terms 0
------------------------------
Floating Instance terminals
------------------------------
TieHi/TieLo Term Type Term Name Inst Type Inst Name
TieLo Input WEN DTMF_INST/RAM_256x16_TEST_INST/RAM_256x16_INST
TieLo Input CEN DTMF_INST/RAM_256x16_TEST_INST/RAM_256x16_INST
TieLo Input WEN DTMF_INST/RAM_128x16_TEST_INST/RAM_128x16_INST
TieLo Input CEN DTMF_INST/RAM_128x16_TEST_INST/RAM_128x16_INST
Floating Instance terminals 4
Floating IO terms 0
Tie Hi/Lo output terms floating 0
Output term shorted to Power Ground net 0

==============================
Primitive Net DRC Check
==============================
Nets with tri-state driver: 0
Nets with parallel drivers: 0
Nets with multiple drivers: 0
Nets with no driver (No FanIn): 0
------------------------------
No FanOut Net
------------------------------
DTMF_INST/TDSP_DS_CS_INST/port_read
DTMF_INST/TDSP_DS_CS_INST/port_write
DTMF_INST/TDSP_CORE_INST/DATA_BUS_MACH_INST/sync
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_cmd[0]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_cmd[1]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_cmd[2]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_cmd[3]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[0]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[1]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[2]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[3]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[4]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[5]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[6]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[7]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[8]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[9]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[10]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[11]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[12]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[13]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[14]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/pdr[15]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[0]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[1]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[2]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[3]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[4]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[5]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[6]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[7]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[8]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[9]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[10]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[11]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[12]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[13]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[14]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/alu_out[15]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[0]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[1]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[2]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[3]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[4]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[5]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[6]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[7]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[8]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[9]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[10]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[11]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[12]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[13]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[14]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[15]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[16]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[17]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[18]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[19]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[20]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[21]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[22]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[23]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[24]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[25]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[26]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[27]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[28]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[29]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[30]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/ze_mdr[31]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[0]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[1]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[2]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[3]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[4]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[5]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[6]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[7]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[8]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[9]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[10]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[11]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[12]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[13]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[14]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[15]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[16]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[17]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[18]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[19]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[20]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[21]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[22]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[23]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[24]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[25]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[26]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[27]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[28]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[29]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[30]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/se_shift_mdr[31]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_port_adr[0]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_port_adr[1]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_port_adr[2]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_port_adr[3]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_port_adr[4]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_port_adr[5]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_port_adr[6]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_port_adr[7]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_adr[0]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_adr[1]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_adr[2]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_adr[3]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_adr[4]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_adr[5]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_adr[6]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/res_adr[7]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[0]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[1]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[2]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[3]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[4]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[5]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[6]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[7]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[8]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[9]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[10]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[11]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[12]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[13]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[14]
DTMF_INST/TDSP_CORE_INST/TDSP_CORE_GLUE_INST/p_data_in[15]
DTMF_INST/TDSP_CORE_INST/DECODE_INST/phi_5
DTMF_INST/TDSP_CORE_INST/DECODE_INST/phi_4
DTMF_INST/TDSP_CORE_INST/DECODE_INST/phi_2
DTMF_INST/TDSP_CORE_INST/DECODE_INST/phi_1
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[0]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[1]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[2]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[3]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[4]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[5]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[6]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[7]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[8]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[9]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[10]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[11]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[12]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[13]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[14]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/pdr[15]
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/z
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/decode_skip_one
DTMF_INST/TDSP_CORE_INST/EXECUTE_INST/phi_2
DTMF_INST/TDSP_CORE_INST/ACCUM_STAT_INST/ov
DTMF_INST/TDSP_CORE_INST/ACCUM_STAT_INST/z
DTMF_INST/TDSP_CORE_INST/MPY_32_INST/ovm
DTMF_INST/TDSP_CORE_INST/PORT_BUS_MACH_INST/sync
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/sync
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[0]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[1]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[2]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[3]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[4]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[5]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[6]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[7]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[8]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[9]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[10]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[11]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[12]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[13]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[14]
DTMF_INST/TDSP_CORE_INST/PROG_BUS_MACH_INST/data_in[15]
DTMF_INST/TDSP_CORE_INST/UNCONNECTED_016
DTMF_INST/TDSP_CORE_INST/UNCONNECTED_015
DTMF_INST/TDSP_CORE_INST/UNCONNECTED_014
DTMF_INST/TDSP_CORE_INST/UNCONNECTED_013
DTMF_INST/TDSP_CORE_INST/UNCONNECTED_012
DTMF_INST/TDSP_CORE_INST/UNCONNECTED_011
DTMF_INST/TDSP_CORE_INST/UNCONNECTED_010
DTMF_INST/TDSP_CORE_INST/UNCONNECTED_009
DTMF_INST/TDSP_CORE_INST/UNCONNECTED_000
DTMF_INST/TDSP_MUX/t_read
DTMF_INST/UNCONNECTED_001
DTMF_INST/UNCONNECTED_000
DTMF_INST/lpcm[13]
Output Floating nets (No FanOut) 192
------------------------------
High FanOut Net
------------------------------
DTMF_INST/m_rcc_clk
DTMF_INST/m_clk
scan_enI
High Fanout nets (>50) 3

==============================
Sub Module Port Definition Check
==============================
Tie Hi/Lo instances connected to output: 0
Verilog nets with multiple drivers: 0

==============================
Dont Use Cells Used in Design
==============================
------------------------------
Dont use cells in design
------------------------------
pllclk
ram_128x16A
rom_512x16A
ram_256x16A
Dont use cells in design 4

其中的一段log信息:

1
2
Number of Non-uniquified instances in the design  71  
Please refer to DTMF_CHIP_cell.list for more details

这里的qualify是啥意思:

Innovus / DC 中的 Uniquify

1. Uniquify 是什么?

uniquify 的意思是:
把多个共用同一个模块定义的 instance,复制成各自独立的模块定义。

简单理解:

原来多个 instance 共用一个 module 模板;
uniquify 之后,每个 instance 都有自己独立的 module 版本。


2. 为什么需要 Uniquify?

如果多个 instance 共用同一个模块定义,工具在优化或修改其中一个 instance 时,可能会影响其他 instance。

例如:

1
2
3
4
module top;
sub u1 (...);
sub u2 (...);
endmodule

这里 u1u2 都使用同一个 sub 模块。

没有 uniquify 时:

1
u1 和 u2 共用同一个 sub 定义

uniquify 后:

1
2
u1 使用 sub_u1
u2 使用 sub_u2

这样工具就可以对 u1u2 分别优化,不会互相影响。


3. Non-uniquified instances 是什么意思?

在 Innovus 的 checkDesign -netlist 报告中看到:

1
Number of Non-uniquified instances in the design 71

意思是:

当前设计中有 71 个 instance 没有被 uniquify,也就是它们仍然可能共用某些模块或 cell 定义。

这通常只是统计信息,不一定是错误


4. 什么时候需要关心?

场景 是否需要处理
IO pad、标准单元、macro 没有 uniquify 通常不用管
只是 checkDesign -netlist 打印统计信息 一般不是错误
多个相同子模块需要分别优化 需要考虑 uniquify
某个 instance 需要单独修改逻辑或约束 需要考虑 uniquify
层次化设计中模块共用导致优化互相影响 需要关注

5. 简单类比

概念 类比
module 定义 模板
instance 用模板生成的对象
non-uniquified 多个对象共用同一个模板
uniquify 给每个对象复制一份独立模板

6. 一句话总结

uniquify 就是把共用同一个模块定义的多个 instance 独立化,方便工具对不同 instance 进行单独优化或修改。

如果在报告中看到:

1
Number of Non-uniquified instances in the design 71

一般可以理解为:

设计中有 71 个实例还没有独立化。
如果只是 IO pad、macro 或普通统计信息,通常不用特别处理。

下面这段log详解:

1
2
3
4
5
6
==============================
Top Level Netlist Check
==============================
Floating Ports: 0
Ports Connect to multiple Pads: 0
Ports connected to core instances: 0

这段是 checkDesign -netlist 里面的 顶层网表检查,主要检查 顶层端口和 IO Pad / Core 之间的连接关系是否正常。你这里三个结果都是 0,说明这一部分检查是正常的。

Log 项 中文理解 结果 说明
Floating Ports 悬空的顶层端口 0 没有顶层 port 悬空
Ports Connect to multiple Pads 一个顶层 port 连接多个 IO Pad 0 没有一个 port 接到多个 pad 的问题
Ports connected to core instances 顶层 port 直接连到 core 内部实例 0 没有绕过 IO Pad 直接连 core 的问题

简单理解:

1
Top Port → IO Pad → Core Logic

对于带 IO Pad 的芯片级设计,正常连接关系应该是:

1
2
3
4
5
芯片顶层端口

IO Pad

内部 core 逻辑

而不是:

1
2
3
芯片顶层端口

内部 core 逻辑

如果 Ports connected to core instances 不是 0,就说明有些顶层端口可能绕过了 IO Pad,直接接到了内部逻辑,这在 chip-level 设计里通常是不希望看到的。

所以你这段可以记成:

这部分检查顶层端口连接是否规范。当前结果全是 0,说明顶层 port 没悬空、没有一个 port 接多个 pad,也没有顶层 port 绕过 pad 直接连 core,整体正常。

下面的这段log作用是啥:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
==============================
Instance Pin Check
==============================
Output pins connected to Power Ground net 0
------------------------------
Instances with multiple input pins tied together
------------------------------
Inst Net Term Term...
DTMF_INST/SPI_INST/spi_sr_reg_1 DTMF_INST/SPI_INST/spi_sr[0] D SI
DTMF_INST/SPI_INST/spi_sr_reg_2 DTMF_INST/SPI_INST/spi_sr[1] D SI
DTMF_INST/SPI_INST/spi_sr_reg_3 DTMF_INST/SPI_INST/spi_sr[2] D SI
DTMF_INST/SPI_INST/spi_sr_reg_4 DTMF_INST/SPI_INST/spi_sr[3] D SI
DTMF_INST/SPI_INST/spi_sr_reg_5 DTMF_INST/SPI_INST/spi_sr[4] D SI
DTMF_INST/SPI_INST/spi_sr_reg_6 DTMF_INST/SPI_INST/spi_sr[5] D SI
DTMF_INST/SPI_INST/spi_sr_reg_7 DTMF_INST/SPI_INST/spi_sr[6] D SI

Output pins connected to Power Ground net 0

log解析:
Output pins connected to Power Ground net 0

意思是:

没有发现 cell 的输出 pin 被直接接到 VDD 或 VSS。

这是正常的。

如果不是 0,就可能说明某个输出脚被短接到电源或地,通常比较危险。

Instances with multiple input pins tied together

该信息表示某些 instance 的多个输入 pin 接到了同一根 net 上。

例如:

spi_sr_reg_1DSI 都连接到 spi_sr[0]

其中:

  • D 是普通数据输入;
  • SI 是 scan input,扫描测试输入。

这通常出现在 scan flip-flop 中。
如果当前实验不关注 scan chain,这一般不是严重错误;
如果后续需要做 DFT / scan test,则需要检查 SI 是否应该接到真正的扫描链上。

TieHi/Lo term nets not connected to instance’s PG terms 0
TieHi/Lo term nets not connected to instance’s PG terms 0

意思是:

TieHi / TieLo 相关连接没有发现电源地连接异常。

TieHi 表示固定逻辑 1,TieLo 表示固定逻辑 0。

结果是 0,说明这一项正常。

  1. Floating Instance terminals
    Floating Instance terminals

这一段比较重要,它是在说:

有些 instance 的 pin 没有正常连接,而是被工具认为是 floating 或 TieLo 处理。

你这里有 4 个:

TieLo Input WEN RAM_256x16_INST
TieLo Input CEN RAM_256x16_INST
TieLo Input WEN RAM_128x16_INST
TieLo Input CEN RAM_128x16_INST

可以这样理解:

字段 含义
TieLo 该 pin 被接成逻辑 0,或者被工具认为需要 TieLo
Input 这是输入端口
WEN Write Enable,写使能
CEN Chip Enable,片选使能
RAM_256x16_INST 对应的 RAM 实例

这里重点是 RAM 的 WEN 和 CEN。

很多 RAM 的控制信号可能是低有效:

信号 常见含义 如果 TieLo 可能表示
WEN 写使能 RAM 可能一直处于写使能状态
CEN 片选使能 RAM 可能一直被选中

所以这部分要重点确认:

RAM 的 WEN / CEN 接低是不是设计本来就要求的?

如果是课程 lab 本来就这样接,那可以接受。
如果不是故意的,就可能是 RAM 控制信号漏接或连接错误

ESC 关闭 | 导航 | Enter 打开
输入关键词开始搜索