搭建仿真环境-vcs

1. DESIGNWARE的使用

环境变量

# 设置DesignWare库路径
export SYNOPSYS_DW_HOME=.../synopsys/syn/R-2020.12
export DW_PATH=$SYNOPSYS_DW_HOME/dw/sim_ver
export VCS_HOME=/path/to/vcs  //指向VCS的安装目录。
export LD_LIBRARY_PATH=$SYNOPSYS_DW_HOME/lib:$VCS_HOME/lib:$LD_LIBRARY_PATH //确保VCS能够找到DesignWare库的动态链接库。

# 检查环境变量
echo "SYNOPSYS_DW_HOME: $SYNOPSYS_DW_HOME"
echo "DW_PATH: $DW_PATH"
echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH"

# 编译Verilog代码并链接DesignWare库
vcs -full64 -sverilog -debug_all \
    -y $DW_PATH +libext+.v+.sv \  # 指定DesignWare库路径和文件扩展名
    -v $DW_PATH/DW_foundation.sver \  # 显式指定DesignWare库文件
    your_design.v tb.v

# 运行仿真
./simv
  1. DESIGNWARE_HOME

作用: 这是Synopsys DesignWare库的根目录,通常包含DesignWare IP核的源代码、仿真模型、综合脚本等。

内容:

sim_ver: Verilog仿真模型。

synthesis: 综合脚本和约束文件。

docs: 文档。

用途: 用于仿真和综合过程中调用DesignWare IP核。

  1. DW_PATH

作用: 这是DesignWare库的仿真模型目录,专门用于仿真。通常包含Verilog或SystemVerilog的仿真模型文件。

内容:

DW_foundation.sv: DesignWare基础库的SystemVerilog文件。

其他IP核的仿真模型(如乘法器、加法器等)。

用途: 在VCS仿真中,通过-y和+libext+选项指定该路径,以链接DesignWare仿真模型。

  1. VIP_PATH

作用: 这是Synopsys Verification IP(VIP)库的路径,用于验证复杂的协议或标准接口(如AMBA、PCIe、USB等)。

内容:

协议验证模型(如AXI、AHB、APB等)。

测试用例和验证环境。

用途: 在验证环境中调用VIP库,用于验证设计是否符合协议规范。

使用LSF

如何使用Makefile管理VCS编译和仿真,并通过bsub提交任务到LSF批处理系统。
两种方式:直接在Makefile中添加submit目标,或者创建单独的bash脚本。

以下是执行上述脚本和命令的具体步骤:


1. 编写Makefile

假设你的 Makefile 包含以下规则(如上述示例):

compile:
    vcs -full64 -sverilog -o simv +incdir+./include ./src/*.v

simulate: compile
    ./simv +ntb_opts=ucli
    
# 清理规则
clean:
	rm -rf simv csrc simv.daidir *.log
	
submit:
    bsub -J VCS_SIM -o ./logs/sim_%J.out -eo ./logs/sim_%J.err -n 4 -M 16GB -W 2:00 -R "span[hosts=1]" "make simulate"

假设项目目录结构如下:

project/
├── src/ # Verilog 源码
├── include/ # 头文件
├── testbench/ # 测试平台
├── scripts/ # 提交脚本
├── logs/ # 日志文件
└── Makefile # 编译和仿真控制

# VCS 编译选项
VCS_OPTS = -full64 -sverilog -debug_acc+all -timescale=1ns/1ps
INC_DIR  = +incdir+./include +incdir+./testbench
VCS_SIM_OPTS = +ntb_opts=uvm-1.2 +UVM_TESTNAME=base_test

# 源码路径
SRC_FILES = ./src/*.v ./testbench/tb_top.sv

# 默认目标
all: compile simulate

# 编译规则
compile:
	vcs $(VCS_OPTS) $(INC_DIR) -o simv $(SRC_FILES)

# 仿真规则
simulate:
	./simv $(VCS_SIM_OPTS) | tee simulation.log

# 清理规则
clean:
	rm -rf simv csrc simv.daidir *.log *.vpd *.fsdb *.key

# 提交到 LSF
submit:
	bsub -J VCS_SIM -o ./logs/sim_%J.out -eo ./logs/sim_%J.err -n 4 -M 16GB -W 2:00 -R "span[hosts=1]" "make simulate"
1.1 直接编译和仿真
  • 编译代码

    make compile
    
  • 运行仿真

    make simulate
    

2. 提交作业到 LSF

2.1 通过 Makefile 提交

如果 Makefile 中定义了 submit 规则:

submit:
    bsub -J VCS_SIM -o ./logs/sim_%J.out -eo ./logs/sim_%J.err -n 4 -M 16GB -W 2:00 -R "span[hosts=1]" "make simulate"

直接运行:

make submit
2.2 通过独立脚本提交

如果创建了独立的提交脚本(如 scripts/run_sim.sh):

#!/bin/bash
# 提交到 LSF(直接命令行)
bsub -J VCS_SIM \
     -o ./logs/sim_%J.out \
     -eo ./logs/sim_%J.err \
     -n 8 \                  # 请求 8 个 CPU 核
     -M 32GB \               # 请求 32GB 内存
     -W 4:00 \               # 超时时间 4 小时
     -R "span[hosts=1]" \    # 所有核在同一个节点
     "make clean && make simulate"

执行步骤:

  1. 赋予脚本执行权限:
    chmod +x scripts/run_sim.sh
    
  2. 运行脚本:
    ./scripts/run_sim.sh
    

2.3 高级功能
  • 依赖任务:如果仿真依赖编译完成,分步提交:
# 先提交编译任务
COMPILE_JOB_ID=$(bsub -J COMPILE -o compile.log "make compile" | awk '{print $2}' | tr -d '<>' )

# 提交仿真任务,依赖编译任务
bsub -J SIMULATE -w "done($COMPILE_JOB_ID)" -o sim.log "make simulate"

并行仿真:若 VCS 支持多线程(如 -j 选项),需与 LSF 资源匹配:

# Makefile 中启用并行仿真
simulate:
    ./simv +ntb_opts=uvm +UVM_TESTNAME=stress_test -j 8

# 提交时请求 8 核
bsub -n 8 -R "span[ptile=8]" "make simulate"

3. 关键命令总结

场景命令
本地编译make compile
本地仿真make simulate
提交到 LSF(通过 Makefile)make submit
提交到 LSF(通过脚本)./scripts/run_sim.sh
查看作业状态bjobsbjobs -l <jobID>
终止作业bkill <jobID>
查看日志tail -f ./logs/sim_12345.out

4. 注意事项

  1. 路径一致性:确保 Makefile 和脚本中的路径(如 ./src/*.v./logs/)与实际目录匹配。
  2. 资源请求:根据项目需求调整 -n(CPU 核数)、-M(内存)、-W(超时时间)。
  3. 依赖管理:如果仿真依赖编译,使用 make clean && make simulate 确保重新编译。

通过以上命令,你可以完成从本地编译到 LSF 集群提交的全流程操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值