1. 引言
1.1 DFA 工具定位
DFA(Design Flow Automation)是DOP(Design Operation Platform)的核心模块,通过结构化配置文件(Ticket)和流程定义文件(.dfd),实现集成电路设计流程的标准化和自动化,使用者只要所按照需求填入Ticket参数. 就可以调用系統预先设定的Design Flow流程范本, 产生可执行的EDA工作环境目录。其核心价值包括:
- 消除人为差异:通过Ticket统一输入参数、工艺库版本及流程配置。
- 复杂流程管理:支持多步骤嵌套流程(如综合→时序分析→物理验证)。
- 质量与效率提升:集成DQI(Design Quality Indicator),自动提取关键指标并生成报告。
1.2 适用角色与场景
| 角色 | 典型场景 | 关键操作 |
|---|---|---|
| 芯片设计工程师 | 日常任务执行(Synthesis、STA)、数据提交与版本管理 | 编辑Ticket、生成运行目录、执行流程 |
| 流程设计工程师 | 维护流程模板、优化脚本、开发流程范本 | 编写.dfd文件、调试流程逻辑 |
| 项目经理 | 监控流程状态、审计设计质量、协调跨团队协作 | 查看DQI报告、执行全局审计 |
2. 系统要求与安装
2.1 硬件与软件要求
| 组件 | 规格 |
|---|---|
| 计算节点 | 64核CPU/256GB RAM,支持Slurm作业调度 |
| 软件依赖 | Python 3.8+、EDA工具链(Synopsys/Cadence/Mentor) |
| 平台组件 | DVC (版本控制)、TLP (工艺库管理)、DQI(质量指标) |
2.2 安装与配置步骤
- 下载DFA软件包:通过终端或命令提示符运行以下命令下载 DFA 包git clone https://gitlab.lyg-semi.com/ly0108/dfa.git
- 设置环境变量:下载完成后,source DFA环境变量到您的当前 shell 会话 source dfa-master/cshrc_dfa
3. 用户界面与核心概念
3.1 DFA 系统架构

- DFA总体架构分为如图所示的部分,其中最主要的部分为以下:
ticket:储存与design flow对应的ticket文件的仓库目录,目录结构为如图所示的stage_id/flow_ref_id的格式。cshrc_dfa:DFA 环境配置文件。flow:储存构建起EDA工作环境的design flow的脚本的目录。
3.2 与DOP各个模块的交互
3.2.1 DOP概述
DOP(Design Operation Platform)是芯片设计全流程管理平台,包含以下核心模块:
DVC(Design Version Control):管理设计数据版本,支持分支、标签和版本回滚。
TLM(Technology Library Management):标准单元库的安装、更新与路径管理。
DFA(Design Flow Automation):自动化执行设计流程,支持多流程组合与动态扩展。
DQI(Design Quality Indicator):自动化生成设计质量报告,支持跨项目对比。
3.2.2 DFA与DOP各个模块的交互
DVC:从 DVC(Design Version Control)获取以及存储设计数据,确保流程输入的一致性。(DVC_SRC为输入路径,DVC_DST为输出路径)。
TLM:通过 TLM(Technology Library Management)自动加载技术库路径,避免手动配置错误(通过在TECHLIB字段指定库配置文件)。
DQI:自动化生成质量报告(如时序违例、功耗分析)。
3.3 关键配置文件
- Stander Ticket Format(.stf): ticket文件是DFA的核心配置文件,主要用于定义flow的输入/输出路径、版本控制信息、工艺库配置及运行参数,用户通过在ticket文件中按照需求填入参数,就会构建出对应design flow的EDA工作环境,ticket格式如下:
- [HEADER]
## DESCRIPTION : flow name & run directory
## ARGUMENT : < flow_name:run_dir_name >, ex. 510_RCX:rcxt_spef
FLOW_ID = flow_reference_id:ticket_run_dir
## DESCRIPTION : techlib confilg file from TLM
## ARGUMENT : < techlib config file name >, ex.dfalib.cfg
TECHLIB = techlib_config_file
## DESCRIPTION : source path from DVC
## ARGUMENT : < source path >, ex.phase/block/stage/v1
DVC_SRC = design_source_version_path
## DESCRIPTION : destination path from DVC
## ARGUMENT : < destination path >, ex.phase/block/stage/v2
DVC_DST = design_dest_version_path
## DESCRIPTION : top module name
## ARGUMENT : < top module name >, ex.design
DESIGN = top_module_name
[INPUT]
## DESCRIPTION : input file of this flow
## ARGUMENT : < path | file_name >, ex. netlist.v
input_ref_id1 = input_file_name
input_ref_id2 = input_dir_name
[OUTPUT]
## DESCRIPTION : output file of this flow
## ARGUMENT : < output file_name >, ex. netlist.v
output_ref_id1 = output_file_name
output_ref_id2 = output_dir_name
[PARAM]
## DESCRIPTION : Script path of EDA tool
## ARGUMENT : <eda_tool_path_script>, ex. encounter
TOOL = encounter
## DESCRIPTION : Set tool option
## ARGUMENT : <eda_tool_options> ex. tool version, …
TOOL_OPTION = -uv 9.10-e014_1 -u64
## DESCRIPTION : Specify queue name
## ARGUMENT : [Local | FE | BE ]
## if QUEUE = Local, only run job in local machine
QUEUE = Local
## DESCRIPTION: Set queue option
## ARGMENT : <queue_options> #ex. slurm’s options
QUEUE_OPTION = -mem=64 -c 1 #slurm’s options
## DESCRIPTION : PARAMETER of this flow
## ARGUMENT : < path | parameter >, ex. Typ_85c
parameter_id1 = parameter_value1
parameter_id2 = parameter_value2
…Standard Ticket Format档案包含的下列内容:- 设计环境参数 (GLOBAL/HEADER) 指定使用的流程范本,工艺PDK,设计资料库Version….输入档案(INPUT) 包含设计资料(design db),设计规范文档(constraint)输出档案 (OUTPUT) 完成的设计资料(design db), 设计质量报告(report), 执行过程记录(log) ,等等设计规范参数(Parameters) 根据使用的(EDA工具Flow流程/制成工艺Process)所需要的参数列表,以及预设的值。
TICKET:Ticket文件的名字,一般格式都为TXXX_XXX(ex. T510_RCXT)FLOW_ID:绑定流程模板,格式为reference_id:ticket_run_dir,其中 reference_id 与DFA 中对应的reference flow的名字相同,在ticket build时将reference id flow下的flow script 复制到ticket_run_dir中,ticket_run_dir为本次运行目录名。若省略目录名则默认使用reference_id作为目录名。TECHLIB:指向 TLP(Technology Library Package)管理的工艺库配置文件,格式为这个配置文件的绝对路径DVC_SRC/DVC_DST:DVC_SRC为输入设计版本,需通过checkout将design data从DVC中检出到本地。 DVC_DST 为输出目标路径,flow run完结果通过checkin将design data提交到DVC。DESIGN:对design进行命名[INPUT/OUTPUT]:对输入输出文件名定义[PARAM]:参数定义
- Ticket的[INPUT]中参数的值支持以绝对路径去指定输入文档,例如:
[INPUT]
NETLIST_FILE = /home/netlist/design.v- [INPUT]下的参数同样支持以相对路径去指定位于DVC下的文档,此相对路径是相对于DVC_SRC的四层目录下的相对路径,以下面片段为例若要使用DVC的phase/block/stage/version/netlist/design.v这一路径下的design.v的化则需按照如下例子方式填写:
DVC_SRC = phase/block/stage/version
…
[INPUT]
NETLIST_FILE = netlist/design.v- [INPUT]下的参数值的相对路径除位于DVC下外,还有另一种情况是由另一flow产生,此时INPUT填写的参数值则需要填写这两条flow的::main目录的相对路径,即存在以下目录结构,其相对路径的填写则如下
├── rcxt2spef/
| └──::main/
| └──design.spef
└── spef2sdf/
└──::main/
└──design.spef -> ../.inpSPEF_FILE #此文档是由rcxt2spef这一flow产生
#ticket中INPUT填写
[INPUT]
spef2sdf/SPEF_FILE = ../../rcxt2spef/::main/design.spef #此相对路径为spef2sdf的::main目录相对于原始文件目录的路径
[OUTPUT]
rcxt2spef/SPEF_FILE = design.spef- Ticket中支持在值中使用上下文中的变量去指定的行为,例如:
……
SPEF_FILE = ${DESIGN}_${rc_corner}.spef.gz
……
rc_corner = cworst- Ticket中支持在键前指定路径的行为,且适用通配符去匹配路径,例如:
……
5M0_MMMC/01_RCX/*/SPEF_FILE = ${DESIGN}_${rc_corner}.spef.gz- [HEADER]
4. 基本操作流程
芯片设计工程师主要通过使用DFA来实现自动构建出可执行的EDA工作环境,以下是用户使用DFA构建流程的基本操作步骤
操作步骤:
- Source DOP environment valuable:在使用DFA前先source位于DOP中心目录下的环境变量脚本,这样才能使用DFA命令source /path/to/DOP/cshrc_dop
- Checkout Ticket:芯片设计工程师从DFA中心资料库中下载PM/CAD准备的Ticket文件到本地工作执行环境 dop ticket checkout <Ticket file name>
- Edit Ticket:使用者根据需求修改Ticket文件中的内容参数
- Build Ticket:根据Ticket定义的内容产生可执行的EDA工作环境(create run directory & Makefile),包含把所需要的输入设计文档以及设计规范下载到工作执行环境,EDA工具运行流程也会根据Ticket文件中的参数进行调试,同时也会对资料完整性进行验证,使用以下命令dop ticket build <Ticket file name> 之后会根据ticket以及definition文件的内容生成目录参考如下:### 单个STEP的flow展开后目录结构 ###
ticket_run_dir
├──.techlib -> TLP/techlib_config_file
├──.design -> DVC/phase/block/stage/version
├──.script -> DFA/flow/flow_stage_id
├──.inp$input_ref_id1 -> .design/input_file_name
├──.out$output_ref_id1 -> ::main/output_file_name
└──::main/
├──script -> ../.script/flow_ref_id
├──input_file_name -> ../.inp$input_ref_id1
└──Makefile -> script/Makefile.flow
### 多个STEP的flow展开后目录结构 ###
ticket_run_dir
├──.techlib -> TLP/techlib_config_file
├──.design -> DVC/phase/block/stage/version
├──.script -> DFA/flow/flow_stage_id
├──.inp$input_ref_id1 -> .design/input_file_name1
├──.inp$input_ref_id2 -> .design/input_file_name2
├──.out$output_ref_id1 -> step_dir1/.out$output_ref_id1
├──.out$output_ref_id2 -> step_dir2/.out$output_ref_id2
├──::main/
| ├──script -> ../.script/flow_ref_id
| ├──input_file_name1 -> ../.inp$input_ref_id1
| ├──input_file_name2 -> ../.inp$input_ref_id2
| ├──output_file_name1 -> ../.out$output_ref_id1
| ├──output_file_name2 -> ../.out$output_ref_id2
| └──Makefile -> script/Makefile.flow
├── step_dir1/
| ├──.techlib -> ../.techlib
| ├──.design -> ../.design
| ├──.script -> ../.script
| ├──.inp$input_ref_id1 -> ../input_file_name1
| ├──.out$output_ref_id1 -> ::main/output_file_name1
| └──::main/
| ├──script -> ../.script/flow_ref_id
| ├──input_file_name1 -> ../.inp$input_ref_id1
| └──Makefile -> script/Makefile.flow
└── step_dir2/
├──.techlib -> ../.techlib
├──.design -> ../.design
├──.script -> ../.script
├──.inp$input_ref_id2 -> ../input_file_name2
├──.inp$output_ref_id1 -> ../step_dir1/.out$output_ref_id1 ### 各个STEP间的依赖关系通过链接构建
├──.out$output_ref_id2 -> ::main/output_file_name2
└──::main/
├──script -> ../.script/flow_ref_id
├──input_file_name2 -> ../.inp$input_ref_id2
└──Makefile -> script/Makefile.flow生成Makefile文件参考如下:### STEP下的Makefile文件 ###
FLOW := 510-RCX
INPUT := input_file_name
OUTPUT := output_file_name
TOOL := synopsys_starrc_shell_U
TOOL_OPTION := -2022.12-SP5-2
QUEUE := BE
QUEUE_OPTION := –mem=64G -c 4
PRE_CHECK := script/run_precheck
EXEC := script/run_execute
POST_CHECK := script/run_postcheck
EXEC_DQI := script/run_execdqi
run :
../.dfa/dfa_run.sh
precheck :$(INPUT)
$(PRE_CHECK) | tee precheck.log
$(OUTPUT) :precheck
$(EXEC) | tee execute.log
postcheck :$(OUTPUT)
$(POST_CHECK) | tee postcheck.log
dqi :$(OUTPUT)
dqi_extractor.py –spec ./script/dqi_ext.spec –dfd ../.dfa/dfd.tcl –ticket ../.dfa/ticket.tcl
dqi_generate_rpt.py –flow_dqi_value_path ./.dqi –flow_dqi_path ${DFA_FOLDER}/dqi_def –output ./dqi_rpt.json
cksum dqi_rpt.json > ../.dfa/.dqi_cksum
clean :
rm -rf ./.dqi/* ./dfa.log ./dfa_run_*.log
dfa_set_status.sh 00_dfa_Init
script/f_flow_clean.run
rerun :
make clean
make run
kill :
dfaPid=$$(cat ../.dfa/dfa.pid)
kill -9 $$dfaPid
checkin :
dfa_checkin.py
### 多个STEP流程下的顶层Makefile文件 ###
FLOW := 521-DEF2SDF
INPUT := A.v design.def design.spef.gz design.v
OUTPUT := design.sdf.gz design.spef.gz
run:
cd ../510-RCX/::main && make run
cd ../511-SPEF2SDF/::main && make run
clean:
cd ../510-RCX/::main && make clean
cd ../511-SPEF2SDF/::main && make clean
kill:
cd ../510-RCX/::main && make kill
cd ../511-SPEF2SDF/::main && make kill
precheck:
cd ../510-RCX/::main && make precheck
cd ../511-SPEF2SDF/::main && make precheck
postcheck:
cd ../510-RCX/::main && make postcheck
cd ../511-SPEF2SDF/::main && make postcheck
dqi:
cd ../510-RCX/::main && make dqi
cd ../511-SPEF2SDF/::main && make dqi
checkin:
cd ../510-RCX/::main && make checkin
cd ../511-SPEF2SDF/::main && make checkin
rerun: clean run
design.sdf.gz: A.v design.spef.gz design.v
cd ../511-SPEF2SDF/::main && make design.sdf.gz
design.spef.gz: A.v design.def
cd ../510-RCX/::main && make design.spef.gz - Execute Ticket: 调用所需的EDA工具执行设计,产出设计输出文档,此阶段也可以搭配设计流程管控工具(DFA Job Manager)实时监控工具执行状态make run
- Checkin Design:将修改过的Ticket文档以及抽取的重要设计资料上传至DVC的设计资料库中心make checkin
5. 故障处理与维护
DFA 在以下阶段会有报错,以下为对应阶段报错原因以及处理
5.1票据展开阶段:
报错原因:如果票据文件中的参数填写错误,可能会导致票据展开失败。
报错处理:检查票据文件中的参数是否正确填写,确保所有必填参数都已填写,并且格式正确。查看 DFA 生成的日志文件,定位具体的报错信息。
5.2预检查阶段 :
报错原因:输入文档或参数验证失败。
报错处理:检查输入文档是否完整且格式正确,确保所有参数都符合预定义的要求。查看日志文件中的具体报错信息,进行相应的调整。
5.3主流程阶段 :
报错原因:EDA 工具执行失败。
报错处理:检查 EDA 工具的设置文件是否正确生成,确保 EDA 工具的执行环境配置正确。查看 EDA 工具的日志文件,定位具体的报错信息。
5.4后检查阶段 :
报错原因:EDA 工具的结果验证失败。
报错处理:检查 EDA 工具的输出文件是否完整且格式正确,确保所有关键指标都符合预期。查看日志文件中的具体报错信息,进行相应的调整。
5.5生成 DQI 报告阶段 :
报错原因:DQI 报告生成失败。
报错处理:检查 EDA 工具的结果文件是否完整且格式正确,确保 DQI 报告生成脚本配置正确。查看日志文件中的具体报错信息,进行相应的调整。
6. 案例分析与实战演练
使用dop ticket checkout T510_RCXT.stf将ticket checkout到本地工作目录,修改ticket内容
[HEADER]
## DESCRIPTION : flow name & run directory
## ARGUMENT : < flow_name:run_dir_name >, ex. 510_RCX:rcxt_spef
FLOW_ID = 510-RCX:rcxt
## DESCRIPTION : techlib confilg file from TLM
## ARGUMENT : < techlib config file name >, ex.dfalib.cfg
TECHLIB = dfalib.cfg
## DESCRIPTION : source path from DVC
## ARGUMENT : < source path >, ex.phase/block/stage/v1
DVC_SRC = phase/block/stage/v1
## DESCRIPTION : destination path from DVC
## ARGUMENT : < destination path >, ex.phase/block/stage/v2
DVC_DST = phase/block/stage/v2
## DESCRIPTION : top module name
## ARGUMENT : < top module name >, ex.design
DESIGN = design
[INPUT]
## DESCRIPTION : input file of this flow
## ARGUMENT : < path | file_name >, ex. netlist.v
TOP_DEF_FILE = design.full_chip.def.gz
METAL_FILL_GDS_FILE = design_Dummy_BE.gds
[OUTPUT]
## DESCRIPTION : output file of this flow
## ARGUMENT : < output file_name >, ex. netlist.v
COUPLING_REPORT_FILE = couplingreport.rep
NETLIST_FILE =${DESIGN}.spef.gz
[PARAMETER]
## DESCRIPTION : PARAMETER of this flow
## ARGUMENT : < path | parameter >, ex. Typ_85c
MAPPING_FILE = /path/to/layers.map
CORNERS_FILE = ./script/corners.smc
GDS_LAYER_MAP_FILE = ./script/dummy_gds.map
SELECTED_CORNERS =Typ_85c
## DESCRIPTION : Script path of EDA tool
## ARGUMENT : <eda_tool_path_script>, ex. encounter
TOOL = synopsys_starrc_shell_U
## DESCRIPTION : Set tool option
## ARGUMENT : <eda_tool_options> ex. tool version, ...
TOOL_OPTION = -2022.12-SP5-2
## DESCRIPTION : Specify queue name
## ARGUMENT : [Local | BE | FE ]
## if QUEUE = Local, only run job in local machine
QUEUE = BE
## DESCRIPTION: Set queue option
## ARGMENT : <queue_options> #ex. slurm's options
QUEUE_OPTION = -mem=64G -c 4
修改完ticket后执行以下命令,建立flow环境
dop ticket build T510_RCXT.stf
建立出如下的目录结构:
rcxt/
├── .design -> $DVC_HOME/P1-trial/CPU/500-TIMING/2025_0101_RCX
├── .script -> DFA/flow/500-TIMING
├── .techlib -> $TLM_HOME/20250101.cfg
├── .inpTOP_DEF_FILE -> .design/design.full_chip.def.gz
├── .inpMETAL_FILL_GDS_FILE -> .design/design_Dummy_BE.gds
├── .outNETLIST_FILE -> ::main/design.spef.gz
├── .outCOUPLING_REPORT_FILE -> ::main/couplingreport.rep
└── ::main
├── design.full_chip.def.gz -> ../.inpTOP_DEF_FILE
├── design_Dummy_BE.gds -> ../.inpMETAL_FILL_GDS_FILE
├── script -> ../.script/510-RCXT
└── Makefile -> script/Makefile
进入::main目录,执行以下命令开始运行EDA工作:
make run
确认无误后将修改过的Ticket文档以及抽取的重要设计资料上传至DVC的设计资料库中心
make checkin
7. 附录
7.1 命令速查表
| 功能 | 命令 |
|---|---|
| 查看DFA中心资料库可用ticket | dop ticket query |
| 将DFA中心资料库中的ticket checkout到本地 | dop ticket checkout <ticket file name> |
| 构建EDA工作环境 | dop ticket build <ticket file name> |
| 执行流程 | make run |
| 将修改过的Ticket文档以及长处的重要设计资料上传至DVC的设计资料库中心 | make checkin |
7.2 术语表
| 术语 | 定义 |
|---|---|
| DVC_SRC | 设计输入数据的版本控制路径 |
| TECHLIB | 工艺库配置文件(包含库路径、工艺角参数) |
| STEP | 流程的最小执行单元,支持嵌套与参数传递 |
