数据准备与库设置:设计数据导入与MMMC配置

各位同学,今天我们来聊聊后端布局布线的第一步——数据准备。这一步看着简单,其实坑不少。我见过不少新手,一上来就急着跑流程,结果数据没准备好,后面全白干。

说白了,数据准备就是把你手里的设计文件、工艺文件、约束文件,全部整理好,让EDA工具能读懂。这一步做扎实了,后面才能顺风顺水。

设计数据导入:三大核心文件

后端设计需要导入的文件,主要有三个:netlist、LEF、DEF。我一个个说。

1. Netlist(网表)

网表就是芯片的逻辑连接关系。它告诉你,哪些标准单元连在一起,哪些端口是输入输出。通常前端工程师会给你一个综合后的门级网表,格式是Verilog或VHDL。

我个人的习惯:拿到网表后,先做一遍语法检查。别信前端说“没问题”,我遇到过好几次,网表里漏了一个分号,或者模块名拼写错误,导致后面跑不起来。

# 用vcs或ncverilog做语法检查
vcs -full64 -sverilog -l lint.log top_netlist.v

检查通过后,再确认一下网表里有没有黑盒子(black box)。黑盒子就是没有具体实现的模块,比如某些IP核。如果有,你得提前准备好对应的库文件。

2. LEF(Library Exchange Format)

LEF文件描述的是标准单元和宏单元的物理信息。比如单元的高度、宽度、引脚位置、布线阻挡层等。它不包含逻辑功能,只包含物理尺寸。

LEF分两种:

  • 技术LEF:描述工艺信息,比如金属层数、最小线宽、间距规则。这个通常由工艺厂提供。
  • 单元LEF:描述每个标准单元的物理信息。比如一个NAND2X1单元,长宽是多少,VDD和VSS引脚在哪。

避坑指南:我曾经遇到过,单元LEF里某个引脚的金属层定义错了,导致工具在布线时死活绕不过去。后来查了三天,才发现是LEF里把M1写成了M2。所以,导入LEF后,一定要用工具检查一下。

# 在Innovus中检查LEF
read_lef -tech tech.lef
read_lef -cell std_cells.lef
check_lef -verbose

3. DEF(Design Exchange Format)

DEF文件描述的是设计的物理布局信息。比如芯片的尺寸、I/O引脚的位置、电源网络、以及已经放置好的单元位置。如果你是从前端拿到的初始DEF,那里面可能只有I/O和宏单元的位置。

DEF的导入相对简单,但要注意版本兼容。我记得有一次,工具报错说DEF版本不匹配,后来发现是DEF里写的版本号是5.8,但工具只支持到5.7。改一下版本号就好了。

# 导入DEF
read_def -version 5.7 top.def

工艺文件设置:TF与Tech LEF

工艺文件是后端设计的“法律”。它规定了你能用什么金属层、最小线宽多少、间距多少。没有它,工具根本不知道该怎么画版图。

1. TF文件(Technology File)

TF文件是工艺的“百科全书”。它包含了:

  • 金属层定义(层名、颜色、厚度)
  • 通孔定义(VIA的类型、尺寸)
  • 设计规则(最小线宽、最小间距、最小面积)
  • 电气参数(电阻、电容、单位长度延迟)

我个人建议:拿到TF文件后,先别急着用。打开看看,确认一下金属层数对不对。我遇到过,工艺厂给了28nm的TF,但我们的设计是40nm的,结果跑出来的版图全是错的。

# 在Innovus中加载TF
set_tech_file -tech_file tech.tf

2. Tech LEF

Tech LEF是TF的“精简版”。它只包含布线规则和通孔定义,不包含详细的工艺参数。工具在布线时,主要依赖Tech LEF来判断线宽、间距是否合法。

Tech LEF和TF的关系,有点像“摘要”和“全文”。TF里有的规则,Tech LEF里不一定有。但Tech LEF里有的,TF里一定有。

重要提醒:TF和Tech LEF必须来自同一个工艺版本。混用不同版本的工艺文件,会导致设计规则检查(DRC)失败。我见过最惨的一次,有人混用了28nm HPC和28nm HPM的工艺文件,结果流片回来芯片直接冒烟。

MMMC视图配置:多模式多角分析

MMMC,全称是Multi-Mode Multi-Corner。说白了,就是芯片在不同工作模式(比如正常模式、测试模式、低功耗模式)和不同工艺角(比如慢角、快角、典型角)下,都要能正常工作。

为什么要做MMMC?因为芯片不是只在一种条件下工作的。温度高了,速度会变慢;电压低了,延迟会变大。如果你只在一个角下做时序分析,那流片回来大概率会翻车。

1. 模式(Mode)

模式指的是芯片的工作状态。常见的模式有:

  • 功能模式:芯片正常工作时
  • 扫描测试模式:芯片测试时,通过扫描链输入测试向量
  • 低功耗模式:芯片进入睡眠状态,部分模块关断电源

每种模式下的时钟频率、电压、约束都不一样。你需要为每种模式创建独立的约束文件。

2. 角(Corner)

角指的是工艺、电压、温度(PVT)的组合。常见的角有:

角名称 工艺 电压 温度 用途
SS(慢角) 建立时间检查
FF(快角) 保持时间检查
TT(典型角) 典型 典型 典型 功耗分析

我个人的经验:不要贪多,把所有角都加上。角越多,运行时间越长。通常选3-5个关键角就够了。比如SS、FF、TT,再加一个温度反转角(比如低温慢角)。

3. 配置MMMC视图

在Innovus或ICC2中,配置MMMC视图需要三步:

  1. 定义每个角对应的工艺文件(比如SS角用slow.lib,FF角用fast.lib)
  2. 定义每个模式对应的约束文件(比如功能模式用func.sdc,测试模式用test.sdc)
  3. 将模式和角组合成视图(比如func_ss、func_ff、test_ss)
# 在Innovus中配置MMMC
create_corner -name ss_corner -lib_file slow.lib
create_corner -name ff_corner -lib_file fast.lib

create_mode -name func_mode -sdc_file func.sdc
create_mode -name test_mode -sdc_file test.sdc

create_view -name func_ss -mode func_mode -corner ss_corner
create_view -name func_ff -mode func_mode -corner ff_corner
create_view -name test_ss -mode test_mode -corner ss_corner

set_analysis_view -setup {func_ss test_ss} -hold {func_ff}

小技巧:配置MMMC时,记得把功耗分析也考虑进去。有些工具支持在同一个视图里同时做时序和功耗分析。这样能省不少时间。

知识体系总览

下面这张图,是我自己总结的数据准备与库设置的知识体系。你可以把它当作一个检查清单,每做完一步就打个勾。

数据准备与库设置知识体系 设计数据导入 工艺文件设置 MMMC视图配置 Netlist(网表) LEF(技术LEF + 单元LEF) DEF(物理布局信息) TF文件(工艺参数) Tech LEF(布线规则) 版本一致性检查 模式定义(Mode) 角定义(Corner) 视图组合(View) 核心目标:确保数据完整、工艺匹配、多角覆盖 避免因数据缺失或版本不匹配导致的流片失败

警告:数据准备阶段最容易犯的错误,就是“差不多就行”。我见过太多人,觉得LEF和TF差不多,就混着用。结果后面跑DRC时,报出一堆违例,改都改不完。记住,数据准备阶段多花一小时,后面能省十小时。

好了,这一章的内容就到这里。数据准备是后端设计的地基,地基不稳,房子再漂亮也没用。下一章我们聊聊布局规划,到时候我会分享一些我在项目中用过的实用技巧。


公众号:蓝海资料掘金营,微信deep3321