淺談CPU和硬件加速器接口 1
隨著狹義摩爾定律的終結(jié),單純依靠CPU這種通用算力完成特定領(lǐng)域計(jì)算任務(wù)已經(jīng)越來越不可行,面向特定領(lǐng)域完成專用ASIC設(shè)計(jì)是芯片設(shè)計(jì)過程中的一項(xiàng)主要任務(wù)。一名合格的ASIC架構(gòu)師,接到一項(xiàng)新的工作任務(wù)時(shí),一般需要首先考慮如下四個(gè)問題:
1. 決定軟硬件分工
更準(zhǔn)確的說,是決定ASIC承接哪些feature,又把哪些feature交還給軟件。
-) 一般而言,固定的大規(guī)模計(jì)算(譬如加解密和編解碼)和數(shù)據(jù)流的搬移是ASIC一定要承接的任務(wù)
-) 可以靈活實(shí)現(xiàn)的復(fù)雜控制和演進(jìn)過程中的計(jì)算則需要交還給CPU/DSP(說白了就是軟件實(shí)現(xiàn))
-) 對于實(shí)時(shí)性要求高且又需要一定靈活編程能力的控制可以選擇軟件定義硬件(SDH, Software Defined Hardware)來實(shí)現(xiàn)
2. 梳理control flow和data flow
確定HWA(Hardware Accelerator)需要實(shí)現(xiàn)的功能后,接下來就需要完成control flow和data flow的整理,通俗的講,是確定以下內(nèi)容:
-) HWA的上游是什么,HWA or SW
-) HWA的下游是什么,HWA or SW
-) 控制信息是如何輸入的,又該怎么把狀態(tài)結(jié)果輸出給下游
-) 數(shù)據(jù)是如何流入的,又怎么供給到下游使用
做好控制流和數(shù)據(jù)流的梳理,確定控制和數(shù)據(jù)的流動模型,是做好HWA架構(gòu)的前提。在架構(gòu)設(shè)計(jì)時(shí),一般需要考慮如下兩個(gè)方面,做好架構(gòu)層面的trade-off
-) 高效的完成控制流和數(shù)據(jù)流的輸入和輸出,減少軟件MIPS消耗
-) 保持適度的靈活性,保留靈活配置能力、調(diào)試能力、工程打補(bǔ)丁能力和后續(xù)升級能力
聽起來似乎是相互矛盾的,這就是芯片設(shè)計(jì)的現(xiàn)實(shí),沒有完美的解決方案,只有根據(jù)自己根據(jù)需求理解和工作經(jīng)驗(yàn)進(jìn)行的trade off,需要找到的永遠(yuǎn)是最合適的解決方案,而不是最好的解決方案或者某個(gè)維度最優(yōu)的解決方案
3. 定義軟硬件接口
作為干過HWA和SOC、Modem和AP、硬加速和SDR的人,有時(shí)候比較驚訝的發(fā)現(xiàn)自己和很多兄弟對軟硬件接口設(shè)計(jì)的理解是如此不同的,這也是我寫這篇文章的主要目的,好好講講我理解的軟硬件接口。
于我而言,軟硬件接口設(shè)計(jì)是否合適,是芯片設(shè)計(jì)是否成功的關(guān)鍵因素。一般來說,軟硬件接口的設(shè)計(jì)原則如下:
-) 極致的PPA并不是最優(yōu)的追求,特別是最優(yōu)的area和power,往往意味著普通的performance和極度緊繃的彈性。以成本為目標(biāo)的設(shè)計(jì),是工程師最偷懶的考量,很直接也很明確卻往往不是本質(zhì)。
-) 保留適當(dāng)?shù)撵`活度,是軟硬件接口的更高原則。首先,合適的靈活接口設(shè)計(jì)和HWA硬對接設(shè)計(jì)的PPA整體在相同的量級;其次,靈活設(shè)計(jì)帶來的time2market能力和軟件work around能力,是更重要的事情。“軟件能繞開的事情,不管多么復(fù)雜,都不能算ASIC bug”
常見的軟硬件接口有4種,后續(xù)再詳細(xì)介紹
-) “單步”
-) “pingpong”
-) “批處理”
-) “B&Q MAN”
4. 定義外部接口、block劃分和block之間的接口
解耦,解耦,解耦,關(guān)鍵的問題要說三遍。一個(gè)不懂的解耦的工程師,不管年紀(jì)多大,永遠(yuǎn)是Junior Engineer。實(shí)際上從芯片級到RTL代碼級,都需要很明確的思考清楚如何做好解耦,功能解耦、電源域解耦、時(shí)鐘域解耦、幾十行的寄存器級代碼解耦。遺憾的是,這一兩年來發(fā)現(xiàn)外面似乎并不理解如何解耦,所以這種模塊劃分甚至端口定義的工作,都成了架構(gòu)設(shè)計(jì)的一部分