淺談CPU和硬件加速器接口 2
對于軟硬件交互不頻繁的硬件加速器,接口工作在“單步”模式就可以滿足軟件需求;對于需要復(fù)雜軟硬件接口設(shè)計(jì)才能滿足系統(tǒng)需求的硬件加速器,依然需要“單步”模式用于模塊功能測試和芯片回片調(diào)試。因此,對于任何一個(gè)需要和軟件交互的硬件加速器,軟硬件接口都會支持“單步”模式。
常見的“單步”模式硬件加速器如下圖所示

-) 從control path的角度,HWA內(nèi)部包括配置寄存器和中斷(一般而言硬件加速器用線中斷,但是系統(tǒng)中斷里類似MSI這樣的消息中斷會占比更大)
-) 從data path的角度,HWA內(nèi)部一般會有FIFO和RAM用于數(shù)據(jù)緩存
軟件在“單步”模式下使用硬件加速器的流程一般如下:
1. 調(diào)用功耗管理程序打開HWA和通路上的相關(guān)時(shí)鐘。如果條件允許,對HWA做一次軟復(fù)位(不管是軟件工程師還是硬件工程師,都相信“干凈”的初始狀態(tài)能避免各種奇奇怪怪的異常)
2. 讀寫HWA里的配置寄存器,完成對HWA的各項(xiàng)配置
3. 啟動(dòng)HWA,等待完成中斷。對于實(shí)時(shí)性要求高的任務(wù),由于軟件進(jìn)出中斷的時(shí)間較長(不同的CPU和操作系統(tǒng)時(shí)間有區(qū)別,一般是us級),常常采用polling寄存器的方式替代
4. 中斷到來后讀取結(jié)果和狀態(tài),清除中斷
5. 調(diào)用功耗管理程序關(guān)閉HWA和通路上的相關(guān)時(shí)鐘
配置寄存器是硬件加速器軟件接口設(shè)計(jì)的核心內(nèi)容之一,一般包括如下內(nèi)容:
1. 參數(shù)配置寄存器
2. 工作開關(guān)寄存器(譬如start和stop)
3. 中斷寄存器
4. 異?;謴?fù)寄存器(實(shí)際上軟件很少用,但是經(jīng)驗(yàn)豐富的工程師都會加入)
5. 用于debug的各種狀態(tài)寄存器
一般而言,CPU讀寫HWA的配置寄存器需要xx-xxx ns(取決于總線架構(gòu)設(shè)計(jì)和HWA總線接口設(shè)計(jì))。對于順序執(zhí)行的CPU,一次讀寫寄存器的操作可能帶來幾百個(gè)CPU周期的性能損失,大大降低了CPU的MIPS,因此在配置寄存器設(shè)計(jì)過程中需要特別關(guān)注軟件讀寫配置寄存器的效率問題。一般而言,需要按照如下原則進(jìn)行設(shè)計(jì):
1. 關(guān)注配置寄存器的高效性,讓CPU在一次任務(wù)中盡可能減少對HWA配置寄存器的訪問次數(shù)
-) 讓所有的bit賦值操作都在regfile上做,
-) 對于多CPU共同訪問的寄存器,硬件自動(dòng)實(shí)現(xiàn)mutex功能,一個(gè)最通常的例子是DMA通道寄存器和中斷互發(fā)寄存器
-) 不論是讀還是寫,避免同一個(gè)task需要訪問多次配置寄存器,當(dāng)然這個(gè)和可擴(kuò)展性往往是沖突的,需要根據(jù)實(shí)際情況trade off
2. 保持配置寄存器的可擴(kuò)展性,沒有經(jīng)驗(yàn)的工程師,往往會把寄存器排列的過于緊密,等到想要升級的時(shí)候,常常會因?yàn)檎也坏娇臻g而暗自神傷。在十幾年前,由于地址空間有限,把寄存器排列的過于寬松也是一種缺點(diǎn)。不過現(xiàn)在一般來說地址空間都遠(yuǎn)大于實(shí)際需求(CPU地址已經(jīng)在48bit,256TB),因此適當(dāng)?shù)膶捤梢呀?jīng)不是一種罪過,當(dāng)然地址空洞依然會導(dǎo)致一系列很討厭的工程小問題
不管做任何事情,透過紛繁復(fù)雜的現(xiàn)象看清事物的本質(zhì)都是很重要的能力。所謂HWA,可以把它在軟硬件上整體理解為一條專用的“加速指令”,CPU和HWA的交互,其實(shí)可以抽象為CPU執(zhí)行了一條復(fù)雜的專用指令