2. 环境搭建与基本操作
Fusion Compiler 作为 Synopsys 新一代融合物理实现平台,其环境搭建质量直接决定后续设计流程的顺畅程度。与传统的 IC Compiler II 或 PrimeTime 独立工具不同,Fusion Compiler 将综合、布局布线、时钟树综合与 signoff 分析能力整合在同一数据模型与执行引擎中,因此其安装配置、许可证管理以及启动方式具有鲜明的“融合”特征。本章将围绕环境准备、许可证机制、启动流程、常用命令体系以及 GUI 导航五个维度展开,帮助学员建立从“能跑”到“会跑”再到“跑得稳”的完整认知。
上图展示了 Fusion Compiler 环境搭建的整体链路:从安装包与操作系统依赖、许可证配置、环境变量设置到启动验证,再到常用命令与 GUI 导航,最终形成完整的输出与检查闭环。下面我们将逐一拆解每个环节的具体操作与工程要点。
2.1 安装配置:从安装包到可执行环境
核心原理:Fusion Compiler 的安装并非简单的解压即用,其底层依赖多个 Synopsys 公共组件(如 installer、Common Licensing、SAR 等)。安装包通常以 .tar 或 .tar.gz 格式分发,内部包含平台特定的二进制文件(如 linux64 目录)、技术库模板、参考流程脚本以及文档。安装的核心目标是将这些文件解压到指定目录,并确保动态链接库、Python 解释器、Tcl 库等依赖项可被正确加载。
操作流程:
- 系统准备:确认操作系统为 RHEL 7.9/8.4 或 SUSE 15 SP3 等 Synopsys 官方支持版本,内核版本不低于 3.10。检查
gcc、make、libXext、libXt、motif等基础库是否安装。对于 headless 服务器,还需安装Xvfb以支持 GUI 的虚拟显示。 - 运行安装器:使用 Synopsys Installer(如
installer_5.4)执行图形化或命令行安装。命令行方式更适合批量部署:./installer -silent -install_dir /opt/synopsys/fc -platform linux64 -source /mnt/installer/FusionCompiler_2023.12 - 设置环境变量:在
.bashrc或.cshrc中添加以下核心配置:export FC_HOME=/opt/synopsys/fc export PATH=$FC_HOME/bin:$PATH export LD_LIBRARY_PATH=$FC_HOME/lib:$LD_LIBRARY_PATH export SNPSLMD_LICENSE_FILE=27000@license_server export LM_LICENSE_FILE=27000@license_server - 验证安装:执行
fc_shell -version应返回版本号;执行which fc_shell确认路径正确。
FC_HOME 放在本地 SSD 上,并确保 /tmp 有至少 20GB 可用空间用于临时文件。
2.2 许可证设置:FlexLM 与 Synopsys 专用机制
核心原理:Fusion Compiler 使用 FlexNet Publisher(FlexLM)作为许可证管理框架,但 Synopsys 在其上封装了 snpslmd 守护进程。许可证文件(.dat)中定义了 Feature 名称(如 Fusion_Compiler、Fusion_Compiler_Ultra)、版本号、数量以及过期时间。与旧版 ICC2 不同,Fusion Compiler 的许可证还包含对 DesignWare 库和 PrimeTime 接口的捆绑授权。
判断方法:当启动 fc_shell 时出现 License check failed 或 Feature not found,首先使用 lmstat -a 查看服务器状态,再使用 fc_license_check 工具定位具体缺失的 Feature。
操作流程:
- 服务器端:在许可证服务器上启动
lmgrd -c license.dat -l /var/log/snpslmd.log,确保 27000 端口开放。 - 客户端配置:推荐同时设置
SNPSLMD_LICENSE_FILE和LM_LICENSE_FILE,前者优先用于 Synopsys 工具,后者用于通用 FlexLM 应用。 - 测试连接:使用
lmstat -c 27000@server -f Fusion_Compiler查看可用数量。
| Feature 名称 | 用途 | 典型数量 |
|---|---|---|
| Fusion_Compiler | 基础综合与布局布线 | 10 |
| Fusion_Compiler_Ultra | 高级优化(如功耗优化、DFT 并发) | 5 |
| DesignWare_Foundation | IP 库访问 | 20 |
| PrimeTime_Signoff | 时序签核接口 | 10 |
setenv SNPSLMD_LICENSE_FILE "27000@server1 27000@server2" 实现冗余。同时,定期检查 snpslmd.log 中的 EXPIRED 记录,避免因许可证过期导致批量任务中断。
2.3 启动方式:交互式、批处理与后台运行
核心原理:Fusion Compiler 提供两种主要启动入口:fc_shell(命令行)和 fc_gui(图形界面)。两者共享同一数据模型,但 GUI 额外加载了可视化组件。启动时工具会读取 .synopsys_fc_setup 文件(位于 $HOME 或当前目录),该文件可预设库路径、变量和常用别名。
操作流程:
- 交互式启动:直接输入
fc_shell进入 Tcl 交互环境,适合调试小段命令。 - 批处理模式:
其中fc_shell -f run_flow.tcl -log run.log -output_log_dir ./logs-f指定脚本,-log保存主日志,-output_log_dir保存分步日志。 - 后台运行:使用
nohup fc_shell -f run.tcl > run.out 2>& &,并配合tail -f run.out监控进度。 - GUI 启动:输入
fc_gui,若远程连接需加-display参数或使用 X11 转发。
run_corner.tcl 脚本,内部通过 set_db 设置不同工艺角变量。启动命令统一为 fc_shell -f run_corner.tcl -log corner_$corner.log,利用 Linux 的 parallel 工具并行调度,可节省 60% 的墙钟时间。
2.4 常用命令体系:从读入到输出
核心原理:Fusion Compiler 的命令基于 Tcl 语法,但大量使用 set_db 和 set_app_options 来管理设计对象与工具选项。与旧版 ICC 的 set_attribute 不同,set_db 采用分层命名空间(如 set_db design:top.lib_cells),更利于脚本复用。
常用命令分类:
- 设计读入:
read_db(读 Milkyway 数据库)、read_verilog、read_sdc、read_parasitics。 - 约束与检查:
check_design、check_timing、report_clocks、report_ports。 - 优化与实现:
syn_opt(逻辑综合)、place_opt(布局优化)、clock_opt(时钟树综合)、route_opt(布线优化)。 - 报告与输出:
report_qor、report_timing、report_power、write_db、save_block。
# 典型流程片段
read_db ./data/tech.db
read_verilog ./data/top.v
read_sdc ./data/top.sdc
set_db design:top.lib_cells [list slow.lib fast.lib]
syn_opt
place_opt
clock_opt
route_opt
report_qor -summary
write_db -design top -output ./output/top_final.db
read_db 与 read_mw。Fusion Compiler 已统一使用 read_db 读取 Milkyway 或 Milkyway+ 库,旧命令 read_mw 已废弃。若遇到 Cannot open library 错误,优先检查 set_db library 路径是否包含 .db 文件而非 .lib 文件。
2.5 GUI 界面导航:布局、菜单与工作流
核心原理:fc_gui 基于 Synopsys 通用 GUI 框架(与 PrimeTime 类似),但针对物理实现增加了专用窗口。主界面分为菜单栏、工具栏、设计浏览器(Design Browser)、布局窗口(Layout Window)、控制台(Console)和信息面板(Message)。布局窗口支持 2D/3D 视图切换,可显示标准单元、宏单元、时钟树、电源网络等图层。
操作流程:
- 启动 GUI:在 fc_shell 中输入
gui_start或直接运行fc_gui。 - 加载设计:通过菜单
File → Read Design选择 .db 文件,或使用命令read_db后执行gui_show。 - 常用菜单:
Floorplan(IO 规划、宏放置)、Place(标准单元布局)、Clock(时钟树综合)、Route(全局/详细布线)、Verify(DRC/LVS)、Window(视图管理)。 - 快捷键:
F2放大、F3缩小、Ctrl+Z撤销、Ctrl+S保存视图截图。
| GUI 区域 | 功能 | 常用操作 |
|---|---|---|
| Design Browser | 显示层次化设计树 | 右键点击模块可高亮或报告 |
| Layout Window | 物理视图 | 鼠标滚轮缩放,Shift+拖拽平移 |
| Console | Tcl 命令输入 | 直接输入命令并回车执行 |
| Message | 错误/警告/信息 | 双击错误可跳转至对应单元 |
gui_log 功能,自动记录所有鼠标操作对应的 Tcl 命令,便于后期整理成可复用脚本。
2.6 案例拆解:从零搭建一个双核 Cortex-A53 物理实现环境
背景与约束:某芯片团队需要在 3 天内完成双核 A53 的 Fusion Compiler 环境验证,目标频率 1.8GHz,工艺为 7nm FinFET。初始环境仅有裸机服务器,无任何 Synopsys 工具配置。
初始现象与目标:服务器操作系统为 RHEL 8.4,已安装 gcc 9.3,但缺少 libXext 和 motif。许可证服务器位于另一机房,需通过 VPN 访问。目标是完成安装、许可证连通、启动验证并跑通一个最小流程(读入库 → 综合 → 布局 → 布线 → 报告)。
关键输入数据:安装包大小约 12GB,许可证文件包含 20 个 Fusion_Compiler 和 10 个 Fusion_Compiler_Ultra 授权。技术库为 Synopsys 7nm 测试库(saed32nm 替代),时序约束为 1.8GHz 时钟。
分析判断过程:首先检查 OS 兼容性,发现缺少 motif 库,使用 yum install motif motif-devel 解决。许可证方面,由于 VPN 延迟较高,决定在本地启动 lmgrd 作为代理,将远程许可证文件复制到本地并修改 SERVER 行指向本地 IP。
实际操作步骤:
- 安装依赖库并解压安装包至
/opt/synopsys/fc_2023。 - 配置
.bashrc环境变量,并 source 生效。 - 复制远程 license.dat 至本地,修改端口为 27001,启动
lmgrd -c license.dat。 - 运行
fc_license_check确认所有 Feature 可用。 - 编写
min_flow.tcl脚本,读入库、网表、SDC,执行syn_opt和place_opt。 - 执行
fc_shell -f min_flow.tcl -log min_flow.log,观察日志无 ERROR。 - 启动
fc_gui加载生成的 .db 文件,截图验证布局结果。
结果对比:整个流程耗时 2.5 天,比预期提前半天。初始 WNS(最差负裕量)为 -0.23ns,经过 place_opt 后改善至 -0.08ns,证明环境与流程基本正确。
风险与代价:本地代理许可证存在单点故障风险,若服务器宕机需手动重启。此外,7nm 库的时序收敛对工具版本敏感,后续需固定版本号。
复盘经验:环境搭建阶段应优先验证许可证连通性,而非急于跑流程。建议将 fc_license_check 的结果输出为 JSON 格式,便于自动化监控。同时,所有环境配置应写入版本控制仓库,方便团队协作。
2.7 常见误区与总结复盘
常见误区:
- 误区一:忽略
LD_LIBRARY_PATH中的 lib 顺序,导致加载到系统旧版 libstdc++ 而崩溃。解决:将$FC_HOME/lib置于最前。 - 误区二:许可证 Feature 名称拼写错误,如将
Fusion_Compiler写成FusionCompiler。解决:使用lmstat -a查看实际名称。 - 误区三:GUI 启动时未设置
DISPLAY变量,导致无法打开窗口。解决:使用export DISPLAY=:0.0或xhost +。 - 误区四:批处理脚本中未使用
set_db而沿用旧版set_attribute,导致命令报错。解决:查阅fc_shell -help set_db了解新语法。
总结复盘:环境搭建的本质是“依赖管理”与“路径管理”。建议建立标准操作流程(SOP)文档,包含安装检查清单、许可证测试命令、启动验证脚本。对于团队而言,使用 Docker 容器封装 Fusion Compiler 环境可显著提升可移植性,但需注意许可证 MAC 绑定问题。最后,务必定期备份 .synopsys_fc_setup 和脚本库,避免因误删导致环境不可用。