本章节主要学习定义芯片(模块)尺寸大小。
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。
因此需要指定:
也就是:
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 边界。
因此需要指定:
也就是:
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,因此需要指定:
也就是:
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
这里 u1 和 u2 都使用同一个 sub 模块。
没有 uniquify 时:
uniquify 后:
1 2 u1 使用 sub_u1 u2 使用 sub_u2
这样工具就可以对 u1 和 u2 分别优化,不会互相影响。
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 逻辑
而不是:
如果 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,就可能说明某个输出脚被短接到电源或地,通常比较危险。
该信息表示某些 instance 的多个输入 pin 接到了同一根 net 上。
例如:
spi_sr_reg_1 的 D 和 SI 都连接到 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,说明这一项正常。
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 控制信号漏接或连接错误