tyronechyi的个人空间 https://blog.eetop.cn/?1765728 [收藏] [复制] [分享] [RSS]

日志

学习vlog(一)----VCS 仿真

已有 237 次阅读| 2025-9-5 09:49 |个人分类:学习log|系统分类:芯片设计

1. VCS 简介

          Synopsys VCS (verilog Compiler Simulator) 是业界领先的硬件描述语言仿真工具,主要用于VerilogSystemVerilogVhdl设计的编译和仿真。作为高性能的编译型仿真器,VCS提供了出色的仿真速度和全面的调试功能,被广泛应用于数字集成电路设计和验证领域。

         主要特点:

高性能的编译型仿真架构

全面的SystemVerilogUVM支持

优秀的调试和分析能力

Synopsys生态系统无缝集成

支持功耗分析和覆盖率驱动验证

2. VCS 仿真原理

         VCS采用编译型仿真架构,与解释型仿真器相比具有显著的性能优势:

          2.1 编译过程

1. 语法分析和编译:将HDL源代码编译成C语言中间文件

2. C代码编译:使用本地C编译器(gcc/clang)将中间文件编译成机器码

3. 链接优化:生成高度优化的可执行仿真程序(simv)

         2.2 仿真执行

直接执行本地机器码,无需解释过程

采用事件驱动算法处理信号变化

支持多线程并行仿真提高速度

3. 详细的仿真流程

3.1 环境设置

 

# 设置VCS环境变量

source    /path/to/vcs/setup.sh

# 设置License路径

export    LM_LICENSE_FILE=27000@license_server

 

3.2 文件准备

# 设计文件

./rtl/design1.v

./rtl/design2.v

./rtl/top_module.v

# 测试平台文件

./tb/testbench.sv

./tb/test_cases.sv

# 库文件

-y /lib/path

+incdir+./include

 

         3.3 完整仿真流程

# 步骤1: 编译设计

vcs     -sverilog -debug_all -timescale=1ns/1ps \ 

           -f filelist.f \

          +define+SIMULATION \

           -l compile.log

 

# 步骤2: 运行仿真

./simv    +TESTNAME=test_case1 \

               +DUMP_ENABLE \

                -l simulation.log

 

# 步骤3: 查看波形

dve    -vpd vcdplus.vpd &

# 或使用Verdi

verdi   -ssf waves.fsdb &

 

4. 仿真需要的输入资料

         4.1 必需文件

文件类型描述示例
设计文件RTL源代码.v, .sv文件
测试平台验证环境testbench.sv
文件列表源文件清单filelist.f

         4.2 可选文件

文件类型用途
库文件工艺库、IP库
配置文件运行时配置
约束文件时序约束
宏定义文件编译时宏定义

         4.3 典型目录结构


project/

├── rtl/           # 设计文件

├── tb/           # 测试平台

├── include/      # 头文件

├── lib/          # 库文件

├── sim/          # 仿真目录

├── work/         # 工作目录

└── scripts/      # 脚本文件

 

5. 仿真过程及产生的文件

       5.1 编译阶段文件

文件描述
simv可执行仿真程序
simv.daidir/编译中间文件目录
csrc/C源代码文件
compile.log编译日志文件

       5.2 仿真阶段文件

文件描述
simulation.log仿真运行日志
vcdplus.vpdVCS波形数据文件
*.fsdbNovas波形数据文件
ucli.keyUCLI调试会话文件

       5.3 覆盖率文件

文件描述
*.vdb覆盖率数据库
urgReport/覆盖率报告目录
coverage.xmlXML格式覆盖率数据

 

6. 常用VCS指令详解

6.1 编译选项

# 基本编译选项

vcs   [options]   design_files

# 常用选项

-sverilog              # 支持SystemVerilog

-debug_all             # 生成全面调试信息

-timescale=1ns/1ps     # 设置时间精度

-full64                # 64位模式编译

-l compile.log         # 保存编译日志

-f filelist.f          # 使用文件列表

+define+MACRO=value    # 定义宏

+incdir+directory      # 包含目录

6.2 仿真选项

# 运行仿真

./simv    [options]

# 常用运行时选项

-l simulation.log      # 仿真日志

+TESTCASE=test_name    # 指定测试用例

+DUMP_ENABLE=1         # 启用波形dump

+vpdfile=wave.vpd      # 指定波形文件名

6.3 调试选项

# 调试相关编译选项

-debug_access+all      # 启用调试功能

-debug_region+cell+encrypt    # 调试加密区域

-line                  # 行号调试

# 交互式调试

./simv    -gui            # 图形界面调试

./simv    -i              # 交互式命令行模式

6.4 覆盖率选项

# 覆盖率收集

-cm line+cond+fsm+branch+tgl     # 收集各种覆盖率

-cm_dir coverage.vdb      # 指定覆盖率目录

-cm_name test1          # 测试用例名称

-cm_log cm.log            # 覆盖率日志

# 覆盖率报告

urg    -dir *.vdb         # 生成覆盖率报告

urg    -format both       # 生成文本和HTML报告

 

6.5 性能优化选项

# 性能优化

-CC "gcc -O3"          # 指定编译器优化选项

-Mupdate               # 增量编译

-parallel              # 并行编译

-num_parallel_threads 4     # 并行线程数

 

7. 实用脚本示例

7.1 自动化编译脚本

#!/bin/bash

# run_vcs.sh

# 设置环境变量

source    /opt/synopsys/vcs/setup.sh

# 编译选项

VCS_OPTS="-sverilog -debug_all    -timescale=1ns/1ps"

VCS_OPTS="$VCS_OPTS -full64     -l    compile.log"

VCS_OPTS="$VCS_OPTS     +define+SIMULATION"

VCS_OPTS="$VCS_OPTS     -f    filelist.f"

# 编译

echo     "开始编译..."

vcs     $VCS_OPTS

 

if [ $? -eq 0 ]; then

    echo    "编译成功!"

else

    echo     "编译失败! 请查看compile.log"

    exit 1

fi

# 仿真

echo "开始仿真..."

./simv +TESTNAME=$1  -l  simulation.log

echo "仿真完成!"

 

7.2 Makefile示例

# Makefile for VCS simulation

# 变量定义

VCS  =  vcs

SIMV  =  simv

VCS_OPTS   =   -sverilog   -debug_all   -timescale=1ns/1ps   -full64

VCS_OPTS   +=  +define+SIMULATION   -f   filelist.f

# 默认目标

all: comp sim

# 编译

comp:

$(VCS) $(VCS_OPTS)   -l   compile.log

# 仿真

sim:

./$(SIMV)    -l   simulation.log

# 图形界面仿真

gui:

./$(SIMV)    -gui

# 清理

clean:

rm    -rf   $(SIMV)   csrc     *.log     *.vpd     *.vdb    urgReport DVEfiles    *.key

# 覆盖率报告

coverage:

urg    -dir    *.vdb   -report   urgReport

8. 常见问题排查

8.1 编译错误

语法错误:查看compile.log中的具体错误信息

文件找不到:检查文件路径和include目录

• License问题:检查LM_LICENSE_FILE设置

8.2 仿真错误

运行时错误:检查simulation.log中的错误信息

波形文件问题:确认测试平台中正确调用了波形dump函数

内存不足:使用64位模式或增加系统内存

8.3 性能问题

仿真速度慢:启用优化选项,减少波形dump

编译时间长:使用增量编译功能



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 10

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 0

    粉丝
  • 0

    好友
  • 0

    获赞
  • 0

    评论
  • 149

    访问数
关闭

站长推荐 上一条 /3 下一条


手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-9-7 14:49 , Processed in 0.014836 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部