practice_templates/basic_03/eda_compile_sim/README.md
基础实践 3-2: EDA 工具编译与仿真实践
📚 知识点
| 知识点 | 说明 |
|---|---|
| VCS 编译 | vcs 命令行选项、文件列表、编译流程 |
| 仿真运行 | ./simv 运行参数、日志控制 |
| 波形转储 | $dumpfile/$dumpvars、fsdb 格式 |
| 编译错误定位 | 语法错误、路径错误、宏定义错误 |
| Makefile 自动化 | EDA 流程自动化 |
🎯 任务目标
任务 1: VCS 基础编译 (20 分)
补全 Makefile 中的编译命令:
- [ ] 正确设置 VCS 编译选项 (sverilog, timescale, UVM)
- [ ] 正确指定文件列表 (-f filelist.f)
- [ ] 正确设置 include 路径
- [ ] 编译成功生成 simv
任务 2: 仿真运行控制 (20 分)
补全仿真运行相关配置:
- [ ] 设置 UVM 测试名称 (+UVM_TESTNAME=xxx)
- [ ] 设置日志输出 (-l sim.log)
- [ ] 设置波形转储 (-ucli -do dump.tcl)
- [ ] 设置超时控制 (+timeout=10000ns)
任务 3: 文件列表编写 (20 分)
补全 filelist.f:
- [ ] 正确列出 RTL 文件路径
- [ ] 正确设置 include 目录 (+incdir+)
- [ ] 正确设置宏定义 (+define+)
- [ ] 理解文件编译顺序
任务 4: 编译错误修复 (20 分)
rtl_with_errors/ 目录下有 3 个包含编译错误的文件:
- [ ] error1.sv — 语法错误 (缺少分号、括号不匹配等)
- [ ] error2.sv — 类型错误 (位宽不匹配、未声明信号)
- [ ] error3.sv — 模块连接错误 (端口名、位宽)
找出并修复所有错误,使编译通过。
任务 5: 仿真结果分析 (20 分)
运行仿真后分析:
- [ ] 从 sim.log 中提取 UVM 报告摘要
- [ ] 分析是否有 UVM_ERROR 或 UVM_FATAL
- [ ] 总结测试 PASS/FAIL 状态
- [ ] 编写简单的日志分析脚本 scripts/analyze_log.sh
📁 文件结构
├── rtl/
│ └── simple_alu.sv ← 简单 ALU (完整)
├── env/
│ ├── alu_if.sv ← 接口 (完整)
│ ├── alu_transaction.sv ← Transaction (完整)
│ ├── alu_driver.sv ← Driver (完整)
│ ├── alu_monitor.sv ← Monitor (完整)
│ ├── alu_env.sv ← 环境 (完整)
│ └── alu_test.sv ← 测试 (完整)
├── rtl_with_errors/
│ ├── error1.sv ← ⭐ TODO: 修复语法错误
│ ├── error2.sv ← ⭐ TODO: 修复类型错误
│ └── error3.sv ← ⭐ TODO: 修复连接错误
├── scripts/
│ └── analyze_log.sh ← ⭐ TODO: 补全日志分析脚本
├── filelist.f ← ⭐ TODO: 补全文件列表
├── dump.tcl ← 波形转储脚本 (完整)
├── Makefile ← ⭐ TODO: 补全编译仿真命令
├── top_tb.sv ← Testbench 顶层 (完整)
└── README.md
✅ 验收标准
- 编译成功 (无 Error)
- 仿真输出 "TEST PASSED"
- 错误文件全部修复并编译通过
- 日志分析脚本可正常运行
📝 考核方式
| 考核项 | 分值 | 评估方法 |
|---|---|---|
| VCS 编译配置正确 | 20 分 | Makefile compile 目标可用 |
| 仿真运行控制 | 20 分 | 仿真可运行 + 波形输出 |
| 文件列表正确 | 20 分 | filelist.f 内容正确 |
| 编译错误修复 | 20 分 | 3 个错误文件全部修复 |
| 日志分析脚本 | 20 分 | 脚本可运行 + 输出正确 |
| 合计 | 100 分 |
通过标准:≥ 60 分
考核流程
- 学员演示编译、仿真流程
- 检查 Makefile 和 filelist.f
- 验证编译错误的修复
- 运行日志分析脚本
- 提问 VCS 常用选项的含义