時(shí)隔一年,終于有機(jī)會(huì)再攢一顆芯片
記得兩年前
全球范圍內(nèi),汽車芯片一年銷售額大致是400億刀,其中數(shù)字芯片100億刀:信息娛樂(lè)(中控)芯片約25億刀,均價(jià)在25刀;MCU約60億刀,30億片,均價(jià)2刀;輔助駕駛約17億刀。全球一年大約賣一億輛車,每輛車平均100刀的數(shù)字芯片。其中輔助駕駛芯片處于快速增長(zhǎng)階段。汽車芯片的主要供應(yīng)商,恩智浦,瑞薩數(shù)字部分較多,英飛凌,德州儀器模擬部分較多。汽車芯片是僅存的幾個(gè)利潤(rùn)還不錯(cuò)的市場(chǎng),技術(shù)門檻也并非不可逾越
新一代的中控芯片的架構(gòu)如下圖
虛擬化在硬件上有什么具體要求?這并沒有明確定義
Arm傳統(tǒng)的設(shè)計(jì)是添加足夠大的多級(jí)TLB緩存和table walk緩存
怎么解決這個(gè)問(wèn)題?在Arm服務(wù)器以及下一代手機(jī)芯片參考設(shè)計(jì)中
Arm的SMMU600還做了一點(diǎn)改進(jìn),可以把TLB緩存貼近各個(gè)主設(shè)備做布局,在命中的情況下,一個(gè)時(shí)鐘周期就可以完成翻譯;同時(shí),把table walk緩存放到另一個(gè)地方,TLB緩存和table walk緩存通過(guò)內(nèi)部總線互聯(lián)。幾個(gè)主設(shè)備可以同時(shí)使用一個(gè)table walk緩存,減少面積,便于布線的同時(shí),又不失效率。其結(jié)構(gòu)如下圖:
對(duì)于當(dāng)前的汽車芯片,如果沒有系統(tǒng)緩存,那如何減少設(shè)備虛擬化延遲呢?辦法也是有的。汽車的虛擬機(jī)應(yīng)用較為特殊,目前8個(gè)虛擬機(jī)足夠應(yīng)付所有的分屏和多系統(tǒng)需求,并且一旦分配,運(yùn)行階段無(wú)需反復(fù)刪除和生成。我們完全可以利用這點(diǎn),把二階段的SMMU頁(yè)表變大,比如1GB,固定分配給某個(gè)虛擬機(jī)。這樣,設(shè)備在進(jìn)行二階段地址映射時(shí),只需少數(shù)幾項(xiàng)TLB表項(xiàng),就可以做到一直命中,極大降低延遲。需要注意的是,一旦把二階映射的物理空間分配給某設(shè)備,就不能再收回并分給其他設(shè)備。不然,多次回收后,就會(huì)出現(xiàn)物理地址離散化,無(wú)法找到連續(xù)的大物理地址了。
SMMU接受的是從主設(shè)備發(fā)過(guò)來(lái)的物理地址,那它是怎么來(lái)區(qū)分虛擬機(jī)呢?靠的是同樣從主設(shè)備發(fā)送過(guò)來(lái)的vmid/streamid。如果主設(shè)備本身并不支持虛擬化,那就需要對(duì)它進(jìn)行時(shí)分復(fù)用,讓軟件來(lái)寫入vmid/streamid。當(dāng)然,這個(gè)軟件必須運(yùn)行在hypervisor或者是secure monitor,不然會(huì)有安全漏洞。具體的做法,是在虛擬機(jī)切換的時(shí)候,hypervisor修改寄存器化的vmid/streamid,提供輸入給SMMU即可
如果主設(shè)備要實(shí)現(xiàn)硬件的方式支持虛擬化
如果主設(shè)備本身不支持虛擬化,并且本身特別復(fù)雜,那還需要定制驅(qū)動(dòng)。以Arm的圖形處理器為例,到目前為止,硬件上還沒有正式支持虛擬化,如果軟件要支持,可能會(huì)有以下幾種方案:
假設(shè)我們用的Hypervisor是Xen,它運(yùn)行于Arm處理器的EL2,虛擬機(jī)運(yùn)行于EL0/1。正常的圖形處理器驅(qū)動(dòng)會(huì)分成用戶空間與核心空間兩部分。要實(shí)現(xiàn)虛擬化,時(shí)分復(fù)用圖形處理器,Xen上本身不可能跑驅(qū)動(dòng),因?yàn)槟壳膀?qū)動(dòng)只支持Linux。所以就只能讓虛擬機(jī)來(lái)跑原先的驅(qū)動(dòng),而沒有辦法在hypervisor上再運(yùn)行一個(gè)驅(qū)動(dòng)來(lái)進(jìn)行訪問(wèn)控制。同時(shí),重映射圖形處理器在CPU上的二階段地址
Arm現(xiàn)有的中斷控制器GIC600
Armv8.1及之后的CPU,都支持一個(gè)叫VHE的機(jī)制
對(duì)于1型虛擬機(jī),比如Xen
前面說(shuō)到,有些廠商認(rèn)為虛擬化還不夠
同樣的
有了同時(shí)支持虛擬化和硬件隔離的圖形處理器,我們的中控芯片構(gòu)架會(huì)有如下改動(dòng):
至此,虛擬化和隔離結(jié)束,開始討論車規(guī)。
目前我們說(shuō)的車規(guī)分兩個(gè),功能安全和電氣標(biāo)準(zhǔn)。前者由ISO26262定義,后者由AEC-Q100定義。
功能安全在芯片上的設(shè)計(jì)原則是要盡可能多的找出芯片上的失效場(chǎng)景并糾正。失效又分為系統(tǒng)和隨機(jī)兩種,前者依靠設(shè)計(jì)時(shí)的流程規(guī)范來(lái)保證,后者依賴于芯片設(shè)計(jì)上采取的種種失效探測(cè)機(jī)制來(lái)保證。我們?cè)谶@主要談后者。
簡(jiǎn)單來(lái)說(shuō),芯片的失效率,是基于單個(gè)晶體管在某個(gè)工藝節(jié)點(diǎn)的失效概率,推導(dǎo)出片上邏輯或者內(nèi)存的失效概率。面積越大,晶體管越多,相應(yīng)的失效率越大。ISO26262把安全等級(jí)做了劃分,常見的有ASIL-B和ASIL-D級(jí)。ASIL-B要求芯片能夠覆蓋90%的單點(diǎn)失效場(chǎng)景,而ASIL-D則是99%。這其實(shí)是個(gè)非常高的要求。一個(gè)晶體管的失效概率雖低,可是通常一個(gè)復(fù)雜芯片是上億個(gè)晶體管組成的,如果不采取任何措施,那任何一點(diǎn)的錯(cuò)誤都可能造成功能失效,失效率很高。
ISO26262手冊(cè)第五篇的附件D,詳細(xì)描述了硬件失效的探測(cè)手段。在這部分,硬件系統(tǒng)被分為幾個(gè)模塊:輸入端有傳感器,連接件,中繼,數(shù)模接口;處理部分包含處理單元,各類內(nèi)存閃存。系統(tǒng)層面有總線,電源和時(shí)鐘。系統(tǒng)框架如下圖:
針對(duì)每一單元,ISO26262手冊(cè)定義了一些方法,來(lái)檢測(cè)這些單元是否失效,并給出每一種方法的可靠度。比如傳輸線,可以有校驗(yàn)碼,超時(shí),計(jì)數(shù)器,發(fā)送測(cè)試向量等。再比如處理單元,可以使用軟硬件自檢,冗余加比較,額外硬件模塊監(jiān)測(cè)等方法。這些方法并不能簡(jiǎn)單的應(yīng)用于芯片功能安全設(shè)計(jì)。那芯片上怎么辦?我們采用自底向上的方法,先從晶體管開始分析,再到IP模塊級(jí),然后到芯片系統(tǒng)級(jí),再討論幾個(gè)典型場(chǎng)景,最后自頂向下分析
在芯片的隨機(jī)錯(cuò)誤中,有一類是永久錯(cuò)誤
上圖是一個(gè)典型的汽車電子系統(tǒng)框架。這個(gè)系統(tǒng)分為幾個(gè)域
先說(shuō)虛擬化
如上圖黃色框所示
當(dāng)處理器發(fā)起一次地址虛實(shí)轉(zhuǎn)換請(qǐng)求,內(nèi)存管理單元會(huì)在內(nèi)部的TLB緩存和Table Walk緩存查找最終頁(yè)表項(xiàng)和中間表項(xiàng)
這是啟用2階地址映射后的實(shí)測(cè)結(jié)果,其各項(xiàng)緩存大小均配置成較大,然后把兩個(gè)主設(shè)備連到接口,進(jìn)行地址較為隨機(jī)的訪問(wèn)?div id="4qifd00" class="flower right">
如果我們讀一下Arm的SMMU3.x協(xié)議,會(huì)發(fā)現(xiàn)它是支持雙向頁(yè)表維護(hù)信息廣播的,這意味著除了緩存數(shù)據(jù)一致性外,所有的主設(shè)備,只要遵循SMMU3.x協(xié)議,可以和處理器同時(shí)使用一張頁(yè)表。在輔助駕駛芯片設(shè)計(jì)時(shí),如果需要,把重要的加速器加入同一張頁(yè)表,可以避免軟件頁(yè)表更新操作,進(jìn)一步提高異構(gòu)計(jì)算的效率。不過(guò)就SMU600而言
這個(gè)實(shí)現(xiàn)的優(yōu)點(diǎn)很明顯
在這種實(shí)現(xiàn)下
Arm支持硬件虛擬化的圖形處理器估計(jì)還要一年才會(huì)出來(lái)
關(guān)于虛擬機(jī)的效率
此時(shí)的處理器A55和圖形處理器G31,獨(dú)立于作為信息娛樂(lè)域的處理器A76/A55和圖形處理器G76之外,擁有自己的電源,時(shí)鐘和電壓。作為優(yōu)化,紅色部分可以和其余的處理器用一致性總線連接起來(lái),在不作為儀表盤應(yīng)用的時(shí)候,作為SMP的一部分來(lái)使用。而需要隔離的時(shí)候,用多路選擇連接到NoC或者內(nèi)存控制器
由于圖形處理器面積最大的是渲染核心SC
此時(shí)圖形處理器的物理隔離和硬件虛擬化可以同時(shí)啟用,跑多份驅(qū)動(dòng),滿足前文的需求。