VDMI 讀通道:異構(gòu)計(jì)算中的高效數(shù)據(jù)獲取機(jī)制(三)
一、VDMI 讀通道的關(guān)鍵技術(shù)特性
1. 低延遲優(yōu)化技術(shù)
VDMI 讀通道采用多種技術(shù)降低訪問延遲:
零等待狀態(tài)傳輸:預(yù)取命中時(shí),數(shù)據(jù)可立即傳輸,無需等待存儲(chǔ)器響應(yīng)
地址 - 數(shù)據(jù)重疊:新地址請(qǐng)求可與上一次數(shù)據(jù)傳輸重疊進(jìn)行
短路徑優(yōu)化:對(duì)小數(shù)據(jù)塊訪問提供專用短路徑,減少處理步驟
時(shí)序優(yōu)化:物理層采用源同步時(shí)鐘,數(shù)據(jù)與時(shí)鐘邊沿精確對(duì)齊
實(shí)測(cè)數(shù)據(jù)顯示,對(duì)于預(yù)取命中的訪問,VDMI 讀通道的端到端延遲可低至 10ns 以內(nèi),這一指標(biāo)比傳統(tǒng) AXI_HP 接口降低了 70% 以上,大幅提升了實(shí)時(shí)應(yīng)用的響應(yīng)速度。
2. 緩存一致性支持
VDMI 讀通道提供靈活的緩存一致性選項(xiàng):
完全一致性模式:嚴(yán)格維護(hù)與 PS 緩存的一致性,適合共享數(shù)據(jù)訪問
流模式:不維護(hù)一致性,適合一次性使用的流式數(shù)據(jù),降低開銷
按需一致性:通過軟件指令顯式控制一致性操作
在完全一致性模式下,VDMI 讀通道通過以下機(jī)制維護(hù)一致性:
與 PS 側(cè)的緩存控制器交換窺探請(qǐng)求
在數(shù)據(jù)被修改時(shí)更新緩存行
確保 PL 和 PS 看到的數(shù)據(jù)視圖一致
這一特性顯著簡(jiǎn)化了需要共享數(shù)據(jù)的異構(gòu)應(yīng)用編程模型,使開發(fā)者無需手動(dòng)管理緩存刷新。
3. 錯(cuò)誤處理與可靠性
VDMI 讀通道提供完善的錯(cuò)誤檢測(cè)與恢復(fù)機(jī)制:
ECC 保護(hù):對(duì)內(nèi)部緩沖區(qū)和數(shù)據(jù)路徑提供 ECC(錯(cuò)誤校正碼)保護(hù)
地址范圍檢查:檢測(cè)并報(bào)告超出允許范圍的地址訪問
訪問權(quán)限驗(yàn)證:確保 PL 訪問符合存儲(chǔ)器保護(hù)策略
超時(shí)監(jiān)控:檢測(cè)無響應(yīng)的存儲(chǔ)器訪問并觸發(fā)恢復(fù)流程
錯(cuò)誤隔離:?jiǎn)蝹€(gè)通道的錯(cuò)誤不會(huì)影響其他 VDMI 通道的正常工作
錯(cuò)誤信息通過專用寄存器和中斷信號(hào)通知軟件,使系統(tǒng)能夠采取適當(dāng)?shù)幕謴?fù)措施,提高整體可靠性。
二、VDMI 讀通道的系統(tǒng)集成
1. 硬件配置流程
在 Vitis 設(shè)計(jì)套件中配置 VDMI 讀通道的典型步驟:
接口啟用:在 Block Design 中啟用所需數(shù)量的 VDMI 讀通道
set_property CONFIG.PCW_VDMI_NUM_READ_CHANNELS 2 [get_bd_cells ps7_0]
參數(shù)配置:設(shè)置數(shù)據(jù)寬度、緩存大小和預(yù)取策略
set_property CONFIG.VDMI_READ_CH0_DATA_WIDTH 256 [get_bd_cells ps7_0]
set_property CONFIG.VDMI_READ_CH0_PREFETCH_DEPTH 1024 [get_bd_cells ps7_0]
地址映射:配置 PL 可訪問的存儲(chǔ)器地址范圍
assign_bd_address [get_bd_addr_segs {pl_accelerator_0/VDMI_READ/SEG_DDR_0}]
set_property offset 0x0000000000000000 [get_bd_addr_segs {pl_accelerator_0/VDMI_READ/SEG_DDR_0}]
set_property range 0x0000000100000000 [get_bd_addr_segs {pl_accelerator_0/VDMI_READ/SEG_DDR_0}]
時(shí)序約束:添加適當(dāng)?shù)臅r(shí)序約束確保信號(hào)完整性
create_clock -name vdmi_clk -period 1.0 [get_ports VDMI_CLK]
set_input_delay -clock vdmi_clk -max 0.2 [get_ports VDMI_READ_ARADDR*]
set_output_delay -clock vdmi_clk -max 0.2 [get_ports VDMI_READ_RDATA*]
生成輸出產(chǎn)品:生成比特流和硬件平臺(tái)文件
2. 軟件編程模型
VDMI 讀通道的軟件編程通過設(shè)備樹配置和專用驅(qū)動(dòng) API 實(shí)現(xiàn):
設(shè)備樹配置:描述 VDMI 讀通道的硬件特性
vdmi_read: vdmi-read@f8000000 {
compatible = "xlnx,versal-vdmi-read";
reg = <0x0 0xf8000000 0x0 0x1000>;
xlnx,num-channels = <2>;
xlnx,data-width = <256>;
interrupts = <0 89 4>;
};
初始化代碼:初始化 VDMI 讀通道并配置參數(shù)
#include "xvdmi_read.h"
XVdmiRead VdmiRead;
XVdmiRead_Config *VdmiCfg;
// 查找設(shè)備配置
VdmiCfg = XVdmiRead_LookupConfig(VDMI_READ_DEVICE_ID);
// 初始化設(shè)備
XVdmiRead_CfgInitialize(&VdmiRead, VdmiCfg, VdmiCfg->BaseAddress);
// 配置預(yù)取策略
XVdmiRead_SetPrefetchPolicy(&VdmiRead, 0, VDMI_PREFETCH_LINEAR);
// 設(shè)置緩存大小
XVdmiRead_SetBufferSize(&VdmiRead, 0, 0x10000); // 64KB緩存
數(shù)據(jù)讀取操作:發(fā)起和管理數(shù)據(jù)讀取事務(wù)
// 發(fā)起讀事務(wù)
XVdmiRead_StartTransfer(&VdmiRead, 0,
(u64)DDR_BUFFER_ADDR, // 目標(biāo)地址
0x100000, // 傳輸大小(1MB)
256); // 突發(fā)長(zhǎng)度
// 等待傳輸完成
while(!XVdmiRead_IsTransferDone(&VdmiRead, 0));
這種編程模型抽象了底層硬件細(xì)節(jié),使開發(fā)者能夠?qū)W⒂趹?yīng)用邏輯而非接口細(xì)節(jié)。
3. 與 PL 加速器的接口設(shè)計(jì)
PL 加速器與 VDMI 讀通道接口的關(guān)鍵設(shè)計(jì)考慮:
數(shù)據(jù)寬度匹配:確保加速器的輸出寬度與 VDMI 讀通道的數(shù)據(jù)寬度匹配,或添加寬度轉(zhuǎn)換器
流量控制:正確實(shí)現(xiàn) AXI4-Stream 的 TVALID/TREADY 握手機(jī)制
預(yù)取提示:利用 ARUSER 信號(hào)提供訪問模式提示,優(yōu)化預(yù)取效率
錯(cuò)誤處理:設(shè)計(jì)錯(cuò)誤檢測(cè)和恢復(fù)邏輯,響應(yīng) VDMI 讀通道的錯(cuò)誤信號(hào)
對(duì)于視頻處理等流式應(yīng)用,通常采用直接連接方式:
[視頻解碼器] → [AXI4-Stream FIFO] → [VDMI讀通道] → [DDR存儲(chǔ)器]