AXI R/W/RW帶寬計算的tcl腳本
我基于前述的axi_read_bw_per_id.tcl
腳本進行了修改,使其支持:
- 讀通道(Read Channel):計算基于rvalid && rready的有效周期(已在前述實現)。
- 寫通道(Write Channel):計算基于wvalid && wready的有效周期,考慮wstrb的active bytes(字節使能位計數)。
- 讀寫組合(Combined):分別計算讀/寫BW,然后求和輸出總BW(假設雙向接口)。
修改說明
- 新增參數:
channel
:支持"read"(只讀)、"write"(只寫)、"both"(讀寫組合,默認)。- 寫通道特定:
strb_width
(wstrb寬度,與data_width匹配)。
- 邏輯擴展:
- 對于"both",腳本分別循環計算讀/寫(共享時間窗口),然后聚合總BW/效率。
- 寫通道:用Tcl proc
count_active_strobes
計算wstrb中1的位數(active strobes),字節 = (data_width / 8) * (active_strobes / (data_width / 8))。 - per-ID支持:讀用rid,寫用wid(假設信號名為"wid";調整為您的設計)。
- 輸出:CSV擴展為per-ID讀/寫/總(e.g., Read BW, Write BW, Total BW)。
- 假設:
- 讀/寫信號在同一scope。
- ID寬度相同;如果不同,需額外調整。
- 步進1.0ns(調整為您的clk周期以加速)。
- 運行方式:同前述,在Verdi中
source axi_rw_combined_bw.tcl
。生成CSV報告。
如果您的AXI接口有自定義信號(如非標準ID/strb),或需要優化性能(e.g., 用npi_iterate_over_transitions),請提供更多細節。
修改后的腳本示例(axi_rw_combined_bw.tcl)
# axi_rw_combined_bw.tcl - 計算AXI讀/寫/組合帶寬 (支持per-ID, 多窗口)# 用戶參數 (可修改)
set data_width 128 ;# AXI數據寬度 (位, e.g., 128=16字節/周期)
set id_width 8 ;# ID寬度 (位, e.g., 8位支持256 ID)
set strb_width [expr $data_width / 8] ;# wstrb寬度 (字節, e.g., 16 for 128-bit)
set channel "both" ;# "read" (只讀), "write" (只寫), "both" (讀寫組合)
set scope "/top/dut/axi_if" ;# AXI接口scope路徑 (調整為您的設計)
set time_windows [list {0 1000} {1000 2000} {2000 3000}] ;# 多時間窗口 (ns, list of pairs)
set output_file "axi_rw_combined_bw_report.csv" ;# 輸出CSV文件# Tcl proc: 計算wstrb中active bits (popcount)
proc count_active_strobes {strb_val strb_width} {set count 0for {set i 0} {$i < $strb_width} {incr i} {i