一、TCL
1、modelsim仿真脚本
# 建立库
vlib work
# 虚拟库关联真实文件夹
vmap work work
# 对文件编译,默认编译到work库中
vlog "counter.v"
vlog "tcounter.v"
# 开始仿真
vsim -voptargs =+acc work.test_counter
# 打开波形窗口
view wave
view structure
# 打开信号窗口
view signals
# 添加波形
add wave -radix hexadecimal test_counter /dut/*
# 运行
run 10ms
然后在文件夹下再新建一个文本文件,输入:vsim -do start.do
再将txt后缀改为bat,即可通过运行该文件自动执行脚本运行仿真
vlib:建立目录
vmap:映射对应
vlog:编译文件
vsim:启动仿真
2、VCS保存仿真数据,选择GUI模式
# FSDB dump 将仿真数据存到FSDB文件中
fsdbDumpfile ahbmtx_dump.fsdb # 指定FSDB文件名
fsdbDumpvars 0 ahbmtx_tb # 设置转存的变量和层次
# GUI mode or Batch mode execution branch for different purpose 根据不同的目的选择GUI模式或批处理模式执行分支
if {[info command guiIsActive]==""}{ # 检查是否存在GUI活动命令,如果不存在,说明不在GUI模式下
if {[info command verdiSetFont]==""} { # 检查是否存在Verdi字体设置命令,如果不存在,说明不在Verdi GUI模式下
run # 执行仿真
}
echo "Verdi GUI mode" # 输出提示信息,表示进入Verdi GUI模式
dump -add / -depth 0 # 设置波形转存的根节点和深度
} else {
echo "DVE GUI mode" # 输出提示信息,表示进入DVE GUI模式
dump -add / -depth 0 # 设置波形转存的根节点和深度
do ./rkv_ahbmtx_debug_wave.do # 执行调试波形设置脚本
}
二、python
1、python自动例化并生成tb文件
2、python自动跑回归收集覆盖率
import subprocess # 导入subprocess模块,用于执行外部命令
import sys # 导入sys模块,用于访问命令行参数
import random # 导入random模块,用于生成随机数
# 定义一个函数,用于执行命令,并打印输出和错误信息
def execute_command(command):
print(f"Executing: {command}") # 打印要执行的命令
try:
output = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT) # 执行命令并捕获输出
return output.decode("utf-8") # 将输出解码为UTF-8字符串并返回
except subprocess.CalledProcessError as e:
return e.output.decode("utf-8"), e.returncode # 如果命令执行出错,返回错误信息和返回码
# 获取命令行参数,作为要执行的命令
tests = [
"ahbmtx_illegal_addr_access_test",
"ahbmtx_multi_slave_access_test",
"ahbmtx_single_slave_access_reg_test",
"ahbmtx_reset_test"
]
commands = [] # 存储要执行的命令
for test in tests:
commands.append("make run COV=1 TESTNAME=" + test + " SEED=" + str(random.randint(1, 100000))) # 构建要执行的命令
# 打开一个文件,以写入模式
with open("rkv_ahbmtx_recycle_test_log.txt", "w") as external_file:
# 编译和生成项目
make_elab = "make elab COV=1"
output, error_code = execute_command(make_elab) # 执行编译命令
print(output) # 打印编译输出信息
external_file.write(output) # 将编译输出信息写入文件
if error_code: # 如果编译命令返回非零错误码
print(f"Error code: {error_code}") # 打印错误码
external_file.write(str(error_code)) # 将错误码写入文件
# 遍历命令列表,对每个命令进行执行
for i in range(1):
brk_mark = False # 标志用于控制是否终止循环
for command in commands:
output, error_code = execute_command(command) # 执行命令
print(output) # 打印命令执行输出信息
external_file.write(output) # 将命令执行输出信息写入文件
if error_code is not None: # 如果命令执行返回非零错误码
print(f"Error code: {error_code}") # 打印错误码
external_file.write(str(error_code)) # 将错误码写入文件
brk_mark = True # 设置终止标志
break # 退出循环
if brk_mark: # 如果终止标志为True
break # 终止循环
external_file.close() # 关闭文件