
filter模塊SoC級(jí)驗(yàn)證思路
單看 RTL 級(jí)仿真,模塊可能已經(jīng)能跑出“正確的數(shù)學(xué)結(jié)果”,但放到 SoC 環(huán)境后,真正決定成敗的往往是地址映射、數(shù)據(jù)裝載、握手時(shí)序和結(jié)束條件。
filter 這類模塊通常不是純組合邏輯,而是一個(gè)典型的數(shù)據(jù)流引擎:CPU 負(fù)責(zé)配置,DDR 提供輸入,核心完成處理,結(jié)果再寫回 DDR。
因此,SoC 級(jí)驗(yàn)證的目標(biāo)不是證明“單次計(jì)算沒問題”,而是證明“系統(tǒng)鏈路沒斷、狀態(tài)收得回來、異常能報(bào)出來”。
· tb 頂層負(fù)責(zé)實(shí)例化 chip_top、時(shí)鐘復(fù)位、DDR/VIP 以及必要的外設(shè)接口。
· soc_base_test.sv 負(fù)責(zé)系統(tǒng)初始化:加載初始化文件、把數(shù)據(jù)寫進(jìn) AXI memory slave、配置默認(rèn) sequence。
· main.c 負(fù)責(zé)模擬軟件側(cè)的真實(shí)行為:寫寄存器、啟動(dòng)模塊、等待 done、讀取狀態(tài)寄存器。
這三層分工清楚以后,問題通常就能快速定位到“是軟件配置錯(cuò)了,還是 DDR 沒灌對(duì),還是 RTL 沒真正跑起來”。
1. CPU 寫配置寄存器,指定輸入/輸出基地址、通道步長、塊數(shù)和啟動(dòng)位。
2. 測試平臺(tái)把 init_mem.txt 的內(nèi)容寫入 DDR,并確保地址空間和 filter 讀取的口一致。
3. filter 從 DDR 發(fā)起 AXI 讀請(qǐng)求,取回輸入數(shù)據(jù)。
4. 核心邏輯做降噪處理,并根據(jù)流水線節(jié)拍輸出結(jié)果。
5. 結(jié)果寫回 DDR,同時(shí)更新 busy / done / err_status。
寄存器配置是否生效
需要重點(diǎn)確認(rèn):
CFG_NFREQ,CFG_NTIME,CFG_NFILE,CFG_POL,RD_BASE_ADDR,WR_BASE_ADDR,CH_STRIDE,BLOCKS_PER_FRAME,BLOCKS_PER_CH 這些寄存器。
很多“卡 busy”的問題,本質(zhì)上不是核心沒算,而是參數(shù)寫錯(cuò),導(dǎo)致內(nèi)部計(jì)數(shù)器永遠(yuǎn)收不齊。
DDR 初始化是否正確
初始化文件是否存在,文件內(nèi)容是否與期望的 word 數(shù)一致。
初始化地址是否和 filter 讀取的 RD_BASE_ADDR 對(duì)齊。
最關(guān)鍵的是:數(shù)據(jù)寫到了正確的 AXI slave 口沒有。
AXI 握手是否正常
重點(diǎn)觀察:
ARVALID / ARREADY,
RVALID / RREADY,
AWVALID / AWREADY,
WVALID / WREADY,
RLAST / WLAST。
如果最后一拍卡住,通常不是“數(shù)據(jù)算錯(cuò)了”,而是某個(gè)握手條件沒有被滿足。
狀態(tài)機(jī)是否完成閉環(huán)
最后一定要看
CORE_BUSY,CORE_DONE,WR_DONE,RD_DONE 和 ERR_STATUS。
如果 busy 不掉、done 不來,說明模塊還停留在流程中間,必須繼續(xù)往回找讀寫鏈路。
1. 先讀寄存器:確認(rèn)軟件寫進(jìn)去的值和 RTL 看到的值一致。
2. 再查 DDR:確認(rèn)初始化數(shù)據(jù)進(jìn)入了正確的地址空間。
3. 再看讀請(qǐng)求:確認(rèn) filter 真正發(fā)起了 AXI 讀取。
4. 再看數(shù)據(jù)流:確認(rèn) master 側(cè)數(shù)據(jù)不是重復(fù)固定值或錯(cuò)位數(shù)據(jù)。
5. 最后看結(jié)束條件:
確認(rèn) done,busy,wr_done,rd_done 能形成閉環(huán)。

filter 模塊的 SoC 級(jí)驗(yàn)證,本質(zhì)上是驗(yàn)證“軟件、DDR、總線和核心邏輯”能否在同一個(gè)閉環(huán)里穩(wěn)定工作。
只要把寄存器、數(shù)據(jù)、握手和結(jié)束條件這四層逐層拆開,絕大多數(shù)卡 busy、卡 rready、輸出重復(fù)值的問題都能快速定位。
?
?
END
?