用Verdi计算AXI带宽的Tcl脚本
摘要:Verdi(Synopsys的nTrace或Verdi工具)是一个强大的波形查看和分析工具,支持Tcl脚本自动化任务,如加载fsdb文件、查询信号、计算切换率和统计数据传输量。这非常适合计算AXI协议的带宽(Bandwidth, BW),因为AXI的BW依赖于数据通道的有效传输(e.g., wvalid && wready高时的wdata字节)。
在Verdi中,Tcl脚本使用npi(nTrace Programming Interface)命令来访问波形数据。计算AXI BW的核心步骤:
- 加载fsdb文件。
- 指定时间窗口(time window)。
- 查询AXI信号(e.g., /top/dut/axi_if/wvalid, wready, wdata, wstrb, wlast)。
- 统计有效周期(valid && ready)。
- 计算总有效字节 = 有效周期 × (数据宽度 / 8) × active strobes (wstrb位计数)。
- BW = 总字节 / 时间 (GB/s = 字节 / 1e9 / 时间秒)。
运行脚本方式:
- 启动Verdi:
verdi -ssf your_fsdb.fsdb -nologo
(加载fsdb)。 - 在Verdi Tcl console(或文件)运行脚本:
source your_script.tcl
。 - 或批处理:
verdi -ssf your_fsdb.fsdb -script your_script.tcl
。 - 注意:脚本假设AXI数据宽度128位(可参数化);调整信号路径为您的设计。需要Verdi许可。
我将提供两个示例脚本:一个基本脚本(计算单个窗口BW),一个高级脚本(多窗口、参数化、输出报告)。每个脚本后附解释。
示例1: 基本AXI带宽计算脚本(单一时间窗口)
这个脚本计算指定时间窗口内的写通道(W channel)BW,假设数据宽度128位。
# basic_axi_bw.tcl - 计算AXI写通道带宽
# 用户参数 (可修改)
set data_width 128 ;# AXI数据宽度 (位)
set time_start 0.0 ;# 开始时间 (ns)
set time_end 1000.0 ;# 结束时间 (ns)
set scope "/top/dut/axi_if" ;# AXI接口scope路径
# 查询信号句柄 (使用npi)
set wvalid_hdl [npi_hdl_by_name -scope $scope -name "wvalid"]
set wready_hdl [npi_hdl_by_name -scope