引言
隨著人工智能和5G的興起,數(shù)據(jù)處理對(duì)芯片的算力和帶寬要求更高。為了布局未來,助力人工智能和5G,賽靈思也推出了自己的FPGA加速芯片-ACAP。ACAP是一款基于7nm工藝,集成了通用處理器(PS),F(xiàn)PGA(PL),math engine以及network-on-chip的革命性芯片。特別是新增的ME結(jié)構(gòu),是一個(gè)類似于GPU的多核并發(fā)計(jì)算單元,可以大大提高數(shù)據(jù)處理能力。同時(shí)ME支持軟件語言C,C++,這有利于擴(kuò)大FPGA的使用用戶,同時(shí)方便了設(shè)計(jì)開發(fā)。
ME結(jié)構(gòu)簡介
ME結(jié)構(gòu)由很多ME核組成的二維陣列結(jié)構(gòu),核之間可以實(shí)現(xiàn)數(shù)據(jù)通信。ME陣列通過NoC可以和PL以及PS端進(jìn)行通信,NoC是一種互聯(lián)總線,其提供了ME陣列到PL側(cè)的高帶寬通路。ME核包含了BRAM,DSP以及控制邏輯。ME具有以下特點(diǎn):
1)? 有一個(gè)RISC處理器,能夠支持32bit標(biāo)量數(shù)據(jù)運(yùn)算,包括sin/cos,開方,乘法等操作;
2)? 向量乘法計(jì)算單元。這是一個(gè)由DSP組成的陣列,能夠支持32個(gè)16bitx8bit,64個(gè)16x8bit,128個(gè)8x8bit計(jì)算。還支持8個(gè)單精度乘法計(jì)算;
3)? 指令控制結(jié)構(gòu)支持load和save,向量乘法等操作,這些操作統(tǒng)一用一個(gè)指令字段描述;
4)? 含有多路AXI stream,可以實(shí)現(xiàn)高速數(shù)據(jù)通信;
5)? 含有一個(gè)128bit寬1K深的程序存儲(chǔ)器,支持指令壓縮,可通過AXI-MM進(jìn)行配置;
6)? 含有多個(gè)數(shù)據(jù)存儲(chǔ)器,分成多個(gè)bank,共有32KB容量;
7)? 含有配置接口,用于ME核的配置和調(diào)試;
8)? 含有debug/trace/profile功能,用于程序追蹤和調(diào)試;
ME核的工作頻率達(dá)到1GHz,電壓0.7V,具有較低功耗。ME支持多種形式的數(shù)據(jù)傳送,包括AXI-MM,AXI-stream,以及ME之間共享的bank進(jìn)行數(shù)據(jù)直接交互。
為了保證性能的可預(yù)測性,ME之間數(shù)據(jù)通信不存在緩存一致性。但是ME和PS之間通信是需要緩存一致性功能的,ME和PS端共享DDR中一段內(nèi)存。當(dāng)PS處理完數(shù)據(jù)發(fā)送給ME時(shí),是要保證處理的數(shù)據(jù)都已經(jīng)存儲(chǔ)到DDR中了。而ME處理完數(shù)據(jù)寫到DDR中后,也要讓PS知道數(shù)據(jù)已經(jīng)寫完。ME可以使用虛擬地址去訪問PS的存儲(chǔ)或者DDR,ME地址會(huì)經(jīng)過PS端的MMU進(jìn)行解析。
為了保證某些過程的安全性(比如對(duì)TrustZone的保護(hù),或者防止ME陣列的重要信息被讀?。?,ME提供了一些保護(hù)措施。主要包括對(duì)ME訪問的保護(hù),AXI-MM傳輸?shù)陌踩员Wo(hù),AXI-stream數(shù)據(jù)訪問的保護(hù)等。
ME陣列可以在功能上被分割成多個(gè)子陣列使用,這可以用于一些需要ME陣列完成多種功能的任務(wù)。其中ME核,AXI-stream,數(shù)據(jù)存儲(chǔ)訪問等模塊都可以被分割。只有AXI-MM不能被分割。NoC中可以支持對(duì)控制信息的修改,從而可以給不同子陣列發(fā)送不同的控制信息。每個(gè)ME核含有256Kb的數(shù)據(jù)存儲(chǔ)器和128Kb的程序存儲(chǔ)器,對(duì)于一個(gè)300個(gè)ME核的芯片就含有77Mb數(shù)據(jù)存儲(chǔ)和38Mb程序存儲(chǔ),這么大的空間,保證數(shù)據(jù)準(zhǔn)確性是很關(guān)鍵的。因此不論是數(shù)據(jù)存儲(chǔ)器還是程序存儲(chǔ)器都提供了ECC校驗(yàn),以防止軟件錯(cuò)誤產(chǎn)生的數(shù)據(jù)錯(cuò)誤問題。程序存儲(chǔ)器每144bit包含128bit有效數(shù)據(jù)和8bitECC校驗(yàn)位。8bit校驗(yàn)位可以在每64bit數(shù)據(jù)中糾正1bit數(shù)據(jù)和檢測出2bit數(shù)據(jù)錯(cuò)誤。存儲(chǔ)數(shù)據(jù)出錯(cuò)會(huì)生成錯(cuò)誤事件,反饋給debug或者profile模塊報(bào)告這些錯(cuò)誤。
ME陣列被分配了4個(gè)1GB的地址映射區(qū)域,目前芯片只有一個(gè)ME陣列,所以只使用了1GB地址映射空間。ME的地址含有整體陣列的offset,陣列的行列編號(hào),以及ME核中存儲(chǔ)地址。這些信息可以確定往哪個(gè)ME中的存儲(chǔ)位置讀寫數(shù)據(jù)。
ME中有4個(gè)時(shí)鐘:ME核時(shí)鐘,高頻,可到1GHz,用于ME中的數(shù)據(jù)傳輸和運(yùn)算。NoC時(shí)鐘,數(shù)據(jù)時(shí)鐘,用于從PL到ME的數(shù)據(jù)輸送。PL側(cè)時(shí)鐘以及NPI時(shí)鐘,NPI時(shí)鐘用于調(diào)試追蹤等。
數(shù)據(jù)傳輸結(jié)構(gòu)
為了保證不同設(shè)備之間的數(shù)據(jù)交換,我們需要滿足兩個(gè)條件:一個(gè)是數(shù)據(jù)實(shí)際的流通,這個(gè)包含數(shù)據(jù)傳輸通路和數(shù)據(jù)存儲(chǔ);當(dāng)然也不必包含有存儲(chǔ),流水線處理的數(shù)據(jù)只有數(shù)據(jù)流通;另外一個(gè)是發(fā)送者和收發(fā)者之間的同步。接受者接收數(shù)據(jù)只有在發(fā)送者發(fā)出數(shù)據(jù)之后,同時(shí)發(fā)送者發(fā)送數(shù)據(jù)必須等接受者準(zhǔn)備好接收數(shù)據(jù)。因此一些同步信號(hào)是必須的。
ME陣列中能夠?qū)崿F(xiàn)數(shù)據(jù)交互的設(shè)備有:
1)? 本地存儲(chǔ)bank。每個(gè)ME包含8個(gè)bank,這些bank可以用于和周圍4個(gè)ME進(jìn)行數(shù)據(jù)通信。ME通過load和save指令來讀寫本地存儲(chǔ)器。如果ME的寫和另外一個(gè)ME的讀同時(shí)發(fā)生,可以通過ping/pong操作同步。
2)? Stream-network可用于所有ME之間數(shù)據(jù)交互。而且stream本身是具有同步信號(hào)的,所以無需增加額外同步信號(hào)。
3)? AXI-MM接口能夠用于ME和PL端甚至是外部存儲(chǔ)器進(jìn)行通信。
保證數(shù)據(jù)同步的裝置有:
1)? ME本地原子鎖。這個(gè)鎖可以保證生產(chǎn)者和消費(fèi)者的數(shù)據(jù)訪問沖突解決。如果鎖被置為1,表示可以被讀,如果為0表示可以寫。
2)? Shim-DMA鎖。用于同步不同DMA通道,或者DMA通道和AXI-MM通道;
3)? 信號(hào)量機(jī)制。對(duì)于ME和PS端的數(shù)據(jù)通信,還可以通過軟件層次的信號(hào)量機(jī)制來進(jìn)行同步,因?yàn)镻S端可以通過AXI-MM接口實(shí)現(xiàn)和ME之間的數(shù)據(jù)同步;
4)? Stream網(wǎng)絡(luò)自身附帶的同步特性,用于不同ME之間交換數(shù)據(jù)。
PL和ME由于處于不同時(shí)鐘區(qū)域,ME是高頻時(shí)鐘,而PL側(cè)時(shí)鐘頻率較低。為了實(shí)現(xiàn)數(shù)據(jù)跨時(shí)鐘域傳輸,芯片提供了shim接口,shim中含有異步FIFO。FPGA可以以64bit或者32bit將數(shù)據(jù)寫入FIFO,而ME將FIFO中數(shù)據(jù)讀出進(jìn)行運(yùn)算。ME獲得數(shù)據(jù)有兩種方式,一種是通過DMA將數(shù)據(jù)讀出寫入到ping/pong buffer,這樣可以實(shí)現(xiàn)ME核中兩個(gè)函數(shù)的計(jì)算任務(wù)。如果ME中不需要ping/pong操作,可以不同各國DMA將數(shù)據(jù)存儲(chǔ)到buffer。可以從stream直接獲得數(shù)據(jù)進(jìn)行計(jì)算。
接下來我們看看ME內(nèi)部數(shù)據(jù)如何通信:
1)? ME內(nèi)部不同操作之間可以使用shared memory來進(jìn)行數(shù)據(jù)交互,但是每次只允許一個(gè)操作來訪問shared memory,即讀寫無法同時(shí)進(jìn)行;
2)? 兩個(gè)相鄰ME可以通過shared memory來進(jìn)行數(shù)據(jù)交互,通過ping/pong buffer可以實(shí)現(xiàn)一個(gè)寫一個(gè)讀;
3)? 對(duì)于不相鄰的ME,也可以使用ping/pong buffer。但是這個(gè)時(shí)候ME無法直接去訪問另外一個(gè)ME的存儲(chǔ),但是每個(gè)ME都可以建立自己的ping/pong buffer,這兩組buffer可以通過DMA進(jìn)行數(shù)據(jù)交互;
4)? 不同的ME之間還可以通過AXI-stream接口進(jìn)行數(shù)據(jù)交互;
5)? 有時(shí)候一個(gè)大型計(jì)算要在幾個(gè)ME之間完成,這就需要不同ME之間進(jìn)行高速數(shù)據(jù)通信,相鄰的ME之間還有級(jí)聯(lián)總線,可以實(shí)現(xiàn)兩個(gè)ME之間的累加運(yùn)算,這個(gè)總線位寬達(dá)到384bit;
6)? ME還可以直接從外部存儲(chǔ)器中獲得數(shù)據(jù),它將數(shù)據(jù)請(qǐng)求包發(fā)送給ME-shim,這個(gè)請(qǐng)求包含有包頭和數(shù)據(jù)請(qǐng)求信息,包頭中有原和目的地址,數(shù)據(jù)請(qǐng)求中含有數(shù)據(jù)長度信息。
審核編輯:劉清
評(píng)論
查看更多