<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 設計大吞吐量、實(shí)時(shí)SoC系統的最佳實(shí)踐

設計大吞吐量、實(shí)時(shí)SoC系統的最佳實(shí)踐

作者: 時(shí)間:2016-10-16 來(lái)源:網(wǎng)絡(luò ) 收藏

現代SoC軟件通常包括多種應用,從汽車(chē)發(fā)動(dòng)機控制等硬件實(shí)時(shí)應用,到HD視頻流等大吞吐量應用。隨著(zhù)現代SoC向大吞吐量系統的快速發(fā)展,處理器內核數量不斷增加,寬帶互聯(lián)也越來(lái)越多,導致混合系統設計成為挑戰。在這類(lèi)系統中實(shí)現硬件實(shí)時(shí)—μs量級響應,抖動(dòng)不到1μs,需要仔細的綜合考慮分析和系統劃分。隨著(zhù)SoC的復雜度越來(lái)越高,將來(lái)的驗證策略也必須納入考慮范圍。

本文引用地址:http://dyxdggzs.com/article/201610/308406.htm

這類(lèi)系統設計主要有三種方法—非對稱(chēng)多處理(AMP)、管理程序,以及支持內核隔離的對稱(chēng)多處理(SMP)(主要的對比見(jiàn)表1),系統設計人員可以從中選擇一種方法來(lái)優(yōu)化混合SoC系統。

非對稱(chēng)多處理

AMP實(shí)際是基于物理上不同的處理器內核的多操作系統(OS)端口。一個(gè)例子是,在第一個(gè)內核上運行專(zhuān)門(mén)用于處理實(shí)時(shí)任務(wù)的裸金屬OS,在其他內核上運行嵌入式Linux等完整的OS。很多時(shí)候,最初將OS導入到內核中非常簡(jiǎn)單,但是,在啟動(dòng)代碼和資源管理上很容易出錯,例如,存儲器、高速緩存和外設等。當多個(gè)OS訪(fǎng)問(wèn)相同的外設時(shí),行為會(huì )是不確定的,調試起來(lái)可能非常耗時(shí)。通常要求仔細的保護ARM TrustZone等體系結構不受影響。

更復雜的是,在OS之間傳遞消息要求存儲器共享,一起采用其他保護手段進(jìn)行管理。不同的OS之間通常不會(huì )共享高速緩存。要通過(guò)非高速緩存區來(lái)傳遞消息,對于總體性能而言,增加了延時(shí)和抖動(dòng)。從可擴展角度看,隨著(zhù)內核數量的增加,需要進(jìn)行多次重新導入,使軟件體系結構較差。

監控程序

管理程序是直接在硬件上運行的底層軟件,在其上可管理多個(gè)獨立的OS。最初的導入與AMP相似,而其優(yōu)勢在于管理程序隱藏了資源管理和消息傳遞中不重要的細節。缺點(diǎn)是由于吞吐量和實(shí)時(shí)性能要求,增加了額外的軟件層,導致出現性能開(kāi)銷(xiāo)。

對稱(chēng)多處理

支持內核隔離的SMP在多個(gè)內核上運行一個(gè)OS,支持在內部劃分內核。一個(gè)例子是讓SMP OS在第一個(gè)內核上分配實(shí)時(shí)應用程序,在其他的內核上運行非實(shí)時(shí)應用程序。隨著(zhù)內核數量的增加,SMP OS可以設計無(wú)縫導入,因此,這一方法的可擴展性比較好。所有內核都是由一個(gè)OS管理的,因此,內核之間可以在L1數據高速緩存級上傳遞消息,通信速度更快,抖動(dòng) 更低。

通過(guò)內核隔離,可以保留一個(gè)內核用于硬件實(shí)時(shí)應用,以屏蔽其他大吞吐量?jì)群说挠绊?,保持了低抖?dòng)和實(shí)時(shí)數據響應。這樣,設計人員可以考慮使用哪一個(gè)OS,而不用重新設計容易出錯的底層軟件來(lái)管理多個(gè)OS。因此,這一般是很好的軟件體系結構決定。如果從多個(gè)OS開(kāi)始,最初的導入會(huì )需要一些付出。但是,從一個(gè)SMP體系結構開(kāi)始會(huì )省很多事。

通過(guò)SMP優(yōu)化大吞吐量、實(shí)時(shí)SoC

基于對各種方法的分析,支持內核隔離的SMP是最好的體系結構,優(yōu)化了大吞吐量、實(shí)時(shí)SoC系統。我們考慮的體系結構與圖3的系統相似,其中,I/O數據輸入到SoC中,處理器對其進(jìn)行計算,送回至I/O,滿(mǎn)足低抖動(dòng)和低延時(shí)實(shí)時(shí)響應要求。此外,SoC包括了多個(gè)內核,可同時(shí)運行其他吞吐量較大的應用程序。

首先,需要理解一個(gè)實(shí)時(shí)響應(循環(huán)時(shí)間)由哪些組成:

1.從一個(gè)I/O,將新數據傳送至系統存儲器(DMA)。

2.處理器探測系統存儲器中的新數據 (內核隔離)。

3.將數據復制到私有存儲器(memcpy)。

4.對數據進(jìn)行計算。

5.將結果復制回系統存儲器(memcpy)。

6.將結果傳送回I/O(DMA)。

抖動(dòng)和延時(shí)是6個(gè)步驟的累積,因此,需要優(yōu)化每一個(gè)步驟。采用支持內核隔離的VxWorks等RTOS,可以在納秒范圍內完成輪詢(xún)/中斷響應(步驟2)。數據計算也是專(zhuān)用的,具有很好的可預測性(步驟4)。因此,我們的重點(diǎn)是綜合考慮直接存儲器訪(fǎng)問(wèn)(DMA)和memcpy(步驟1/3/5/6)。主要有兩種方法來(lái)傳送數據:高速緩存連續傳送,以及不支持高速緩沖連續的傳送。這兩種方法在DMA和memcpy上的響應有很大的不同。如圖1所示,雖然高速緩存連續傳送(使用ARM高速緩存連續端口(ACP))導致DMA需要較長(cháng)的通路,但處理器只需要訪(fǎng)問(wèn)L1高速緩存就可以獲得所傳送的數據。因此,使用高速緩存連續傳送的memcpy時(shí)間要少很多,但是DMA性能會(huì )有些劣化。對于設計人員而言,由于是直接高速緩存訪(fǎng)問(wèn),因此,高速緩存連續傳送的延時(shí)更短,抖動(dòng) 更小。

案例研究:SoC設計最佳實(shí)踐

可以使用Cyclone V SoC FPGA開(kāi)發(fā)套件,通過(guò)參考設計來(lái)演示一個(gè)完整的系統。器件在一個(gè)芯片中包括了一個(gè)雙核32ARM Cortex-A9內核子系統(HPS)和一個(gè)28nm FPGA。下面總結了硬件和軟件體系結構,如圖2所示。

硬件體系結構

·兩個(gè)DMA,將數據從FPGA I/O傳送至ARM處理器,反之亦然。

·兩個(gè)DMA都連接至ACP,實(shí)現數據在A(yíng)RM處理器高速緩存的直接傳送。

·實(shí)時(shí)控制單元IP,以盡可能快的方式啟動(dòng)ARM處理器和DMA引擎之間的消息傳遞。

·抖動(dòng)監視器直接探測DMA信號,采集實(shí)時(shí)性能和抖動(dòng),精度在±6.7ns以?xún)取?/p>

軟件體系結構

·在雙核ARM處理器上的VxWorks實(shí)時(shí)OS運行在SMP模式下。

·內核隔離,用于在第一個(gè)內核上分配實(shí)時(shí)應用程序,在第二個(gè)內核上分配其他的非 實(shí)時(shí)應用程序。

·實(shí)時(shí)應用程序連續從I/O讀取數據,計算,然后將結果發(fā)送回I/O。

·當連續運行FTP傳輸并對數據加密時(shí),非實(shí)時(shí)應用程序加重了對ARM內核和其它 I/O性能的要求。

結果

在長(cháng)度不同的數據上運行實(shí)驗,長(cháng)度從32 字節直至2,048字節。為了采集循環(huán)時(shí)間的直方圖,來(lái)分析抖動(dòng)(最大和最小循環(huán)時(shí)間之間的不同),每一長(cháng)度都要運行數百萬(wàn)次。如圖3所示,即使是在第二個(gè)內核上運行數據流負載很大的FTP,經(jīng)過(guò)數百萬(wàn)次的測試,延時(shí)也在微秒級,而抖動(dòng)不到300ps。長(cháng)度不同,會(huì )有些抖動(dòng)擺動(dòng),但是可控制在200ps內,并不明顯。

相同的FTP應用程序也運行在VxWorks SMP上,使用了兩個(gè)內核,速度提高了近2倍。因此,這一方法并沒(méi)有劣化吞吐量,是吞吐量和硬件實(shí)時(shí)應用程序的折中選擇。但是,由于對內核進(jìn)行了硬件劃分,不能夠靈活的增加內核數,因此,AMP解決方案也同樣有一些劣化。

結論

設計一個(gè)支持大吞吐量和實(shí)時(shí)應用程序的均衡SoC系統需要進(jìn)行很多綜合考慮,例如:

·DMA數據傳送。

·連續高速緩存。

·處理器內核與DMA之間的消息傳遞。

·OS劃分。

·軟件能夠隨著(zhù)處理器內核數量的增加而進(jìn)行擴展。

在此次實(shí)驗中,我們展示了一個(gè)“最佳實(shí)踐”系統設計,它使用了支持內核隔離和高速緩存連續傳送的SMP,實(shí)現了低延時(shí)、低抖動(dòng)實(shí)時(shí)性能,同時(shí)軟件能夠擴展應用到未來(lái)幾代的SoC產(chǎn)品中。



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>