[脚本]tcl&python在项目中运用

文章介绍了使用TCL进行Modelsim仿真的脚本操作,包括库管理、文件编译和仿真流程,以及如何在VCS中保存仿真数据。同时,展示了Python在自动例化TB文件和执行回归测试,收集覆盖率的应用。
摘要由CSDN通过智能技术生成

一、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()  # 关闭文件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值