2. 环境搭建与基本操作

Fusion Compiler 作为 Synopsys 新一代融合物理实现平台,其环境搭建质量直接决定后续设计流程的顺畅程度。与传统的 IC Compiler II 或 PrimeTime 独立工具不同,Fusion Compiler 将综合、布局布线、时钟树综合与 signoff 分析能力整合在同一数据模型与执行引擎中,因此其安装配置、许可证管理以及启动方式具有鲜明的“融合”特征。本章将围绕环境准备、许可证机制、启动流程、常用命令体系以及 GUI 导航五个维度展开,帮助学员建立从“能跑”到“会跑”再到“跑得稳”的完整认知。

Fusion Compiler 环境搭建与启动链路总览 安装包与OS依赖 installer + 平台包 gcc/lib/内核版本 许可证配置 SNPSLMD / lmgrd Feature: Fusion_Compiler 环境变量 FC_HOME / PATH / LD_LIBRARY_PATH LM_LICENSE_FILE / SNPSLMD_LICENSE_FILE 启动方式 fc_shell / fc_gui -f script.tcl 启动验证与诊断 fc_shell 启动 banner license check: fc_license_check which fc_shell / fc_gui fc_shell -version 常用命令体系 read_db / read_verilog / read_sdc syn_opt / place_opt / clock_opt route_opt / report_qor write_db / save_block GUI 界面导航 Design Browser / Layout Window Timeline / Console / Message Menu: File/Edit/Floorplan/Place Route/Clock/Verify/Window/Help 脚本与批处理 fc_shell -f run.tcl | tee log source scripts/common_procs.tcl set_db / set_app_options report_license / report_errors 输出与检查 log / report / db check_design / check_license gui 截图 / 时序报告 exit / quit 数据流 许可证流 环境变量流 注:所有路径均需在 .cshrc / .bashrc 中持久化配置

上图展示了 Fusion Compiler 环境搭建的整体链路:从安装包与操作系统依赖、许可证配置、环境变量设置到启动验证,再到常用命令与 GUI 导航,最终形成完整的输出与检查闭环。下面我们将逐一拆解每个环节的具体操作与工程要点。

2.1 安装配置:从安装包到可执行环境

核心原理:Fusion Compiler 的安装并非简单的解压即用,其底层依赖多个 Synopsys 公共组件(如 installer、Common Licensing、SAR 等)。安装包通常以 .tar 或 .tar.gz 格式分发,内部包含平台特定的二进制文件(如 linux64 目录)、技术库模板、参考流程脚本以及文档。安装的核心目标是将这些文件解压到指定目录,并确保动态链接库、Python 解释器、Tcl 库等依赖项可被正确加载。

操作流程:

  1. 系统准备:确认操作系统为 RHEL 7.9/8.4 或 SUSE 15 SP3 等 Synopsys 官方支持版本,内核版本不低于 3.10。检查 gcc、make、libXext、libXt、motif 等基础库是否安装。对于 headless 服务器,还需安装 Xvfb 以支持 GUI 的虚拟显示。
  2. 运行安装器:使用 Synopsys Installer(如 installer_5.4)执行图形化或命令行安装。命令行方式更适合批量部署:
    ./installer -silent -install_dir /opt/synopsys/fc -platform linux64 -source /mnt/installer/FusionCompiler_2023.12
  3. 设置环境变量:在 .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
  4. 验证安装:执行 fc_shell -version 应返回版本号;执行 which fc_shell 确认路径正确。
风险提示:切勿将 Fusion Compiler 安装在 NFS 共享目录且无本地缓存,否则启动时库加载延迟可能高达数分钟。建议将 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。

操作流程:

  1. 服务器端:在许可证服务器上启动 lmgrd -c license.dat -l /var/log/snpslmd.log,确保 27000 端口开放。
  2. 客户端配置:推荐同时设置 SNPSLMD_LICENSE_FILE 和 LM_LICENSE_FILE,前者优先用于 Synopsys 工具,后者用于通用 FlexLM 应用。
  3. 测试连接:使用 lmstat -c 27000@server -f Fusion_Compiler 查看可用数量。
Feature 名称用途典型数量
Fusion_Compiler基础综合与布局布线10
Fusion_Compiler_Ultra高级优化(如功耗优化、DFT 并发)5
DesignWare_FoundationIP 库访问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 或当前目录),该文件可预设库路径、变量和常用别名。

操作流程:

  1. 交互式启动:直接输入 fc_shell 进入 Tcl 交互环境,适合调试小段命令。
  2. 批处理模式:
    fc_shell -f run_flow.tcl -log run.log -output_log_dir ./logs
    其中 -f 指定脚本,-log 保存主日志,-output_log_dir 保存分步日志。
  3. 后台运行:使用 nohup fc_shell -f run.tcl > run.out 2>& &,并配合 tail -f run.out 监控进度。
  4. GUI 启动:输入 fc_gui,若远程连接需加 -display 参数或使用 X11 转发。
实战场景:某项目需要同时跑 5 个 corner 的优化。建议为每个 corner 创建独立目录,并编写 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 视图切换,可显示标准单元、宏单元、时钟树、电源网络等图层。

操作流程:

  1. 启动 GUI:在 fc_shell 中输入 gui_start 或直接运行 fc_gui。
  2. 加载设计:通过菜单 File → Read Design 选择 .db 文件,或使用命令 read_db 后执行 gui_show。
  3. 常用菜单:Floorplan(IO 规划、宏放置)、Place(标准单元布局)、Clock(时钟树综合)、Route(全局/详细布线)、Verify(DRC/LVS)、Window(视图管理)。
  4. 快捷键:F2 放大、F3 缩小、Ctrl+Z 撤销、Ctrl+S 保存视图截图。
GUI 区域功能常用操作
Design Browser显示层次化设计树右键点击模块可高亮或报告
Layout Window物理视图鼠标滚轮缩放,Shift+拖拽平移
ConsoleTcl 命令输入直接输入命令并回车执行
Message错误/警告/信息双击错误可跳转至对应单元
经验提醒:GUI 适合小规模调试和物理验证,但大规模流程务必使用脚本。建议在 GUI 中操作时开启 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。

实际操作步骤:

  1. 安装依赖库并解压安装包至 /opt/synopsys/fc_2023。
  2. 配置 .bashrc 环境变量,并 source 生效。
  3. 复制远程 license.dat 至本地,修改端口为 27001,启动 lmgrd -c license.dat。
  4. 运行 fc_license_check 确认所有 Feature 可用。
  5. 编写 min_flow.tcl 脚本,读入库、网表、SDC,执行 syn_opt 和 place_opt。
  6. 执行 fc_shell -f min_flow.tcl -log min_flow.log,观察日志无 ERROR。
  7. 启动 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 和脚本库,避免因误删导致环境不可用。