VCS 2023.12 + Verdi L-2016.06 联合仿真:Makefile 脚本实现 3 步自动化流程
VCS 2023.12与Verdi L-2016.06联合仿真工程级Makefile自动化实践指南1. 工具链整合的价值与挑战在数字IC验证领域VCS与Verdi的组合堪称黄金搭档。VCS作为Synopsys推出的高性能仿真器以其出色的编译速度和仿真效率著称而Verdi则以其强大的调试能力成为设计问题定位的利器。然而这两个工具的协同工作往往需要复杂的参数配置和繁琐的操作步骤这正是Makefile自动化脚本可以大显身手的地方。传统的手动操作流程存在几个明显痛点环境依赖性强需要手动设置NOVAS_HOME等环境变量参数记忆成本高VCS编译选项、Verdi启动参数等难以记忆流程碎片化编译、仿真、调试需要分别执行不同命令结果不可复现手工操作容易遗漏关键参数一个精心设计的Makefile解决方案可以带来以下提升一键式操作将多步操作封装为单个make命令参数集中管理所有关键参数在脚本头部统一配置环境自检自动检查工具路径和依赖关系结果可复现确保每次执行使用相同的参数配置2. 工程级Makefile架构设计2.1 目录结构规范建议采用以下目录结构这是经过多个项目验证的最佳实践project_root/ ├── rtl/ # RTL设计代码 ├── tb/ # 测试平台文件 ├── sim/ # 仿真相关文件 │ ├── Makefile # 主控制脚本 │ ├── filelist.f # 设计文件列表 │ ├── config/ # 配置文件目录 │ └── log/ # 日志文件目录 ├── wave/ # 波形文件存储 └── coverage/ # 覆盖率数据2.2 Makefile核心模块一个完整的工程级Makefile应包含以下功能模块# 工具路径配置 NOVAS_HOME : /opt/synopsys/Verdi_L-2016.06 VCS_HOME : /opt/synopsys/VCS_2023.12 # 工程参数配置 TOP_MODULE : top_tb FSDB_FILE : $(TOP_MODULE).fsdb FILELIST : filelist.f # 编译选项 VCS_OPTS : -full64 -sverilog v2k -debug_accall VCS_OPTS -timescale1ns/1ps -lca -kdb VCS_OPTS -P $(NOVAS_ARGS) # Verdi接口配置 NOVAS_ARGS : $(NOVAS_HOME)/share/PLI/VCS/LINUX64/novas.tab NOVAS_ARGS $(NOVAS_HOME)/share/PLI/VCS/LINUX64/pli.a # 覆盖率收集配置 CM_TYPE : linecondfsmbranchtgl CM_DIR : ./coverage3. 三步自动化流程实现3.1 编译阶段优化编译阶段的核心任务是生成可执行的仿真程序关键是要正确处理以下方面compile: vcs $(VCS_OPTS) \ -f $(FILELIST) \ -top $(TOP_MODULE) \ -cm $(CM_TYPE) \ -cm_dir $(CM_DIR) \ -l compile.log关键参数说明参数作用推荐值-full6464位模式编译必须-sverilog支持SystemVerilog根据需求v2kVerilog-2001支持建议-debug_accall调试功能全开调试阶段建议-cm覆盖率类型根据验证计划常见问题处理PLI接口错误确保NOVAS_ARGS路径正确版本兼容性问题使用-full64统一工具链位数文件缺失错误检查filelist.f是否包含所有必要文件3.2 仿真阶段控制仿真阶段需要关注波形生成和日志记录sim: ./simv \ fsdbautoflush \ -ucli -i dump_fsdb.tcl \ -cm $(CM_TYPE) \ -cm_dir $(CM_DIR) \ -l sim.log配套的dump_fsdb.tcl脚本# 波形dump控制脚本 fsdbDumpfile $env(FSDB_FILE) fsdbDumpvars 0 $env(TOP_MODULE) run仿真控制技巧使用fsdbautoflush实现仿真过程中实时写入波形通过-ucli启用命令行交互接口在testbench中添加仿真时长控制initial begin #1000; // 仿真1000个时间单位 $finish; end3.3 调试阶段优化Verdi启动配置应当考虑日常调试需求verdi: verdi -f $(FILELIST) \ -ssf $(FSDB_FILE) \ -nologo Verdi高效调试技巧信号追踪Ctrlw添加信号到波形窗口h显示完整信号路径波形操作f自动适配波形显示z/Z缩放波形Ctrl方向键横向移动代码导航双击信号跳转到定义Ctrlg跳转到指定行书签功能Shifts保存信号组下次通过File-Load Signal快速恢复4. 高级工程化实践4.1 参数化设计支持通过Makefile参数实现不同配置的灵活切换# 模式选择debug/release MODE ? debug ifeq ($(MODE),debug) VCS_OPTS -debug_accall else VCS_OPTS -debug_access endif # 覆盖率开关 COV ? 1 ifeq ($(COV),1) VCS_OPTS -cm $(CM_TYPE) endif使用示例make compile MODErelease COV04.2 多测试用例管理扩展Makefile支持批量测试TESTCASES : test1 test2 test3 run_all: $(addprefix run_,$(TESTCASES)) run_%: echo Running testcase $* $(MAKE) sim TEST$* FSDB_FILE$*.fsdb4.3 自动化检查点添加预处理检查确保环境正确check_env: which vcs /dev/null || (echo VCS not found in PATH; exit 1) test -d $(NOVAS_HOME) || (echo Verdi path error; exit 1) test -f $(FILELIST) || (echo Filelist missing; exit 1) compile: check_env # 原有编译命令5. 常见问题解决方案5.1 波形文件异常处理问题现象波形文件生成但无法打开检查步骤确认testbench中有$fsdbDumpfile调用检查文件权限ls -l *.fsdb验证Verdi版本匹配verdi -version典型解决方案# 在Makefile中添加波形验证规则 check_wave: test -f $(FSDB_FILE) \ echo Wavefile exists || \ (echo Wavefile missing; exit 1)5.2 性能优化技巧当设计规模较大时可以尝试以下优化增量编译VCS_OPTS -Mupdate -ignore initial_module并行编译VCS_OPTS -j8 # 使用8个CPU核心分区调试# 在dump_fsdb.tcl中限定dump范围 fsdbDumpvars 0 top.submodule5.3 版本控制集成将仿真环境与Git集成git_version: echo Git Revision: $(shell git rev-parse --short HEAD) echo Last Commit Date: $(shell git log -1 --format%cd) sim: git_version # 原有仿真命令6. 扩展应用场景6.1 回归测试集成将Makefile与CI系统集成regression: clean compile $(foreach test,$(TESTCASES),\ $(MAKE) sim TEST$(test) FSDB_FILE$(test).fsdb;) $(MAKE) coverage_report coverage_report: urg -dir *.vdb -report coverage_report6.2 自定义波形配置保存Verdi界面配置在Verdi中设置好信号分组、颜色等File → Save Signal → 保存为*.rc文件修改Makefileverdi: verdi -f $(FILELIST) -ssf $(FSDB_FILE) -sswr config.rc 6.3 跨平台适配处理Windows/Linux差异ifeq ($(OS),Windows_NT) RM : del /Q FSDB_VIEWER : verdi.exe else RM : rm -rf FSDB_VIEWER : verdi endif

相关新闻

STM32与PAM8904实现多级智能警报系统设计

STM32与PAM8904实现多级智能警报系统设计

1. 项目背景与硬件选型考量在工业自动化、智能家居和安防监控领域,可靠的多级警报系统是保障安全的关键基础设施。传统方案通常采用简单的有源蜂鸣器直接驱动,这种方式虽然成本低廉,但存在音调单一、音量不可调、功耗高等明显缺陷。而基于STM…

2026/7/13 1:05:08阅读更多 →
工业信号采集系统设计:高速光耦与STM32 ADC应用

工业信号采集系统设计:高速光耦与STM32 ADC应用

1. 工业环境信号采集的挑战与解决方案在电机控制、电力监测等工业场景中,信号采集系统常面临三大干扰源:电磁干扰(EMI)峰值可达200V/m、共模噪声范围10V、以及温度波动引起的器件参数漂移。传统的光耦隔离方案如PC817,…

2026/7/13 1:05:08阅读更多 →
NBM7100A与PIC32MX664F064L的电池优化方案

NBM7100A与PIC32MX664F064L的电池优化方案

1. 项目背景与核心挑战在物联网设备和便携式电子设备领域,初级电池(不可充电电池)仍然是许多应用的首选电源方案。这类电池具有能量密度高、自放电率低、使用简单等优势,但存在一个根本性限制:一旦电量耗尽就必须更换。…

2026/7/13 1:05:08阅读更多 →
AI编程智能体全栈开发指南:从LangChain到商业级应用实战

AI编程智能体全栈开发指南:从LangChain到商业级应用实战

AI编程智能体正在彻底改变软件开发的游戏规则,但很多开发者面临一个尴尬的现实:看了无数教程,却依然无法在实际项目中有效运用这些工具。问题不在于技术本身,而是缺乏系统性的理解框架和实战经验。本文将从零开始,帮你…

2026/7/13 2:25:17阅读更多 →
STM32F446RE与ADS127L11高精度信号采集方案

STM32F446RE与ADS127L11高精度信号采集方案

1. 项目背景与核心需求在工业测量、医疗设备和精密仪器等领域,高精度模拟信号采集一直是关键挑战。传统8位或12位ADC往往难以满足现代应用对分辨率和噪声性能的要求。ADS127L11作为TI推出的24位Δ-Σ ADC,配合STM32F446RE的强大处理能力,为工…

2026/7/13 2:25:17阅读更多 →
Java移位运算:补码的魔法让负数秒变正数,你还在傻傻算原码?

Java移位运算:补码的魔法让负数秒变正数,你还在傻傻算原码?

正数的反码是其本身 负数的反码是这样得到的, 在其原码的基础之上, 符号位保持不变, 其余各个 bit 位进行取反操作。 [+5](原码)= [](反码) [ …

2026/7/13 2:25:17阅读更多 →
C++ STL与string核心解析:从设计思想到算法实战

C++ STL与string核心解析:从设计思想到算法实战

1. 项目概述:为什么STL和string是C的基石如果你刚开始学C,或者已经写了一些控制台程序,但一遇到需要处理字符串、管理一堆数据、或者想实现个排序查找功能就感到头疼,那这篇文章就是为你准备的。我见过太多新手,包括当…

2026/7/13 2:25:17阅读更多 →
工业级负载控制方案:TPD2015FN与STM32F746ZG实战

工业级负载控制方案:TPD2015FN与STM32F746ZG实战

1. 工业级负载控制的核心挑战与选型思路在工业自动化、机器人控制、电力电子等高需求场景中,电感和电阻负载的控制一直是系统设计的难点。不同于普通的阻性负载,电感负载(如电机、继电器线圈、变压器等)在开关瞬间会产生反向电动势…

2026/7/13 2:25:17阅读更多 →
题解:P16108 「o.OI R-1」基础博弈练习题

题解:P16108 「o.OI R-1」基础博弈练习题

分析 观察样例后发现,出题人给的数据都是答案为Ciallo~的数据,十分难受,所以自然想要去看看怎么才能得到答案为xwx的数据。 情况比较显然,当 nnn 全都严格小于 aia_iai​ 中最小值时,肯定先手会输。 接下来我们需要证明…

2026/7/13 2:20:16阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/12 0:02:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/13 0:50:34阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/12 0:02:11阅读更多 →
卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

研究痛点提出(提出问题)重组肠激酶是融合标签切除核心工具酶,当前原核表达体系存在三大标准化难题,直接阻碍可复现的蛋白质分离纯化流程搭建:Trx、GST、单 SUMO 标签融合产物绝大多数为包涵体,沉淀占比超 9…

2026/7/13 0:04:58阅读更多 →
语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate text …

2026/7/13 0:04:58阅读更多 →
Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

2026/7/13 0:04:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/11 16:20:28阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/11 23:15:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/12 21:43:43阅读更多 →