作者:Darren H. Chen
方向:EDA 工具工程 / 后端实现 / Backend Flow / 后端实现流程 / 工程自动化 / 验证基础设施
demo:LAY-BE-08_standard_formats
标签:Backend Flow EDA APR LEF Liberty Verilog DEF SDC 标准格式 设计数据库 后端实现

Backend Flow 并不是由单一设计文件构成的。

门级 Verilog 网表描述的是设计的逻辑连接关系。Liberty 文件描述的是 timing、power 以及 cell 级逻辑行为。LEF 文件描述的是 technology layer、standard cell abstract、macro abstract、site、pin、obstruction 以及 routing 相关的物理信息。DEF 文件描述的是某个具体设计实例的物理实现状态,包括 die area、row、track、component、pin、blockage、special net 和 route。

这些格式中,没有任何一个文件可以单独完整描述后端实现所需要的全部信息。

一个后端 EDA tool 必须读取它们、对齐它们、交叉检查它们,并把它们转换成一个统一、连贯的内部设计数据库。只有在这个基础上,工具才能继续进行 floorplan、placement、clock tree construction、routing、timing analysis、power analysis、physical check、ECO 和最终 export。

本文讨论 Backend Flow 中标准格式协同背后的架构与方法论:

Verilog  -> 逻辑连接关系
Liberty  -> timing / power / cell behavior
LEF      -> technology 与 physical abstract
DEF      -> 物理实现状态
        ↓
统一的后端设计数据库
        ↓
实现、分析、报告和交付

本文重点不讨论某个具体厂商命令,而是讨论标准格式背后的工程模型,以及为什么成熟 Backend Flow 必须把这些格式看成一套协同工作的语义系统,而不是一组彼此独立的输入文件。


1. Backend Flow 从同一个设计的多个视图开始

一个芯片设计有很多视图。

它有逻辑视图,因为设计包含 module、port、instance、net 和 pin connection。它有物理视图,因为 instance 必须占据 die 上的位置,并且必须满足 row、site、boundary、layer 和 routing 约束。它有 timing 视图,因为每条 path 都有 delay、transition、capacitance、setup check、hold check、clock behavior 和 timing exception。它有 power 视图,因为每个 cell 和 net 都会贡献 dynamic power、leakage power 以及 power network load。它还有制造视图,因为最终图形必须满足 technology 和 foundry rule。

没有任何单一文件格式可以完整覆盖这些信息。

设计视图 主要问题 典型格式来源
逻辑连接关系 存在哪些 instance 和 net? Verilog netlist
Cell 行为 一个 cell 在逻辑上做什么? Liberty function、Verilog model
Timing 行为 timing arc、delay 和 constraint 是什么? Liberty、SDC、SDF、parasitics
物理抽象 cell 多大、pin 在哪里? LEF
物理实现状态 instance、pin、row 和 route 在哪里? DEF
工艺上下文 有哪些 layer、site、track、via 和 grid? LEF technology section、technology file
Signoff layout 最终制造图形是什么? GDS/OASIS 和 layer map

后端实现的过程,本质上就是把这些视图组合起来,并在设计不断演进的过程中保持它们之间的一致性。

这就是为什么后端 EDA tool 不是简单地“读一个网表”。它实际是在构建一个多视图设计数据库。


2. 为什么单一格式无法描述完整的后端设计

考虑下面这个很小的门级网表:

module demo_top (
    input  clk,
    input  a,
    input  b,
    output q
);

wire n1;
wire n2;

AND2X1  U1 (.A(a),  .B(b),  .Y(n1));
INVX1   U2 (.A(n1), .Y(n2));
DFFQX1  U3 (.D(n2), .CK(clk), .Q(q));

endmodule

这个网表很有用,但它只描述了一个逻辑图。

它告诉工具:

U1 是 AND2X1 的 instance。
U2 是 INVX1 的 instance。
U3 是 DFFQX1 的 instance。
这些 instance 通过 net n1 和 n2 连接。
clk 驱动 U3 的 clock pin。

但是,它无法回答后端实现所需的物理和 timing 问题:

AND2X1 有多宽?
INVX1 有多高?
DFFQX1 是否匹配当前 row site?
DFFQX1 中 pin CK 的位置在哪里?
pin Q 使用哪一层 metal?
AND2X1 从 A 到 Y 的 delay 是多少?
DFFQX1 的 clock-to-Q delay 是多少?
DFFQX1 的 setup time 是多少?
U1、U2、U3 应该放在哪里?
net n1 是否已经完成 routing?
clk 是否使用 clock routing rule?

这些答案来自其他格式。

因此,后端工具在构建有意义的实现数据库之前,需要多个输入:

Verilog 提供逻辑 instance graph。
Liberty 提供 timing、power 和 cell behavior。
LEF 提供 physical abstract 和 technology context。
DEF 提供 physical implementation state。

只有当这些格式彼此一致时,数据库才是有意义的。


3. Verilog:逻辑连接关系与层次结构

Verilog netlist 通常是后端实现中最直观的设计输入。

在后端阶段,Verilog 通常是综合后的门级网表,尽管它可能仍然包含 hierarchy、macro instance、black-box reference 和一些特殊 wrapper logic。它定义:

top module
submodule
port
wire
standard-cell instance
macro instance
pin connection
logical hierarchy
constant connection
clock-gating logic
scan cell
spare cell

后端工具读取 Verilog,用它构建设计的第一个逻辑图。

简化模型如下:

Module
 ├─ Port
 ├─ Net
 └─ Instance
      ├─ Master cell name
      ├─ Instance name
      └─ Pin-to-net connection

从数据库角度看,Verilog 创建的是引用关系,而不是完整对象。

例如:

Instance U1 references master cell AND2X1.

在这个阶段,AND2X1 还只是一个名字。工具仍然需要在 project library 中找到这个名字。如果这个 master cell 在 Liberty 中存在但在 LEF 中不存在,timing 可能可以做,但物理 placement 会失败。如果它在 LEF 中存在但在 Liberty 中不存在,placement 可能可以做,但 timing-driven optimization 会不完整。如果两者都不存在,link 就会失败。

这就是为什么必须把 Verilog import 和 library linking 理解为两个不同操作:

Verilog import 建立逻辑引用。
Library linking 将这些引用解析到可用的 cell model。

关键工程检查点不仅是 Verilog 能否被解析,而是每个被引用的 cell 是否都能解析到正确的物理视图和 timing 视图。


4. Liberty:Timing、Power 与 Cell 级行为

Liberty 文件经常被称为 timing library,但在后端实现中,它的作用远不只是提供 delay 数值。

一个 Liberty model 可能描述:

cell name
cell area
pin name
pin direction
pin capacitance
timing arc
setup 和 hold constraint
clock pin
sequential behavior
combinational function
cell leakage power
internal power
output transition behavior
operating condition
PVT corner information
cell usage attribute

对于组合逻辑 cell,Liberty 告诉工具存在哪些 input-to-output arc,以及 delay 如何随着 input transition 和 output load 变化。

对于 sequential cell,Liberty 告诉工具哪个 pin 是 clock pin,哪个 pin 是 data pin,哪个 pin 是 output pin,存在哪些 setup / hold check,以及 clock-to-Q delay 应该如何建模。

从 Backend Flow 角度看,Liberty 会影响很多阶段:

后端阶段 Liberty 的贡献
Link 解析 cell 名称和 pin 语义
Timing analysis 提供 timing arc、查找表、constraint
Placement optimization 支持 timing-driven placement 和 buffering 决策
Clock tree construction 识别 clock pin、sequential cell、clock buffer、inverter
Hold fixing 提供 delay model 和可用 cell
Power analysis 提供 leakage 和 internal power 数据
ECO 支持 replacement、sizing、buffering 和 timing repair

一个常见误区是认为 Liberty 只在 placement 之后才重要。事实上,Liberty 在 design linking 阶段就已经非常重要。

如果 Liberty 文件中的 pin name 不一致、timing arc 缺失、operating condition 错误,或者 sequential attribute 不完整,设计数据库就可能被错误地构建。后续报告仍然可能生成,但结果可能并不代表预期的硅片行为。


5. LEF:Technology Context 与 Physical Abstract

LEF 提供的是物理抽象。

它是抽象逻辑和物理实现之间的桥梁。LEF 通常包含两大类信息:

Technology LEF information
Cell / macro abstract information

Technology-level LEF information 可能包括:

unit
manufacturing grid
routing layer
cut layer
preferred direction
minimum width
spacing-related information
via definition
site definition
track-related information

Cell 和 macro 的 LEF information 可能包括:

macro name
class
origin
size
symmetry
site compatibility
pin name
pin direction
pin shape
pin layer
obstruction
cell boundary
macro blockage

对于 standard-cell placement,LEF 回答这些问题:

standard-cell site 是什么?
cell 有多高?
cell 有多宽?
这个 cell 能否放入生成的 row?
这个 cell 是否支持合法 orientation?

对于 routing,LEF 回答这些问题:

pin 在哪里?
哪些 layer 可以接到 pin?
routing obstruction 在哪里?
有哪些 routing layer?
有哪些 via definition?

对于 macro,LEF 更加关键,因为 top-level implementation 往往只能通过 abstract view 看到 macro。Router 无法使用它不知道的 shape。Placer 如果不知道 macro keepout 或 boundary behavior,也无法正确尊重这些约束。

实际后果很简单:

错误或不完整的 LEF 数据会制造物理实现失败。

这些失败可能表现为 placement overlap、row incompatibility、pin access error、routing blockage issue 或 export mismatch。但根因可能在 physical abstract layer。


6. DEF:某个具体设计的物理实现状态

DEF 经常和 LEF 一起出现,但二者作用不同。

一个有用的区分是:

LEF 描述可复用的 physical abstract。
DEF 描述某个具体设计的 physical state。

LEF 表达:

INVX1 有这样的尺寸和 pin。

DEF 表达:

INVX1 的 instance U123 放在坐标 (x, y)。
port clk 位于这个 boundary location。
core area 中存在这些 row。
存在这些 routing track。
这个 special net 在这些 layer 上完成 routing。
这个 regular net 有这些 route segment。

DEF 可能包含:

version 和 unit
die area
row
track
component
component placement status
pin
pin placement
blockage
region
group
special net
regular net
via
routing segment

因此,DEF 文件是一个设计状态快照。

它可以表示 floorplan DEF、placed DEF、routed DEF 或 final handoff DEF。同一个格式可以出现在不同 flow stage,但语义内容不同。

DEF 阶段 典型内容
Floorplan DEF die area、row、track、pin、blockage、macro placement
Placed DEF component placement、placement status,可能还有 scan order 相关状态
CTS / post-CTS DEF clock routing、clock 相关特殊数据、更新后的 placement
Routed DEF regular net、special net、via、route shape
Handoff DEF 给下游工具使用的最终 physical implementation state

由于 DEF 会引用 component、layer、pin、row 和 track,因此它强烈依赖 LEF 和 technology context。如果工具在理解相应 LEF 定义之前就读取 DEF,它可能不知道如何解释 component master、layer、site 或 routing shape。


7. 四种格式的语义模型

LEF、Liberty、Verilog 和 DEF 可以看成同一个设计世界的四个投影。

Verilog Netlist
逻辑连接关系

Unified Backend Database
统一后端数据库

Liberty
Timing / power / behavior

LEF
Technology / physical abstract

DEF
Physical implementation state

Object Query
cell / net / pin / port

Physical Stages
floorplan / placement / routing

Timing and Power Analysis

Reports and Export

这张图是理解标准格式协同的关键。

EDA tool 不是简单地把每个文件分别存起来,而是要建立跨文件链接:

Verilog instance -> library master
Library master -> Liberty cell
Library master -> LEF macro
DEF component -> Verilog instance
DEF component master -> LEF macro
LEF pin -> Liberty pin
Verilog port -> DEF pin
DEF layer -> LEF technology layer

如果这些链接不完整或不一致,数据库可能被部分构建,但并不可靠。

因此,稳健的 Backend Flow 必须把 import 看成语义集成,而不是文件读取。


8. 跨格式绑定:工具在背后完成的隐藏工作

最重要的工作往往发生在文件解析之后、阶段执行之前。

文件被读取之后,工具必须把名称、对象、layer、pin 和 view 绑定在一起。

一个简化的绑定表如下:

绑定目标 来源 A 来源 B 为什么重要
Cell master Verilog instance master name LEF macro / Liberty cell 支持 link、placement、timing
Pin name Verilog pin connection LEF pin / Liberty pin 支持 routing 和 timing 语义
Port name Verilog top port DEF pin / SDC object 支持 constraint 和 physical I/O placement
Layer name DEF route layer LEF technology layer 支持 route interpretation
Site name DEF row site LEF site 支持 row legality
Component name DEF component Verilog instance 支持 physical state attachment
Timing cell Verilog master Liberty cell 支持 timing graph construction
Physical cell Verilog master LEF macro 支持 placement 和 routing

这就是为什么许多后端错误并不是简单 parser error。

一个文件可能在语法上是合法的,但在语义上与数据库中的其他部分不兼容。

例如:

Verilog 解析成功,但因为 cell master 缺失导致 link 失败。
LEF 导入成功,但因为 pin access 不完整导致 routing 失败。
Liberty 导入成功,但因为 pin name 不匹配导致 timing graph 不完整。
DEF 导入成功,但因为 master name 不一致导致 component 无法挂接。
SDC 读取成功,但因为 port 或 clock name 不一致导致 constraint 没有生效。

工程目标是在早期捕获这些问题。


9. Import Order 是依赖图,不是习惯

初学者常见问题是:为什么 import order 很重要?

答案是每种格式都依赖前面格式建立的上下文。

一个典型依赖图如下:

Start Session
启动 session

Load Technology Context
加载工艺上下文

Load LEF Abstracts
加载 LEF 抽象

Load Liberty Models
加载 Liberty 模型

Read Verilog Netlist
读取 Verilog 网表

Set Top / Current Design Context
设置 top/current design

Link Design to Libraries
将设计链接到 library

Import DEF / Floorplan State
导入 DEF / floorplan 状态

Read Constraints
读取约束

Generate Import and Consistency Reports
生成导入与一致性报告

这个顺序对每个工具并不一定完全相同,但依赖逻辑是稳定的:

DEF 需要 layer、site 和 component-master context。
Verilog link 需要 library context。
Timing analysis 需要 linked design 和 timing library。
Physical stage 需要 physical abstract 和 technology context。
Export 需要完整且一致的数据库。

如果一个 flow 在没有显式顺序的情况下混合这些阶段,问题会更难诊断。好的 flow 会把依赖链显式化。


10. 标准格式就绪状态机

标准格式导入过程可以建模成一个状态机。

files exist / readable / non-empty

technology context loaded

LEF loaded

Liberty loaded

Verilog loaded

references resolved

DEF imported

constraints loaded

consistency reports generated

missing or unreadable file

LEF / technology mismatch

Liberty / cell mismatch

netlist parse failure

unresolved references

DEF cannot bind to LEF / design

FileManifest

FilePrecheck

TechReady

PhysicalAbstractReady

TimingModelReady

LogicalGraphReady

LinkedDesignReady

PhysicalStateReady

ConstraintReady

ReportReady

Failed

这个状态机的价值在于,它为每个阶段提供清晰的入口和出口条件。

不要把 design import 当作一个巨大的命令块,而应该让 flow 逐步回答:

输入文件是否完整?
technology context 是否 ready?
physical abstract 是否已加载?
timing model 是否已加载?
logical graph 是否已构建?
design 是否已经 linked?
physical state 是否已经 attached?
consistency report 是否已经生成?

每个状态的失败都指向不同类别的根因。


11. 典型跨格式失败模式

标准格式问题经常晚于真实根因才表现出来。

下面的表把症状映射到可能的语义不匹配。

症状 可能根因 需要检查的格式关系
link 时存在 unresolved cell 网表引用了缺失的 library master Verilog vs LEF/Liberty
cell 可以 placement 但不能 timing physical abstract 存在,但 Liberty cell 缺失 LEF vs Liberty
cell 可以 timing 但不能 placement Liberty 存在,但 LEF macro 缺失 Liberty vs LEF
pin access 失败 pin geometry 不完整或 layer 错误 LEF pin vs routing layer
DEF component import 失败 DEF component master 找不到 DEF vs LEF
DEF layer error DEF route layer 没有在 technology context 中定义 DEF vs LEF technology
constraint 没有生效 SDC object name 与 design object 不匹配 SDC vs Verilog
clock path 缺失 clock pin 没有正确建模 Liberty vs Verilog pin usage
placement row error site mismatch 或 site definition 缺失 LEF site vs DEF row
export 后 LVS mismatch layout、netlist 和 abstract 名称不一致 GDS/OASIS vs DEF/Verilog/LEF

这张表也说明,后端工程师不能只关注 parser error。

文件可以分别合法,但组合起来不一致。


12. File Manifest 是第一个工程产物

成熟 flow 应该记录每次 run 使用的精确输入文件。

这一点比看起来更重要。

如果 run 结果变化,首先应该问:

输入文件是否变化了?

一个 file manifest 应该包含:

format type
absolute path
logical role
file size
timestamp
optional checksum
version label
owner or source
expected stage

示例:

Format Role Example path Stage
LEF technology + standard-cell abstract data/lef/demo_stdcell.lef physical context
Liberty timing / power model data/liberty/demo_stdcell.lib timing context
Verilog gate-level netlist data/verilog/demo_top.v logical graph
DEF floorplan state data/def/demo_floorplan.def physical state
SDC timing constraints data/sdc/demo_top.sdc timing constraints

manifest 应该写入 report 文件,而不是只隐藏在 run script 中。

这样 run 才可审计、可比较。


13. Precheck 应该同时验证文件与语义

第一层 precheck 是 file-level:

file exists
file is readable
file is not empty
path is deterministic
output directory is writable

第二层 precheck 是 format-level:

LEF version 是否被目标 flow 接受
DEF version 是否被目标 flow 接受
Verilog top module name 是否已知
Liberty library 是否有 nominal attributes 或 corner information
unit 和 database precision 是否可理解

第三层 precheck 是 semantic-level:

Verilog master 是否被 LEF 和 Liberty 覆盖
LEF 和 Liberty 的 pin name 是否一致
DEF component 是否映射到已知 physical master
DEF layer 是否映射到已知 technology layer
SDC clock 和 port 是否映射到 design object

第四层 precheck 是 stage-readiness:

工具是否可以进入 link?
工具是否可以进入 DEF import?
工具是否可以进入 timing setup?
工具是否可以生成有意义的 report?

好的 precheck 不需要证明一切。它应该在工具进入更深实现阶段之前,捕获高概率、高成本的失败。


14. LAY-BE-08_standard_formats 的最小 Demo 架构

Demo 08 的目标不是运行完整 placement 或 routing。

它的目标是展示标准格式如何形成协同的后端上下文。

合适的 demo 结构如下:

LAY-BE-08_standard_formats/
├─ data/
│  ├─ lef/
│  │  └─ demo_stdcell.lef
│  ├─ liberty/
│  │  └─ demo_stdcell.lib
│  ├─ verilog/
│  │  └─ demo_top.v
│  ├─ def/
│  │  └─ demo_floorplan.def
│  └─ sdc/
│     └─ demo_top.sdc
├─ scripts/
│  ├─ run_demo.csh
│  └─ clean.csh
├─ tcl/
│  ├─ run_demo.tcl
│  ├─ precheck_formats.tcl
│  ├─ import_context.tcl
│  └─ report_format_summary.tcl
├─ logs/
│  ├─ standard_formats.log
│  ├─ standard_formats.cmd.log
│  └─ standard_formats.sum.log
├─ reports/
│  ├─ file_manifest.rpt
│  ├─ format_precheck.rpt
│  ├─ import_summary.rpt
│  ├─ cell_name_alignment.rpt
│  ├─ pin_name_alignment.rpt
│  └─ def_binding_summary.rpt
└─ README.md

这个 demo 应该回答一组小而明确的问题:

使用了哪些文件?
这些文件是否存在并可读?
physical abstract 能否加载?
timing model 能否加载?
logical graph 能否加载?
library reference 能否解析?
DEF physical state 能否挂接?
flow 能否生成 consistency report?

这已经足以构成一个最小但有意义的标准格式 demo。


15. 推荐的输入与输出映射

对于这个 demo,输入/输出 contract 应该是显式的。

类别 输入 目的
Physical abstract demo_stdcell.lef cell size、pin、layer、site、obstruction
Timing/power model demo_stdcell.lib timing arc、pin direction、delay/power data
Logical netlist demo_top.v module、instance、net、pin connection
Physical state demo_floorplan.def die area、row、track、pin、placement state
Constraint file demo_top.sdc clock、I/O timing、design constraint
Run script run_demo.csh 受控工具启动
Tcl entry run_demo.tcl 分阶段导入和报告

预期输出:

输出 目的
file_manifest.rpt 记录全部输入文件及其 metadata
format_precheck.rpt 记录文件和基础格式 readiness
import_summary.rpt 记录 import / link 阶段结果
cell_name_alignment.rpt 检查 netlist master coverage
pin_name_alignment.rpt 检查 physical / timing pin 一致性
def_binding_summary.rpt 检查 DEF component / layer binding
standard_formats.cmd.log 保存 command stream
standard_formats.sum.log 汇总 run status

这样 demo 就是自包含、可审查的。


16. 通用 csh 运行入口

运行入口应该把路径显式化。

#!/bin/csh -f

set nonomatch

set ROOT_DIR = `pwd`
set LOG_DIR  = "$ROOT_DIR/logs"
set RPT_DIR  = "$ROOT_DIR/reports"
set TMP_DIR  = "$ROOT_DIR/tmp"
set TCL_DIR  = "$ROOT_DIR/tcl"

mkdir -p "$LOG_DIR"
mkdir -p "$RPT_DIR"
mkdir -p "$TMP_DIR"

setenv LAY_DEMO_ROOT "$ROOT_DIR"
setenv LAY_LEF_FILE  "$ROOT_DIR/data/lef/demo_stdcell.lef"
setenv LAY_LIB_FILE  "$ROOT_DIR/data/liberty/demo_stdcell.lib"
setenv LAY_V_FILE    "$ROOT_DIR/data/verilog/demo_top.v"
setenv LAY_DEF_FILE  "$ROOT_DIR/data/def/demo_floorplan.def"
setenv LAY_SDC_FILE  "$ROOT_DIR/data/sdc/demo_top.sdc"
setenv LAY_RPT_DIR   "$RPT_DIR"
setenv LAY_LOG_DIR   "$LOG_DIR"
setenv LAY_TMP_DIR   "$TMP_DIR"

setenv EDA_TOOL_BIN /path/to/backend_tool

$EDA_TOOL_BIN \
    -batch "$TCL_DIR/run_demo.tcl" \
    -log "$LOG_DIR/standard_formats.log" \
    >&! "$LOG_DIR/standard_formats.stdout.log"

这个 wrapper 的目的不仅是启动工具。它的目的也是冻结 run context:

input file path 是显式的
log path 是显式的
report path 是显式的
temporary directory 是显式的
Tcl entry point 是显式的

这样可以避免把 format debug 问题和 path resolution 问题混在一起。


17. 通用 Tcl Precheck 骨架

Tcl precheck 应该在数据库修改开始之前失败。

proc require_env {name} {
    if {![info exists ::env($name)]} {
        error "Missing required environment variable: $name"
    }
}

proc require_file {path} {
    if {![file exists $path]} {
        error "Required file does not exist: $path"
    }
    if {![file readable $path]} {
        error "Required file is not readable: $path"
    }
    if {[file size $path] == 0} {
        error "Required file is empty: $path"
    }
}

set required_vars {
    LAY_LEF_FILE
    LAY_LIB_FILE
    LAY_V_FILE
    LAY_DEF_FILE
    LAY_SDC_FILE
    LAY_RPT_DIR
    LAY_LOG_DIR
}

foreach var $required_vars {
    require_env $var
}

foreach file_var {
    LAY_LEF_FILE
    LAY_LIB_FILE
    LAY_V_FILE
    LAY_DEF_FILE
    LAY_SDC_FILE
} {
    require_file $::env($file_var)
}

puts "FORMAT_PRECHECK: PASS"

这个 precheck 层有意保持简单。它在工具开始构建设计数据库之前,捕获缺失输入、不可读文件和空文件。

在更大的 flow 中,这一层可以扩展为把检查结果写入 format_precheck.rpt


18. 通用 Import 与 Link 骨架

一个 tool-neutral 的导入序列可以表示为若干阶段:

puts "STAGE_BEGIN: load_physical_abstract"
# import LEF or equivalent physical abstract
puts "STAGE_END: load_physical_abstract"

puts "STAGE_BEGIN: load_timing_model"
# import Liberty or configure timing library path
puts "STAGE_END: load_timing_model"

puts "STAGE_BEGIN: read_logical_netlist"
# import Verilog netlist
puts "STAGE_END: read_logical_netlist"

puts "STAGE_BEGIN: link_design"
# resolve design references against library context
puts "STAGE_END: link_design"

puts "STAGE_BEGIN: import_physical_state"
# import DEF floorplan or implementation state
puts "STAGE_END: import_physical_state"

puts "STAGE_BEGIN: read_constraints"
# read SDC or equivalent constraint file
puts "STAGE_END: read_constraints"

不同 EDA tool 的具体命令名不同,但架构是稳定的。

flow 应该分离以下动作:

loading physical abstracts
loading timing models
reading logical graph
linking references
attaching physical state
reading constraints
reporting consistency

这种分离会改善调试。如果 DEF import 失败,工程师可以先检查 link 是否成功。如果 link 失败,可以先检查 library context 是否已加载。如果 library context 失败,可以先检查 file manifest 和 precheck report。


19. 报告设计:应该捕获什么

一个好的标准格式 demo 应该生成可以解释数据库状态的报告。

19.1 file_manifest.rpt

这个报告应该捕获:

format type
file path
file size
last modified time
role in flow
optional checksum

19.2 format_precheck.rpt

这个报告应该捕获:

file existence
readability
empty-file check
directory writability
known file version if detectable
blocking errors
warnings

19.3 import_summary.rpt

这个报告应该捕获:

LEF import result
Liberty import result
Verilog import result
link result
DEF import result
constraint import result

19.4 cell_name_alignment.rpt

这个报告应该捕获:

cell masters referenced by Verilog
cell masters available in LEF
cell masters available in Liberty
missing physical views
missing timing views

19.5 pin_name_alignment.rpt

这个报告应该捕获:

pin names in netlist connections
pin names in LEF abstracts
pin names in Liberty cells
missing pins
extra pins
pin direction mismatches

19.6 def_binding_summary.rpt

这个报告应该捕获:

DEF units
DEF die area
rows
tracks
components
pins
component masters
unresolved DEF references
layer binding status

这些报告把 import 从黑箱步骤变成可审计的工程过程。


20. 方法论:把格式看作 Contract

一种有用的方法论是把每种格式看成 contract。

Verilog 给出 contract:

这些 instance、net、module 和 port 存在。

Liberty 给出 contract:

这些 cell、pin、timing arc 和 power model 存在。

LEF 给出 contract:

这些 physical master、pin、layer、site 和 obstruction 存在。

DEF 给出 contract:

这个具体设计状态使用这些 component、row、track、pin、layer 和 route。

只有这些 contract 彼此兼容,后端数据库才有效。

这种兼容性必须通过显式 flow stage 和 report 来检查。

因此,稳健方法论遵循这样的顺序:

1. 建立 manifest。
2. 进行 file precheck。
3. 加载 technology 和 physical abstract。
4. 加载 timing 和 power model。
5. 读取 logical netlist。
6. 解析 design reference。
7. 挂接 physical state。
8. 读取 constraint。
9. 生成 cross-format consistency report。
10. 用这些 report 作为后续阶段的 gate。

这就是“使用标准文件”和“工程化标准格式 Backend Flow”之间的区别。


21. 工程 Review Checklist

在设计允许继续进入 import 和 link 后续阶段之前,下面这些问题应该能被回答:

Review item Question
Manifest 是否记录了所有输入文件的 path 和 metadata?
File readiness 文件是否存在、可读、非空?
Tool context working directory 和 run mode 是否显式?
Technology context layer、unit、site、grid 是否可用?
Physical abstract standard cell 和 macro 是否从 LEF 加载?
Timing model Liberty cell 和 operating condition 是否加载?
Netlist top module 是否已知并可读?
Linking 所有 cell reference 是否已解析?
Pin consistency 使用到的 cell,其 LEF 和 Liberty pin name 是否对齐?
DEF binding DEF component 和 layer 是否绑定到已知对象?
Constraint binding constraint 中的 clock 和 port 是否映射到 design object?
Reports 是否生成 import 和 consistency report?

这个 checklist 应该成为 Backend Flow review 的一部分,而不是事后补充。


22. 为什么这会影响后续阶段

格式对齐会影响后续每个后端阶段。

22.1 Floorplan

Floorplan 依赖:

die/core unit
row site
macro abstract
I/O pin definition
blockage
track

如果这些信息不一致,floorplan 看起来可能合法,但在 placement 或 routing 中表现会很差。

22.2 Placement

Placement 依赖:

standard-cell size
site compatibility
orientation rule
cell class
macro boundary
placement blockage

如果 LEF 和 netlist master name 没有对齐,placement 就无法把物理意义附加到逻辑 instance 上。

22.3 Timing

Timing 依赖:

linked design graph
Liberty timing arc
pin direction
clock definition
constraint
operating condition

如果 Liberty 和 Verilog 不对齐,timing report 可能缺失 path 或报告误导性数据。

22.4 Routing

Routing 依赖:

routing layer
via definition
pin geometry
obstruction
DEF state
technology grid

如果 LEF、DEF 和 technology context 不一致,routing failure 可能会在远离原始 import 问题的位置出现。

22.5 Handoff

Handoff 依赖:

DEF
GDS/OASIS
Verilog
LEF
layer map
constraint
report

如果早期格式对齐较弱,下游 physical verification 以及 equivalence/debug 会变得困难得多。


23. 实践要点

后端工程师不应该把标准格式看成被动文件。

它们是数据库的主动语义输入。

实践要点如下:

Verilog 不够。
Liberty 不只是用于后期 timing。
LEF 不只是物理附录。
DEF 不只是 placement snapshot。
Import order 反映语义依赖。
Linking 是逻辑名称与 library definition 相遇的位置。
Precheck 必须覆盖 file readiness 和 semantic alignment。
Report 必须捕获构建出的 context。
后续阶段失败经常源于早期格式不匹配。

对于一个 demo repository,这意味着 Demo 08 不应该只展示文件存在。它应该展示多种格式如何共同定义一个后端设计上下文。


24. 总结

Backend Flow 依赖多格式协同,因为设计本身是多维度的。

核心角色如下:

Format 核心作用
Verilog 逻辑连接关系与层次结构
Liberty Timing、power、cell behavior 和 optimization meaning
LEF Technology context 与 physical abstract
DEF 具体设计的 physical implementation state

后端 EDA tool 通过对齐这些视图来构建统一数据库。

成熟 flow 因此应该提供:

explicit file manifest
file and format precheck
stable import order
library and design linking
cross-format consistency reports
clear failure classification
stage readiness gates
reviewable logs and command traces

更深层的经验是:后端 import 不只是文件读取。

它是语义数据库构建。

当这个构建过程可靠时,floorplan、placement、timing、routing、export 和 handoff 才有稳定基础。当它很薄弱时,下游失败就会变得难以解释且调试成本很高。


结尾思考

后端复杂性的第一层不是算法复杂性,而是语义复杂性。

LEF、Liberty、Verilog 和 DEF 必须协同工作,是因为后端实现必须把逻辑、物理抽象、timing 行为和具体物理状态统一到一个可执行的工程模型中。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐