欧美性猛交内射兽交老熟妇_久久精品网站免费观看_国产亚洲精品拍拍拍拍拍_精品久久国产综合婷婷五月

今天是2024年9月11日 星期三,歡迎光臨本站 宜訊汽車裝備(上海)有限公司 網址: staf27.com

行業動態

必讀,汽車芯片設計指南

文字:[大][中][小] 2019-5-7    瀏覽次數:1890    

時隔一年,終(zhong)于有(you)機會再攢一顆芯片。這一次,是熱(re)點中的汽車芯片。

 

記得兩年前,在(zai)中國找(zhao)不(bu)出幾家做前裝汽車芯片的(de)(de)公司。而兩年后的(de)(de)今天,突然如雨后春筍(sun)般(ban)的(de)(de)涌(yong)現出十多家,其(qi)范圍(wei)涵蓋了輔助駕駛,中控,儀表盤,T-Box,網關,車身控制,電池管理,硬件加解密,激光雷達,毫米波雷達,圖像傳感器和圖像信號處理器等,八仙過海各顯神通。

 

全球范圍(wei)內,汽車芯片一年銷售(shou)額大(da)致是400億刀,其中數字芯片100億刀:信息娛樂(中控)芯片約25億刀,均價在25刀;MCU約60億刀,30億片,均價2刀;輔助駕駛約17億刀。全球一年大約賣一億輛車,每輛車平均100刀的數字芯片。其中輔助駕駛芯片處于快速增長階段。汽車芯片的主要供應商,恩智浦,瑞薩數字部分較多,英飛凌,德州儀器模擬部分較多。汽車芯片是僅存的幾個利潤還不錯的市場,技術門檻也并非不可逾越,更不存在絕對的生態閉環。只是量沒有消費電子那么大,一年出個幾百萬片就不錯了。在這個領域里,新造車勢力方興未艾,傳統造車勢力追求差異化,又趕上5G,自動駕駛與人工智能的熱點,于是汽車芯片成了繼虛擬現實,礦機,NB-IOT,人工智能之后新的投資方向。


上圖是(shi)一個典型的汽(qi)車電子系統框架。這個系統分為(wei)幾個域,車身(shen),動力總成(cheng),底盤,信息娛樂,輔助駕(jia)駛,網關(guan)和T-Box。每個域有著各自的域控制器,通過車載以太網和Can總線互聯。我們就以架構上最復雜的中控和輔助駕駛芯片為例,展開探討其設計思路與方法。

 

新一代的中控芯(xin)片(pian)的架構如下(xia)圖(tu),主要由處(chu)(chu)(chu)理(li)器(qi),圖(tu)形處(chu)(chu)(chu)理(li)器(qi),多媒(mei)體(ti),圖(tu)像處(chu)(chu)(chu)理(li),安全(Security)管理,功能安全(Safety),片上調試和總線等子系統構成。它和通常的應用處理器區別主要在于虛擬化,功能安全,實時性和車規級電氣標準。



先說虛(xu)擬化(hua)。虛(xu)擬化(hua)其實是(shi)從(cong)服務器來(lai)的(de)(de)(de)概(gai)念(nian),為什(shen)么汽車也會有(you)(you)這(zhe)(zhe)個(ge)需求(qiu)?兩點原因:現在(zai)的(de)(de)(de)中(zhong)(zhong)控芯片有(you)(you)一(yi)(yi)個(ge)趨(qu)(qu)勢(shi)(shi),集(ji)成儀(yi)表(biao)盤,降低成本(ben)。以(yi)前的(de)(de)(de)儀(yi)表(biao)盤通常是(shi)用微控制器做的(de)(de)(de),圖形界面(mian)也較簡單。而現在(zai)的(de)(de)(de)系統(tong)越來(lai)越炫,甚至需要圖形處理(li)器來(lai)參與。很自然的(de)(de)(de),這(zhe)(zhe)就使得(de)中(zhong)(zhong)控和(he)儀(yi)表(biao)盤合(he)到單顆芯片內。它(ta)們(men)跑的(de)(de)(de)是(shi)不(bu)同(tong)的(de)(de)(de)操作系統(tong),虛(xu)擬化(hua)能更好的(de)(de)(de)實現軟件(jian)隔離(li)。當(dang)然,有(you)(you)些廠(chang)商認為虛(xu)擬化(hua)還不(bu)夠,需要靠物理(li)隔離(li)才放心,這(zhe)(zhe)是(shi)后(hou)(hou)話,稍(shao)后(hou)(hou)展開。另(ling)一(yi)(yi)個(ge)趨(qu)(qu)勢(shi)(shi)是(shi)中(zhong)(zhong)控本(ben)身需要同(tong)時(shi)支持多個(ge)屏(ping)幕,每個(ge)屏(ping)幕分屬于不(bu)同(tong)的(de)(de)(de)虛(xu)擬機和(he)操作系統(tong),這(zhe)(zhe)樣(yang)能簡化(hua)軟件(jian)設計,提高軟件(jian)的(de)(de)(de)可靠性。

 

虛擬化(hua)在(zai)硬(ying)件(jian)上有(you)什么具體要求?這并沒有(you)明(ming)確定(ding)義。可(ke)以依(yi)靠(kao)處理(li)器自帶的(de)二階內存管理(li)單元(yuan)(s2MMU),實現軟件虛擬機;也可以在內存控制器前放一個硬件防火墻,對訪問內存的地址進行檢查和過濾,不做地址重映射;還可以使用系統內存管理單元SMMU實現完整的硬件虛擬化,這是我們要重點介紹的。



如上圖黃色框所示,每個主(zhu)設備和總線之(zhi)間,都加(jia)了(le)一個MMU600。為什么每個主設備后都要加?很簡單,如果不加,那必然存在安全漏洞,和軟件虛擬化無異。那為何不用防火墻?防火墻的的實現方法,通常是用一個片上內存來存放過濾表項。如果做到4K字節的顆粒度,那4G字節內存就需要1百萬項,每項8位,總共1MB的片上內存,這是個不小的成本。另外一個原因是,防火墻方案的物理地址空間對軟件是不透明的,采用系統內存管理器SMMU600對上層軟件透明,更貼近虛擬化的需求。


當處理(li)器發(fa)起一次地址虛(xu)實轉換請求,內存管理(li)單元(yuan)會在內部的TLB緩存和Table Walk緩存查找最終頁表項和中間表項。如果在內部緩存沒找到,那就需要去系統緩存或者內存讀取。在最差情況下,每一階的4層中間表可能都是未命中,4x4+4=20,最終會需要20次內存讀取。對于系統內存管理器,情況可能更糟。如上圖所示,由于SMMU本身還需引入多級描述符來映射多個頁表,最極端情況需要36次的訪存才能找到最終頁表項。如果所有訪問都是這個延遲,顯然無法接受。

 

Arm傳統的設計是添加足夠大的多級TLB緩存和table walk緩存,效果如(ru)下(xia):



這是啟(qi)用(yong)2階地址映射后的實測結果,其各項緩存大小均配置成較大,然后把兩個主設備連到接口,進行地址較為隨機的訪問。可以看到,主設備的5萬次訪問,在經過SMMU后,產生了近5萬次未命中。這意味著訪問的平均延遲等于訪存延遲,150ns以上。另一方面,處理器開了虛擬機后,它的隨機訪存效率,和未開虛擬機比,卻能做到80%以上,這是為什么呢?答案很簡單,處理器內部的MMU,會把中間頁表的物理地址繼續發到二級或者三級緩存,利用緩存來減少平均延遲。而SMMU就沒有這么幸運,在Arm先前的手機處理器參考設計中,并沒有系統緩存。這種情況下,即使對于延遲不太敏感的主設備,比如圖形處理器,打開虛擬化也會造成性能損失,可能高達9%,這不是一個小數目。

 

怎么解決這(zhe)個問題?在(zai)Arm服務器以及下一代手機芯片參考設計中,會引入網狀結構總線,而不是之前的crossbar結構的一致性總線。網狀結構總線的好處,主要是提升了頻率和帶寬,并且,在提供多核一致性的同時,也可以把系統緩存交給各個主設備使用。不需要緩存的主設備還是可以和以前一樣發出非緩存的的數據傳輸,避免額外占用緩存,引起頻繁的緩存替換;同時,SMMU可以把頁表和中間頁表項放在緩存,從而縮短延遲。

 

Arm的SMMU600還做了一(yi)點改(gai)進,可(ke)(ke)以把(ba)TLB緩(huan)存貼近各個主設備做布局(ju),在(zai)命中的情況(kuang)下(xia),一(yi)個時(shi)(shi)鐘周期就(jiu)可(ke)(ke)以完成翻(fan)譯;同(tong)時(shi)(shi),把(ba)table walk緩(huan)存放到(dao)另一(yi)個地方(fang),TLB緩(huan)存和table walk緩(huan)存通過(guo)內部總線(xian)互聯。幾個主設備可(ke)(ke)以同(tong)時(shi)(shi)使用一(yi)個table walk緩(huan)存,減少面(mian)積(ji),便于布線(xian)的同(tong)時(shi)(shi),又不失效(xiao)率。其(qi)結構(gou)如下(xia)圖:



如(ru)果我們讀一下Arm的SMMU3.x協議,會發現它是支持雙向頁表維護信息廣播的,這意味著除了緩存數據一致性外,所有的主設備,只要遵循SMMU3.x協議,可以和處理器同時使用一張頁表。在輔助駕駛芯片設計時,如果需要,把重要的加速器加入同一張頁表,可以避免軟件頁表更新操作,進一步提高異構計算的效率。不過就SMU600而言,它僅僅支持單向的廣播,接了SMU600的主設備,本身的緩存和頁表操作并不能廣播到處理器,反過來是可以的。

 

對于當(dang)前的(de)(de)汽車(che)(che)芯片,如果沒(mei)有(you)系統緩存,那如何減少設(she)備虛擬化延(yan)遲呢?辦法也是有(you)的(de)(de)。汽車(che)(che)的(de)(de)虛擬機應用較為(wei)特殊,目前8個虛擬機足夠應付所有的分屏和多系統需求,并且一旦分配,運行階段無需反復刪除和生成。我們完全可以利用這點,把二階段的SMMU頁表變大,比如1GB,固定分配給某個虛擬機。這樣,設備在進行二階段地址映射時,只需少數幾項TLB表項,就可以做到一直命中,極大降低延遲。需要注意的是,一旦把二階映射的物理空間分配給某設備,就不能再收回并分給其他設備。不然,多次回收后,就會出現物理地址離散化,無法找到連續的大物理地址了。

 

SMMU接受的是(shi)(shi)(shi)從(cong)主設(she)備(bei)發過(guo)(guo)來(lai)(lai)的物理(li)地址,那(nei)它(ta)(ta)是(shi)(shi)(shi)怎么來(lai)(lai)區(qu)分(fen)虛(xu)擬(ni)(ni)機呢?靠的是(shi)(shi)(shi)同(tong)樣從(cong)主設(she)備(bei)發送過(guo)(guo)來(lai)(lai)的vmid/streamid。如果主設(she)備(bei)本身(shen)并不支持虛(xu)擬(ni)(ni)化(hua),那(nei)就(jiu)需要對它(ta)(ta)進行(xing)時分(fen)復用,讓(rang)軟件來(lai)(lai)寫(xie)入vmid/streamid。當然,這個軟件必須運(yun)行(xing)在hypervisor或者(zhe)是(shi)(shi)(shi)secure monitor,不然會(hui)有安全漏洞。具體的做法(fa),是(shi)(shi)(shi)在虛(xu)擬(ni)(ni)機切換的時候,hypervisor修改寄存器化(hua)的vmid/streamid,提(ti)供輸入給SMMU即(ji)可。如果訪問(wen)時的id和(he)預設(she)的不符,SMMU會(hui)報異常給hypervisor。

 

如果(guo)主設備要實(shi)現硬件的(de)(de)方式支持虛(xu)擬化,那本身(shen)需要根據多組(zu)寄存器設置(zhi),主動發出(chu)不同(tong)的(de)(de)vmid/streamid。為了對軟件兼容,可以把不同組按照4KB邊界分開,這樣在二階地址映射時,可以讓相同的實地址訪問不同組的寄存器,而對驅動透明。同時,對于內部的資源也要做區分,不能讓數據互相影響。如果用到緩存,那緩存還必須對vmid敏感,相同地址不同vmid的情況,必須識別為未命中。

 

如果主設備本身不(bu)支持虛擬化,并且本身特別復雜,那還需要定(ding)制(zhi)驅動。以(yi)Arm的圖形處理器為例,到目前為止,硬件上還沒有正式支持虛擬化,如果軟件要支持,可能會有(you)以下幾種(zhong)方案:

 

假設我們用的Hypervisor是Xen,它運行于Arm處理器的EL2,虛擬機運行于EL0/1。正常的圖形處理器驅動會分成用戶空間與核心空間兩部分。要實現虛擬化,時分復用圖形處理器,Xen上本身不可能跑驅動,因為目前驅動只支持Linux。所以就只能讓虛擬機來跑原先的驅動,而沒有辦法在hypervisor上再運行一個驅動來進行訪問控制。同時,重映射圖形處理器在CPU上的二階段地址,讓寄存器訪問和數據通路處于‘穿透’的模式,不引起異常,提高效率。相應的,讓虛擬機直接訪問寄存器,那訪問控制就實現不了了。為了實現多虛擬機的調度,我們可以在hypervisor里面實現一個調度器,并且在核心態的驅動部分開放接口,讓hypervisor可以主動調度。示意圖如下:


這個實(shi)現的(de)優點很(hen)明顯,改動較少(shao),實(shi)現簡單,無論是Xen和KVM都可以適配。缺點是主動權并不掌握在hypervisor,如果某個虛擬機上渲染任務過于繁重,一直不把控制權交給調度器,那只有強制重啟。另一個明顯的缺點是,無法在圖形處理器同時運行兩個虛擬機上的任務。這就需要另一種虛擬機的實現方式,如下圖:

在(zai)這(zhe)種實現下,虛擬(ni)機里只跑(pao)驅動的用(yong)戶空(kong)間,所有涉及核(he)心空(kong)間的調(diao)用(yong)全都扔到Hypervisor。這要求hypervisor本身是Linux,只有KVM符合這個要求。Arm的Mali圖形處理器,硬件上是支持指定某個渲染核心跑特定任務的,也就是可以把某個虛擬機的任務運行在特定渲染核心的。這樣,如果有實時性的操縱系統要跑,比如儀表盤,可以保留出一個核來,不被其他虛擬機搶占,來實現一定程度的QoS。此時,圖形處理器是真正同時跑兩個虛擬機任務的,而不是時分復用。至于輸出的frame buffer,不同的任務是可以放到不同物理地址的,只是沒法區分SteamID,沒法做隔離。

 

Arm支(zhi)持硬件虛(xu)擬化(hua)(hua)的(de)圖形處理(li)器估計還要一年才會(hui)出(chu)來。具體到細節(jie),虛(xu)擬化(hua)(hua)除了需要寄(ji)存(cun)(cun)器分(fen)組,緩存(cun)(cun)對vmid敏感之(zhi)外,通用的(de)一些單元也需要支(zhi)持分(fen)組。

            關于虛擬機(ji)的效率,還(huan)有兩點需要注意:

 

Arm現有的(de)中(zhong)斷(duan)(duan)(duan)控制器GIC600,受限于GICv3.x協議(yi),是沒有辦法(fa)繞過hypervisor,直接把虛(xu)擬中(zhong)斷(duan)(duan)(duan)送(song)(song)到(dao)Guest OS的(de)。外部(bu)中(zhong)斷(duan)(duan)(duan)送(song)(song)進(jin)來,還(huan)是得(de)經由hypervisor權限設置寄存器,產(chan)生一個虛(xu)擬中(zhong)斷(duan)(duan)(duan)到(dao)Guest OS。中(zhong)斷(duan)(duan)(duan)直接送(song)(song)到(dao)Guest OS要(yao)到(dao)GICv4才會改(gai)進(jin)。

 

Armv8.1及之后的(de)(de)(de)(de)CPU,都(dou)支持一(yi)個叫VHE的(de)(de)(de)(de)機制,可(ke)以(yi)加速2型虛(xu)擬(ni)機的(de)(de)(de)(de)切(qie)換(huan)。具體原理是,KVM等2型虛(xu)擬(ni)機,Hypervisor就在(zai)Linux核(he)(he)(he)心(xin)里面,而(er)Linux需要完整的(de)(de)(de)(de)2階3/4層頁表(biao)(biao)。另外一(yi)方面,Armv8.1之前的(de)(de)(de)(de)處(chu)理器EL2沒有(you)(you)對應的(de)(de)(de)(de)頁表(biao)(biao)。如果沒有(you)(you)VHE,那這個Hypervisor必須把一(yi)部分(fen)駐留在(zai)EL2做高權(quan)限操作,而(er)Host Linux還是運行在(zai)EL1。這樣(yang),很多操作需要從EL1陷(xian)入(ru)EL2,改完再回到(dao)EL1的(de)(de)(de)(de)Linux核(he)(he)(he)心(xin),多了(le)一(yi)層跳轉。有(you)(you)了(le)VHE,那么(me)Host Linux核(he)(he)(he)心(xin)直接運行在(zai)EL2,可(ke)以(yi)操作EL1的(de)(de)(de)(de)4層頁表(biao)(biao)的(de)(de)(de)(de)頁表(biao)(biao)寄(ji)存器,軟件上不用做修改。硬件上,這些訪(fang)問(wen)會被重定向到(dao)EL2,以(yi)保證權(quan)限。

 

對(dui)于1型虛擬機,比如Xen,這個改動沒有影響。這里我們要提一下QNX的虛擬機,它是1型虛擬機。QNX是目前唯一一個能達到Asil-D等級的操作系統(包含Hypervisor)。如果需要實現Asil-D級別的系統,必須把現有的軟件從Linux系統移植到QNX。所幸的是,QNX也是符合Posix標準的,尤其是圖形處理器的驅動,移植起來會省事一些。QNX不是所有的模塊都是Asil-D級,移植過去的驅動,其實是沒有安全等級的。QNX依靠Asil-D級的核心軟件模塊和Hypervisor,保證99%以上的失效覆蓋率。如果子模塊出了問題,那只能重啟子模塊。

 

前面說(shuo)到,有(you)(you)些廠(chang)商(shang)認為虛擬(ni)化還不夠(gou),有(you)(you)些場景要(yao)物理隔(ge)離。虛擬(ni)化的(de)時(shi)候(hou),硬(ying)件資源還是(shi)(shi)共享(xiang)的(de),只不過對軟(ruan)件是(shi)(shi)透明。這樣其實(shi)并(bing)不能完全防(fang)止硬(ying)件的(de)沖突(tu)和保(bao)證優先級。請(qing)注(zhu)意,硬(ying)件隔(ge)離是(shi)(shi)separation,而不是分區partition,Partition是用MPU來做的。在中控的系統框架圖內,我們把采用物理隔離的紅色部分單獨列出來,如下圖:

 



此時的處理器(qi)A55和圖形處理器G31,獨立于作為信息娛樂域的處理器A76/A55和圖形處理器G76之外,擁有自己的電源,時鐘和電壓。作為優化,紅色部分可以和其余的處理器用一致性總線連接起來,在不作為儀表盤應用的時候,作為SMP的一部分來使用。而需要隔離的時候,用多路選擇連接到NoC或者內存控制器。這樣既節省了面積,又實現了隔離。

 

同樣的,圖形處理(li)器也有(you)物理(li)隔離的需求。實現其(qi)實并不復雜,比支持(chi)硬件虛(xu)擬(ni)化要直接,如下(xia)圖:


由(you)于圖形處理器面積最大的(de)是渲染(ran)核心SC,這部分不動。其余的硬件模塊,每組核都復制一份,組和組之間用內部總線ASN互聯。當拆成多個圖形處理器的時候,每個冗余模塊分別控制自己的資源。此時,每組GPU需要獨立運行一個驅動。而把所有資源融合運行的時候,冗余的部分自動關閉,由一個模塊集中調度。此時,某些公用資源可能會遇到性能瓶頸,但汽車通常只會要求物理隔離兩個組,分別給儀表盤和信息娛樂,并且儀表盤所需資源較少,融合的時候,可以啟用信息娛樂的共享單元,從而避免瓶頸。對于系統中其余的主設備,也可以利用類似的設計思路來實現隔離。

 

有了同時支持(chi)虛擬化和硬件(jian)隔離的(de)圖形處理器,我們的(de)中(zhong)控芯片構架會有如(ru)下改動:



此時圖形處理器的(de)(de)物理隔(ge)離和硬(ying)件虛擬(ni)化可以(yi)同(tong)時啟用,跑多份驅(qu)動,滿足前文的(de)(de)需(xu)求。

 

至此,虛擬化和隔離結(jie)束,開始討論車規。

 

目前我(wo)們說的車規(gui)分兩個,功(gong)能安全和電氣標準。前者由ISO26262定義,后者由AEC-Q100定義。

 

功能安全在芯片(pian)上(shang)的(de)設計原則是要盡(jin)可能多(duo)的(de)找出芯片(pian)上(shang)的(de)失(shi)效場景并糾正。失(shi)效又分(fen)為系(xi)統和隨機兩種,前者(zhe)(zhe)依靠設計時的(de)流程規范(fan)來保證,后(hou)者(zhe)(zhe)依賴于(yu)芯片(pian)設計上(shang)采(cai)取的(de)種種失(shi)效探(tan)測機制來保證。我們在這(zhe)主要談后(hou)者(zhe)(zhe)。

 

簡單(dan)來說,芯片的(de)失(shi)效(xiao)(xiao)率(lv)(lv),是基于單(dan)個晶(jing)體管(guan)在某(mou)個工藝節點的(de)失(shi)效(xiao)(xiao)概(gai)率(lv)(lv),推導出片上邏輯或(huo)者(zhe)內存的(de)失(shi)效(xiao)(xiao)概(gai)率(lv)(lv)。面(mian)積越大(da),晶(jing)體管(guan)越多,相應的(de)失(shi)效(xiao)(xiao)率(lv)(lv)越大(da)。ISO26262把安全等級做了劃分,常見的有ASIL-B和ASIL-D級。ASIL-B要求芯片能夠覆蓋90%的單點失效場景,而ASIL-D則是99%。這其實是個非常高的要求。一個晶體管的失效概率雖低,可是通常一個復雜芯片是上億個晶體管組成的,如果不采取任何措施,那任何一點的錯誤都可能造成功能失效,失效率很高。

 

ISO26262手冊第(di)五(wu)篇(pian)的附件D,詳細描述(shu)了硬件失(shi)效(xiao)的探測(ce)手段。在這部(bu)分,硬件系統被分為幾個模塊(kuai):輸入端有傳感器,連接件,中繼(ji),數(shu)模接口(kou);處(chu)理部(bu)分包含處(chu)理單(dan)元,各類內存(cun)(cun)閃存(cun)(cun)。系統層面有總線,電源(yuan)和時鐘(zhong)。系統框架如下圖:

針對每一單元,ISO26262手冊定義了一些方法,來檢測這些單元是否失效,并給出每一種方法的可靠度。比如傳輸線,可以有校驗碼,超時,計數器,發送測試向量等。再比如處理單元,可以使用軟硬件自檢,冗余加比較,額外硬件模塊監測等方法。這些方法并不能簡單的應用于芯片功能安全設計。那芯片上怎么辦?我們采用自底向上的方法,先從晶體管開始分析,再到IP模塊級,然后到芯片系統級,再討論幾個典型場景,最后自頂向下分析。

 

在芯片(pian)的隨(sui)機錯(cuo)誤中,有一(yi)類(lei)是永久錯(cuo)誤,比如邏輯或者片(pian)上內(nei)存的某一(yi)位(wei)一(yi)直粘在0或者1,或者干脆短路及斷路。對于這一類錯誤,在芯片封測的時候,我們可以使用邊界掃描和MBIST來發現壞掉的晶體管。這樣,問題就轉換為怎樣提高DFT的覆蓋率。這一塊,業界已經有成熟的方法了。

 

僅(jin)僅(jin)有出(chu)廠測試是(shi)不夠(gou)的(de),晶(jing)體(ti)管會在使(shi)用過程中(zhong)慢(man)慢(man)老化損壞(huai)。因此(ci),我們需(xu)要(yao)在每次開機的(de)時候都(dou)進(jin)行(xing)自檢,提前(qian)發現問題,減少在系統運行(xing)狀態(tai)下出(chu)錯的(de)可能。此(ci)時,我們需(xu)要(yao)使(shi)用LBIST和MBIST。其原理和出廠測試很像,也是利用掃描鏈,不同的是芯片里需要LBIST/MBIST控制器,用來運行測試向量和模板。自然,這會引入額外的成本。覆蓋率越高,成本相應越大。

 

有了(le)LBIST/MBIST也還不夠,我們需要在晶體管失效發生后幾個時鐘周期就探測到錯誤,而不是開機時候發現。對于邏輯來說,為了做到這點,最直接的方法莫過于采用冗余設計,也就是把邏輯復制一份,然后用硬件比較器比較輸出。通常這被稱為鎖步設計(Lock-Step)。理論上,對于有限狀態機,只要輸入一致,時鐘周期一致,輸出一定一致。通常數字部分不存在真隨機單元,哪怕是緩存替換算法,也是偽隨機的,所以上述條件可以滿足。冗余的結果是邏輯面積增加一倍,比較器也會引入一些額外的面積開銷和時序影響。

這么簡單就實現了功(gong)能安全?并(bing)沒有(you),有(you)幾個問題需要解(jie)決(jue):

 

第一個(ge)問題是,比較器到底比哪些信(xin)號?以處理(li)器(qi)為例,如(ru)果我(wo)們(men)(men)只是在對(dui)(dui)總線的接口上增加(jia)比較(jiao)(jiao)器(qi),芯片內(nei)(nei)部的很多(duo)模塊(kuai),比如(ru)寫緩(huan)沖,并(bing)不(bu)能(neng)在較(jiao)(jiao)短且確定(ding)的時(shi)間(jian)內(nei)(nei)把(ba)(ba)影響傳遞到對(dui)(dui)外(wai)接口,被比較(jiao)(jiao)器(qi)發現。此時(shi),處理(li)器(qi)可(ke)能(neng)是處于失效(xiao)狀態而并(bing)沒有被探測(ce)出來。那我(wo)們(men)(men)就(jiu)(jiu)不(bu)能(neng)說當前(qian)冗余(yu)機制能(neng)覆蓋此類失效(xiao)。為此,我(wo)們(men)(men)需(xu)要把(ba)(ba)比較(jiao)(jiao)器(qi)連到內(nei)(nei)部子模塊(kuai)接口處,并(bing)且分(fen)析是不(bu)是能(neng)在較(jiao)(jiao)短時(shi)間(jian)內(nei)(nei)看(kan)到影響。這需(xu)要在設(she)計階段(duan)就(jiu)(jiu)考慮,具體(ti)做法如(ru)下圖:

對于任何一個寄存器,一定(ding)可(ke)以(yi)找到影響(xiang)它(ta)的組合邏輯和上一級(ji)寄存器。在(zai)這條(tiao)通路(lu)上任何一位(wei)出(chu)了(le)問題,那(nei)么在(zai)一個時(shi)鐘周期后,我們就可(ke)以(yi)看到寄存器輸出(chu)與其(qi)冗余(yu)的模塊產生不(bu)一致。把這個節點記為1,然后再以1的輸入寄存器為新起點,找到節點2。依次類推,我們可以往前找出一條沒有循環的通路,這條通路上的任何一點發生問題,在確定的較短時間內,一定會在最終輸出上反應出來。我們把這個通路記為模塊X。通過一定的EDA工具,我們可以在芯片內找出若干個模塊X,如下圖的例子:

 

這里,IP模塊被劃為存取單元(A門),標志單元(B門),計算單元(C門)和寄存器組(D門)。從輸出端看,于上一級寄存器間連線所覆蓋的組合邏輯為門數,一個寄存器算10個門。如上圖,存取單元的地址寄存器輸出受24個組合邏輯門外加2個寄存器的影響,那共存在44種單點錯誤會引起失效。依此類推,寄存器組的1號輸出,受28個門影響,而2號受49個門影響。加起來總共121種可能。簡單計算可知,存取單元失效率44/121=36.4%,寄存器組合計77/121=63.6%。是其中有些門被統計了多次,比如圖中的G1,這一點會反映在總的概率里面。

 

基于上述的(de)(de)思(si)想,我們(men)來看處理器(qi)是怎么做的(de)(de)。在EDA工具的幫助下,我們將它劃分為幾個大模塊:內存管理單元,寫緩沖,取指單元,數據處理單元,程序追蹤緩沖, 數據/指令緩存,總線接口單元, 時鐘和重置控制單元, ECC/奇偶校驗控制單元, 中斷接口, 監聽控制單元。此處,我們沒有把片上內存包含進去,即使是討論緩存,也指的是控制邏輯部分。

 

每一(yi)個(ge)單(dan)元(yuan)(yuan)內,又(you)可以細分成很多子模塊。以數據(ju)處理單(dan)元(yuan)(yuan)為例, 又分(fen)為通(tong)用寄存器(qi)(qi)組,存取單元(yuan)(yuan),浮(fu)點(dian)單元(yuan)(yuan),浮(fu)點(dian)寄存器(qi)(qi)組,解碼單元(yuan)(yuan),調(diao)試單元(yuan)(yuan),控制(zhi)信(xin)號(hao)單元(yuan)(yuan),系統寄存器(qi)(qi)組,分(fen)支執行單元(yuan)(yuan)等(deng)。每一(yi)個(ge)子單元(yuan)(yuan)又可(ke)以再一(yi)次細分(fen)。細分(fen)的(de)目的(de)是(shi)判斷在晶體管失效(xiao)時,受其影響(xiang)的(de)寄存器(qi)(qi)是(shi)不(bu)是(shi)會(hui)失效(xiao),并(bing)且(qie)這個(ge)失效(xiao)能(neng)被(bei)外部比(bi)較器(qi)(qi)探(tan)測到。這就(jiu)需要把內部信(xin)號(hao)拉(la)到外面。那到底怎么決定哪些(xie)信(xin)號(hao)拉(la)出去(qu)哪些(xie)不(bu)拉(la)?覆蓋率是(shi)不(bu)是(shi)足(zu)夠?工具給的(de)節點(dian)和模(mo)塊信(xin)息只能(neng)作為參考,設計人(ren)員還是(shi)要一(yi)個(ge)個(ge)檢查來做最(zui)后決定。通(tong)常(chang)會(hui)有很多信(xin)號(hao)被(bei)拉(la)出來,比(bi)如Cortex-R5,20多萬門的邏輯,最終送到比較器的信號數達2000多個,平均每100門就有一個信號。

 

在(zai)芯片過認證的時候,如果(guo)IP本身沒有過經過認證,或者以前沒有被廣泛采用,認證機構可能會需要一條條的和芯片公司討論,看看連出來的的管腳是不是能提供足夠的失效檢測覆蓋率。通常這些設計相關的信息,IP公司并不會提供給芯片公司,所以認證公司可能會要和IP設計公司拿這些信息,導致更長的認證時間。相應的,如果是廣泛使用的IP模塊,這個時間可以縮短。

解決了(le)冗余設計覆蓋率的(de)問(wen)題(ti),還有第二個(ge)問(wen)題(ti)。如(ru)果遭受電磁沖(chong)擊或者射線影響,即使(shi)用了(le)冗余設計,也可能兩個(ge)模塊同一時間產生一樣(yang)的(de)錯(cuo)(cuo)誤。這個(ge)比較(jiao)容(rong)易處理(li),只要把兩個(ge)同樣(yang)的(de)邏輯(ji),輸(shu)入(ru)錯(cuo)(cuo)開幾拍就可以。在輸(shu)出(chu)的(de)時候,錯(cuo)(cuo)開相(xiang)同的(de)拍數,使(shi)得比較(jiao)器還是看到相(xiang)同的(de)結果。

 

第(di)三(san)(san)個問(wen)題,復制了一份(fen)邏(luo)輯(ji),并且比(bi)較器發現了錯誤,能把他糾正過(guo)來嗎?很可(ke)惜,不能。除非(fei)復制兩(liang)分(fen)邏(luo)輯(ji),三(san)(san)個同時(shi)比(bi)較。這樣的代(dai)價(jia)就是再增加原先100%的邏輯部分面積,對于大的處理器設計,基本沒人這么做。如果是小的處理邏輯,比如看門狗電路,倒是可以。

 

第四,邏輯比較器本身(shen),也是可能(neng)出錯的。這(zhe)類錯誤已經被ISO26262定義,也就是所謂的潛藏錯誤Latent Fault。如果發現比較器本身的失效覆蓋率不夠,那同樣可以對比較器采用冗余設計,做比較器的比較器,提高它的覆蓋率。對于Asil-D來說,潛藏錯誤覆蓋率需要達到90%,而Asil-B是60%。

 

以上都是(shi)對于邏輯錯誤的(de)分析。還有一類(lei)是(shi)內存(cun)(cun)(cun)錯誤。這(zhe)里內存(cun)(cun)(cun)指(zhi)的(de)是(shi)片上內存(cun)(cun)(cun),也(ye)包含嵌入式閃存(cun)(cun)(cun)。內存(cun)(cun)(cun)的(de)錯誤比(bi)較容易(yi)發現,通常ECC就可以做到99%覆蓋率,1位糾正多位報錯。有些內存,比如一級指令緩存,只支持奇偶校驗,不支持糾正。

 

對于邏輯的(de)冗余和內存的(de)ECC,為了驗證探測機制本身是不是能達到設計的要求,芯片里面需要加入錯誤注入。請注意,錯誤注入機制本身并不是為了驗證芯片里單點錯誤失效和多點錯誤失效率,只是為了驗證錯誤探測機制。

 

綜上(shang)所述,邏(luo)輯冗余和(he)內(nei)存ECC是幫助我們達到Asil-B/D等級的必要手段。沒有冗余設計的時候,把一個程序在一個核上運行兩遍,然后比較結果,也是一種通向高等級安全的辦法,但僅僅適用于簡單的,實時性要求不高的運算。如果存在永久錯誤,這個方法就會失效。同樣,用兩個非冗余處理器同時做相同運算,也是一種方法。但如果計算很復雜,這樣做不但會增加系統延遲和帶寬,成本也并不低。

 

上述兩種方法并不能從本質上改善安全等(deng)級,如果最(zui)終安全等(deng)級需要Asil-D,這兩種方法會要求拆解后也得達到Asil-B。而Asil-B的單點90%覆蓋率,不用冗余機制同樣很難達到。還有一種方法,單路計算,另一路判斷其結果是不是合理。作為監測的這一路提高到Asil-D。這只有在特定場景才有可能應用,我們后面會討論到。

 

綜上所述,要做通用的Asil-B/D,最好從設計開始就使用邏輯冗余和內存ECC。

 

實際(ji)設計中,特別是對于(yu)處理器,在冗余設計之外,還有一(yi)套(tao)錯誤發現和糾正機(ji)制。Arm把它稱作RAS (Reliability,Availability,Serviceability)。RAS并不能代替冗余設計來實現Asilb-B/D,畢竟它的覆蓋率太低。但有些場景,比如ECC報錯,指令報錯,這套機制可以在不重啟核心的情況下糾正錯誤,或者阻止錯誤在糾正前被擴散(Data Poisoning),又或者記錄下錯誤時的上下文。這是它的優點,在沒有冗余設計的芯片里也是有一些用處的。

 

讓(rang)我們結合ISO26262文檔,來看看Arm的面向汽車應用的IP是怎么實現高等級功能安全的。



上面是A76AE配置圖,也就是面向汽車的A76,它引入了Split-Lock的設計。正常情況下,可以當4核SMP用,在冗余模式下,核心內所有的邏輯和內存都復制兩份,互為備份。這兩種模式需要重啟來進行切換,不能動態切換,對于汽車應用來說足夠。核心內部添加的比較器,約占5%的面積,頻率也會有5%左右的損失。

新的A76AE是Armv8.2架構,如上圖所示,一個處理器組之內,包含了DSU做三級緩存和內部互聯。和核心部分不同,這里采用的是傳統的鎖步模式,只復制邏輯,內存還是一份。省了大面積的緩存開銷。通常DSU里面邏輯只占很小一部分,并且面積利用率還很低,所以最終額外的面積并不大,15%左右。

 

Arm還(huan)有一個(ge)支(zhi)持(chi)汽車(che)Asil-D等級的(de)(de)處理(li)器(qi)A65AE,可以(yi)作(zuo)為小(xiao)核(he),放在不同的(de)(de)處理(li)器(qi)組(zu),并和大核(he)通過CMN600AE總線互聯,提(ti)供高能(neng)效比的(de)(de)異構計算。A65AE支(zhi)持(chi)單核(he)雙(shuang)線程,通過增(zeng)加一個(ge)寄(ji)(ji)存器(qi)組(zu),使(shi)得兩個(ge)軟件線程可以(yi)在一個(ge)物理(li)核(he)上共(gong)享流水(shui)線,并且對軟件透明。這其(qi)實(shi)最初來(lai)自于網絡處理(li)器(qi)的(de)(de)需求,執行單元經常等待高延遲的(de)(de)讀傳輸。為了提(ti)高流水(shui)線利用(yong)率,A65AE增(zeng)加了5%左右的(de)(de)硬件寄(ji)(ji)存器(qi),提(ti)高了20%左右的(de)(de)總性能(neng)。

 

下(xia)圖是輔(fu)助(zhu)駕駛芯(xin)片(pian)里(li)A76AE和A65AE的各種組合。在汽車上,尤其是在輔助駕駛的領域,同樣存在同時需要大小核的場景:大核跑決策,單線程性能要求高;小核跑計算,能效比要求高。



接(jie)下來看(kan)看(kan)Arm新的實時處理器Cortex-R52,通常它被當作安全島來使用,是整個芯片的安全設計基石。在R52上,各種安全機制均有所體現,包括鎖步,實時虛擬化,地址隔離,內存ECC,總線ECC,在線MBIST,LBIST,在線軟件測試庫,RAS,如下圖所示:



R52的(de)(de)(de)(de)同時(shi)(shi)支持鎖(suo)步(bu)和Split-Lock模(mo)(mo)式。鎖(suo)步(bu)模(mo)(mo)式下,只有(you)一個核,冗余部分僅僅復(fu)制(zhi)邏輯(ji),不復(fu)制(zhi)內存(cun),邏輯(ji)就是額外(wai)的(de)(de)(de)(de)成本,沒(mei)法省掉(diao)。Split-Lock模(mo)(mo)式,配置完整的(de)(de)(de)(de)兩(liang)套核,包(bao)括邏輯(ji)與內存(cun),平時(shi)(shi)作為Split模(mo)(mo)式使用,相當于(yu)兩(liang)個AMP,在(zai)進(jin)入Lock模(mo)(mo)式時(shi)(shi),其中一套的(de)(de)(de)(de)內存(cun)不起作用。此外(wai),由于(yu)采用的(de)(de)(de)(de)是MPU的(de)(de)(de)(de)虛(xu)擬化(hua),地(di)址并(bing)沒(mei)有(you)重映射(she),只是多了一層訪問檢查。這也(ye)就意味著(zhu)地(di)址對軟(ruan)件(jian)不透明,不同的(de)(de)(de)(de)虛(xu)擬機可以看到(dao)別人的(de)(de)(de)(de)地(di)址,只不過沒(mei)法訪問。

 

R52的(de)(de)最大亮點是(shi)實現了(le)(le)實時(shi)虛擬(ni)化,這(zhe)是(shi)為了(le)(le)軟件(jian)達(da)到(dao)更(geng)高的(de)(de)安(an)全等級而準(zhun)備的(de)(de)。和(he)A系(xi)列(lie)(lie)基于(yu)MMU的(de)(de)虛擬(ni)化不(bu)同(tong)(tong),它(ta)是(shi)在原來(lai)的(de)(de)EL1 MPU基礎上(shang),添加了(le)(le)EL2 2MPU。同(tong)(tong)時(shi),為了(le)(le)保證R系(xi)列(lie)(lie)的(de)(de)實時(shi)性,避免我們(men)前(qian)文提到(dao)的(de)(de)SMMU訪(fang)內延(yan)遲極大增加的(de)(de)問題(ti),R52沒(mei)有采用(yong)(yong)內存映射,也不(bu)轉換地址(zhi),而是(shi)用(yong)(yong)片上(shang)內存,做兩層的(de)(de)權限檢(jian)查。用(yong)(yong)戶可以指(zhi)定幾十個區域(yu),顆粒度可以不(bu)同(tong)(tong),但(dan)是(shi)沒(mei)法(fa)做到(dao)頁表那么多的(de)(de)條(tiao)數。在R52上(shang),由(you)于(yu)沒(mei)有A系(xi)列(lie)(lie)的(de)(de)EL3,安(an)全啟動就需要(yao)先進(jin)入EL2,然后再建立(li)信任(ren)鏈,流程和(he)A系(xi)列(lie)(lie)類似。

 

另一個重要的安全設(she)計是(shi)支持在(zai)線(xian)的MBIST和SBIST。在線MBIST原理并不復雜,它在片上內存接口前添加控制邏輯,不斷探測是不是有處理器那邊發過來的傳輸。如果沒有,那就趁空閑時間讀寫內存并做測試。SBIST就是針對處理器IP的在線軟件測試。我們可以把這個測試運行在某個虛擬機上,通過中斷來周期性的切換,花5%的時間來不停檢測硬件。當然,必須把虛擬機切軟硬件換時間保證在較小范圍內,不影響實時任務的調度。

 

這兩種(zhong)在(zai)線測試,可(ke)(ke)以(yi)作(zuo)為開機(ji)自檢的補(bu)充,也可(ke)(ke)以(yi)作(zuo)為在(zai)鎖步/ECC機制但點錯誤覆蓋率不夠時的補充,更可以作為發現潛藏錯誤的補充。但是在高等級的安全設計中,尤其是在安全島的設計里,僅僅靠這兩種在線測試發現單點錯誤還是不夠的,也只能作為補充。

 

其他方面,R52還對MPU編程做了優化,不是像以前需要針對一個CP15寄存器填,填完再用內存壁壘指令確保寫入次序。現在采用多組寄存器方式,基本20-30時鐘周期就可以完成虛擬機切換的寄存器編程。此外中斷寄存器放到了cluster內部,不用再通過AXI口出去,減少一些延遲。

 

再來看看中斷控制器GIC600AE。以AE結尾的IP表示在原有的基礎上做了功能安全設計,可以支持到Asil-D。GIC600AE結構如下圖:



和處理器一樣,GIC600AE的邏輯部分是靠鎖步來支持Asil-B/D,內存部分是ECC。不同的是,不像處理器是一個單一硬核,GIC600AE是一個分布式的結構,布局布線可以分開,只是在中心有個分配器(Distributor)。每個處理器附近的子分配器(Redistributor)和分配器之間,就需要安全總線協議設計,這就是新的AMBA點對點功能安全擴展:


可以看到(dao)的是,各類AMBA的地址和數據線,接口上均添加了奇偶校驗,這也是ISO26262所要求的傳輸線安全措施之一;對于重置和時鐘,P/Q通道等信號,大多采用復制的方式來保護;而對于AXIS端口,則采用負載加上CRC的方法,免去添加管腳。由于中斷控制器不像處理器,可以有中斷系統來處理各類錯誤和失效,因此GIC600AE在分配器中添加了一個錯誤管理單元,可以把我們所提及的各類錯誤做集中管理,記錄并上報。此外,在分配器與子分配器之間,GIC600AE還添加了看門狗,防止超時未響應。

 

由(you)于(yu)目前(qian)GIC600AE還比較新,對于一些老的設計,可能并沒有與之匹配的中斷控制器可用。這種情況下,就只能把和安全相關的工作用輪詢來完成,避免走中斷通道。輪詢的對象可以是一段ECC保護的內存,也可以是有冗余設計的硬件鎖或者外置exclusive monitor。

 

MMU600AE也是類似的(de)安全(quan)設(she)計(ji),在此我(wo)們不(bu)(bu)深入討論。對于Coresight這樣的(de)片上(shang)調試(shi)系統(tong),由于本身并不(bu)(bu)涉(she)及安全(quan),它(ta)的(de)錯誤被稱作safe fault,不(bu)(bu)計(ji)入考慮范圍。 我(wo)們接(jie)下去看看CMN600AE。

 

CMN600是(shi)Arm服務(wu)器總線IP,它(ta)最大(da)的(de)特點(dian)是(shi)網狀拓撲結構,對外支持AMBA CHI接口,內部改用路(lu)由結構轉發數據(ju),并提供硬(ying)件一致性和(he)系統(tong)緩(huan)存,還支持多(duo)芯片互聯。CMN600在T16FFC上可以做到2Ghz,極大(da)的(de)拓展了帶寬,非常適合(he)ADAS這類(lei)有大(da)量異構計算的(de)應用。


CMN600AE做了(le)功能安全(quan)設計,引入了(le)完整的(de)端(duan)到端(duan)的(de)失(shi)效探測機制。如(ru)上圖,整個(ge)總(zong)線(xian)(xian)(xian)被分成三(san)類模(mo)塊,主設備,總(zong)線(xian)(xian)(xian),從設備。主設備與總(zong)線(xian)(xian)(xian),總(zong)線(xian)(xian)(xian)與從設備之間,總(zong)線(xian)(xian)(xian)內(nei)部,會有(you)錯(cuo)誤探測編碼,也就是EDC。各處的(de)EDC策略可以是不同的(de)。


這是主設(she)備(bei)與總(zong)線(xian),總(zong)線(xian)與從(cong)設(she)備(bei)接口處(chu)的EDC,和GCI600AE的有些相似,只不過更全。對于一些控制類信號,采用復制的方法,有時候把兩根線正負反轉;對于數據線和地址線,采取添加奇偶位的做法。

 

在總線內(nei)部,由于網(wang)狀總線的(de)特點是把傳輸轉成管腳(jiao)更(geng)少的(de)包FLIT傳輸,所以在每個包后面,加了CRC-8數據作為校驗,而不是添加管腳。對于總線處理模塊,仍舊采用邏輯鎖步和內存ECC來做安全設計。此外,CMN600在傳輸上加了計數器,如果從設備端超時不響應,那就報異常。

 

除了鎖步,ECC和傳輸線保護,有一類IP模塊設計,可以使用簡單一些的方法,來達到一定的安全等級。下圖是一個簡單的圖像信號處理單元,從前到后,流水分別是Raw域,RGB域,YUV域,每個域都包含了各自的子模塊。模塊之間,包括到DDR的傳輸,使用傳輸線安全設計。而子模塊內部,如果輸出結果是單調遞增,單調遞減或者在某一區域內的,就可以用帶冗余的簡單邏輯做硬件監控,來實現Asil-B/D等級。


我們取RGB域上的Local Tome Mapping為例。Local Tome Mapping的本意是,對于高動態HDR或者標準動態范圍SDR的圖,可以把局部的亮度調整到一個合適范圍內,效果如下圖。基于這個假設,我們可以寫簡單邏輯,看某個區域的像素是不是顏色保持不變,而亮度和原來比有合理提高。這個簡單的邏輯,可以使用鎖步來確保高等級功能安全。根據功能安全的功能分解原則,Asil-D可以分解為Asil-D的監控模塊和QM的功能模塊,這樣,還是能保證整個Local Tome Mapping子模塊的高安全等級。



以上是IP模塊級別對于安全設計的考量,接下來我們談下模塊級實時性設計。

 

所謂實(shi)時(shi)性(xing),是在一(yi)個確定的,比較(jiao)小(xiao)的時(shi)間內處理(li)完任務。很多時(shi)候(hou),我們(men)其實(shi)并不是真(zhen)的需(xu)要實(shi)時(shi)性(xing),而只是需(xu)要一(yi)個比較(jiao)高的平均性(xing)能(neng)。Arm的R系列專門為嚴格的實時性設計:確定的幾十ns的中斷響應時間;緊耦合內存保證流水線在一個時鐘周期就能訪問指令和數據;內部總線具有QoS保證優先級;不存在頁表,MPU做在核心內部,無需外部訪問。真實的應用場景可能并不需要納秒級的響應時間,哪怕是馬達控制,系統響應在毫秒級也足夠了。而毫秒與納秒差了1百萬倍。這就給了Arm的A系列機會。

 

A系(xi)列最大(da)的(de)(de)不確定(ding)(ding)性來自于(yu)訪問外部(bu)內(nei)存(cun)(cun)時(shi)(shi)的(de)(de)延遲。我(wo)們(men)前面在討論(lun)虛擬(ni)機的(de)(de)時(shi)(shi)候分(fen)析過,最差情況下,一(yi)(yi)次頁(ye)表讀取(qu),可(ke)能(neng)需要20倍的(de)(de)訪存(cun)(cun)時(shi)(shi)間,差不多是3us。為了使A系(xi)列有可(ke)能(neng)用于(yu)實時(shi)(shi)性任務(wu),軟件上的(de)(de)優化是必(bi)須(xu)的(de)(de),包括虛擬(ni)機上下文(wen)切換等。硬件上,可(ke)以縮(suo)短特(te)權級切換時(shi)(shi)間,也可(ke)以采取(qu)固定(ding)(ding)分(fen)配來提高頁(ye)表查找命中(zhong)率(lv),還可(ke)以固定(ding)(ding)分(fen)配某塊緩存(cun)(cun)或者片上內(nei)存(cun)(cun)給某處理器。方(fang)法很多,不一(yi)(yi)一(yi)(yi)列出(chu)。

 

以(yi)上的優(you)化可以(yi)減少單(dan)個處理單(dan)元的延遲。但是復雜(za)系統(tong)里有很多主設(she)備,它(ta)們(men)之間共享內存和其他從設(she)備,是有可能產生阻(zu)塞(sai)和死(si)(si)鎖的。死(si)(si)鎖可以(yi)在設(she)計流(liu)程過程中(zhong)通過充(chong)分的驗證(zheng)來發現(xian),而阻(zu)塞(sai)就得靠優(you)先級(ji)QoS設計來避免了。下面我們看看CMN600AE是如何處理的。

 

實時(shi)處理(li)最簡單(dan)的方案是(shi)給(gei)(gei)傳輸(shu)分優(you)先(xian)級(ji)(ji)。芯片中的總線和從設備(bei)根據優(you)先(xian)級(ji)(ji)來決定先(xian)后處理(li)。但(dan)是(shi)僅(jin)僅(jin)采用(yong)優(you)先(xian)級(ji)(ji)會有個問題,就是(shi)某些內(nei)部資源,比如(ru)緩沖(chong),表項已經(jing)被低優(you)先(xian)級(ji)(ji)的傳輸(shu)占(zhan)用(yong)了。此時(shi)如(ru)果來一個高優(you)先(xian)級(ji)(ji)的傳輸(shu),由于之前的還(huan)沒有完成(cheng),就會出現高優(you)先(xian)級(ji)(ji)被低優(you)先(xian)級(ji)(ji)阻(zu)塞(sai)的情況(kuang)。怎么辦?可(ke)以(yi)預先(xian)保(bao)留相應(ying)的資源給(gei)(gei)高優(you)先(xian)級(ji)(ji)。



如(ru)上(shang)圖,在每個與主設備(bei)的接口處,都有(you)一(yi)個QoS模塊,里面包含了一個優先級定義,可以被軟件編程。這個優先級會隨著傳輸到總線的每一個部分,每個部分都根據優先級來給它相應的資源。有時候,同樣高優先級的請求過多,超過了系統資源的承受范圍。這時候,CMN600AE的內部模塊,會告訴請求傳輸的模塊重傳,并給它一個籌碼。每請求一次,籌碼加一。下次這個籌碼就會隨著新的請求一起傳過來,只要資源有空閑,那么擁有最高籌碼的請求將被允許。QoS模塊還負責統計它所管理的傳輸,看看平均延遲是多少,傳輸間隔是多少,然后動態調整其優先級。

 

CMN600AE另一(yi)(yi)(yi)(yi)個很(hen)重要(yao)的(de)(de)特性是支持片間硬(ying)件(jian)一(yi)(yi)(yi)(yi)致性互聯(lian)。對(dui)于(yu)輔(fu)助駕駛芯片,當(dang)面(mian)積(ji)(ji)大到一(yi)(yi)(yi)(yi)定(ding)程度(du),比如400mm^2@16nm,良(liang)率會(hui)迅速下跌(die)。這時候,進(jin)一(yi)(yi)(yi)(yi)步(bu)增(zeng)加(jia)面(mian)積(ji)(ji)不是一(yi)(yi)(yi)(yi)個好(hao)的(de)(de)選擇。應對(dui)的(de)(de)辦法是實現片間互聯(lian),減少(shao)單個die的(de)(de)面(mian)積(ji)(ji)。當(dang)然,實現高速的(de)(de)PHY本(ben)身(shen)也會(hui)引入(ru)相當(dang)大的(de)(de)面(mian)積(ji)(ji),TSMC16FFC上一(yi)(yi)(yi)(yi)個支持PCIe Gen4x16的(de)(de)PHY就(jiu)要(yao)6個平(ping)方毫(hao)米,相當(dang)于(yu)四核A55加(jia)DSU,這里(li)需(xu)要(yao)做好(hao)取舍(she)。片間互聯(lian)也會(hui)引入(ru)額外的(de)(de)片間延遲,可能會(hui)達(da)到50ns。



如上圖,有了(le)CMN600AE和片間互聯協議CML,我們就可以把MMU600AE和GIC600AE全部串聯起來,實現片間虛擬化和中斷系統,對軟件完全透明。其中,MMU600AE訪存的實時性靠固定分配虛擬機,以及使用大頁表來保證,目的是消除頁表項的未命中。對于中斷系統的實時性,片內的話使用傳統的SPI/PPI,問題不大,片外的話,只能使用PCIe的消息中斷機制MSI了。支持消息中斷需要ITS表,類似于頁表,也存放在內存中,也有類似緩存的設計。只要保證ITS緩存條目足夠多,映射的設備數量不太多,也是可以消除未命中,提高實時性的。

 

以(yi)上是關于保證實時性的(de)一些考量。接著來看看AEC-Q100,和芯片設計相關的是溫度和電壓。

 

溫度(du)設計相對(dui)簡單,只要工藝允許,標準庫和內存單元(yuan)支持(chi),那只需在做(zuo)后端時加入溫度(du)限(xian)制(zhi)條件即(ji)可。現在新的中控和輔助駕駛多用TSMC16FFC,可以支持-40C~150C的節溫,相當于環境-40C~125C,其代價是犧牲一定的頻率和面積。

 

ESD測試(shi)是對(dui)接口(kou)的要(yao)求,包(bao)括(kuo)2000V+的HBM和(he)6A+的CDM。和(he)封裝相關,也和(he)芯(xin)片IO設計(ji)相關。和(he)數字部分IP一樣(yang),PHY和(he)GPIO也需(xu)要(yao)使用(yong)IP來支持AEC-Q100。此處的GPIO指的是200Mhz以下(xia)的低速IO,包(bao)括(kuo)但并不限于SPI/PWM/I2C等(deng)接口(kou)協議(yi)。

 

以(yi)GPIO為例,車載設備通常需要支持3.3V和1.8V。為了符合AEC-Q100,GPIO在設計時就能承受額外的電流,并分析各種情況,看看是不是每一條電路分支都能被覆蓋到。通常對于車用GPIO,僅僅用仿真來保證設計的可靠度還不夠,還必須真正流片,用測試芯片做HTOL/LTOL測試,不斷變化溫度,做滿2600小時。否則,會發生仿真通過但是測試芯片過不了測試的問題。一旦測試失效,那必須做失效分析,看看是哪里的電流承載不了,然后修bug重新流片測試。

 

同時,GPIO本身同樣需要支持功能安全,也就是要加入探測電路,對各類可能產生的失效報警。相對來說,模擬電路失效種類較少,比較容易做到Asil-D。相應的,IP還得提供FMEA和FMEDA報告,供芯片公司過認證。

 



上(shang)圖是集成在芯片內(nei)部的(de)GPIO,集成時,除了要插入一些特殊的單元來完成不同電壓的IO模塊隔離,還需要注意一定的IO上電次序。

至此,IP模塊分析完畢。接下去我們從芯片系統層面開始分析中控和輔助駕駛芯片。



讓我們(men)回頭看看上面(mian)的中控(kong)芯片結構圖。最重(zhong)要(yao)的是紅色框內的安全島,由R52和緊耦合內存,中斷控制器,總線,內存控制器,以及DMA控制器,硬件鎖,SRAM等組成。理想情況下,每一個模塊都需要是Asil-B/D的。如果做不到,那么至少R52,緊耦合內存和硬件鎖做到。由它們構成安全的基石,用來輪詢其余模塊是否發生故障。同時,這個安全島還可以作為系統控制器,來控制其余模塊的電源,電壓和時鐘狀態;否則,還需要一個Asil-B/D的電源管理的有限狀態機來做這件事情,具體可以參考CMN600AE里時鐘,P/Q通道和重置信號的設計。

 

作為信息娛樂域的處(chu)理(li)器,多媒體,加解密,總線,中斷控制(zhi)器,調試系統等(deng)均無需安全等(deng)級,出錯(cuo)不影響駕駛。需要(yao)安全等(deng)級的是(shi)儀表(biao)盤(pan),Asil-B級。由于我們這里已經做了隔離設計,所以不需要考慮信息娛樂域的大小核以及其他主設備對其產生的影響。內存控制器雖然是共享的,但只要做好了類似CMN600AE的QoS,保留出相應的資源,也不用擔心被低優先級阻塞。

 

黃色框內(nei)作為儀(yi)表盤處(chu)理器的A55,很難被替換成R52,因為圖形處理器通常需要支持MMU的操作系統。此處的操作系統,可以是Asil-B/D級的QNX等,也可以是Asil-B/D級虛擬機之上建立的實時操作系統。另一方面,A55雖然有ECC和RAS機制,但并不支持鎖步,很難做到通用場景下的Asil-B等級。至于同樣被隔離的圖形處理器G31,更沒有安全設計。那怎么把儀表盤做到Asil-B?一旦發生故障,比如儀表盤畫不出正確的圖層,或者干脆不響應,我們可以把A55和G31排除在安全狀態之外,讓R52驅動外置LED燈告知駕駛員錯誤信息。這樣,就把問題歸到了怎樣用Asil-D級的安全島探測錯誤。這個就相對要簡單多了。可以計算每一幀r的CRC,看看是不是連續幾幀不變;也可以定期讓A55響應中斷或者喂狗,又或者同時采用。

 

在這里,我們引(yin)入了一個概(gai)念,出錯處理。在失(shi)效發生后,系統需要在失(shi)效容(rong)忍時間間隔(FTTI)內進入安全狀態。所謂的安全狀態,可以是之前的正常運行狀態,也可以是應急的處理狀態。之前儀表盤的錯誤警告LED就是一種應急處理的安全狀態。

 

對(dui)于鎖步設(she)計,最簡單的(de)做法(fa)就是重置整個邏輯。如果是處理器,那就需要重啟相應的(de)處理器核心。而這(zhe)個重啟,必須在失效(xiao)容(rong)忍時(shi)間間隔內完(wan)成,否則,還是要被(bei)視作失效(xiao)。通常,這(zhe)個最短(duan)容(rong)忍時(shi)間是10毫秒到100毫秒,和系統應用場景有關。

 

對(dui)于簡(jian)單的微控制(zhi)器,100毫秒甚至10毫秒重啟并不困難。但對于一個復雜的處理器,重啟就是麻煩事了。如果按照傳統的開機流程,那幾秒鐘是需要的,沒法符合要求。那我們就只剩下兩條路,第一個是使用虛擬機。如果發生失效的并不是Hypervisor所運行的處理器核,可以只重啟某個虛擬機來實現加速。對于重要的高實時任務,還可以兩個虛擬機跑同一個業務,互為備份,一個出問題那立刻切另外一路;也可以用一個虛擬機待機,看其余哪個虛擬機重啟,立刻開始接手那個虛擬機的業務。如果是Hypervisor所運行的處理器核重啟,那優化重啟過程,保存當前上下文環境至內存,并且盡量調整驅動啟動步驟,做到最先使用的主設備優先初始化。可以參考手機上的Suspend To Ram機制,手機基本上可以做到休眠時全芯片下電,數據保留在DDR,喚醒時處理器起來調用顯示模塊,先顯示之前保存的圖層,再啟動圖形處理器渲染新的幀,做到無明顯感覺。利用這種機制,對于儀表盤失效,可以先告警,然后在毫秒級的時間內完成相應子系統重啟。


再來(lai)看(kan)看(kan)媒體部分的(de)(de)安全設計問題。上圖(tu)中是倒車后視(shi)的(de)(de)子系統,圖(tu)像(xiang)信號處理是C71(Asil-B),R52(Asil-D),總線NIC450(QM),DMA330(QM),SRAM(帶ECC),顯示模塊D71(QM)。子系統要求做到Asil-B等級。由于并不是所有模塊都做到了Asil-B,我們需要對其做失效樹分析。真正出現失效的場景,在于顯示畫面凍結在某一幀。瞬時錯誤引起的一些問題,比如某幀畫面有壞點,并不構成失效。因此,我們要做的事情就變成兩件:先用R52從顯示模塊獲取每一幀的CRC,看看是不是連續多幀都不變,如果出錯,立刻亮燈告警,這個計算必須在失效容忍時間間隔內完成;其次,開機或者周期性運行LBIST/MBIST,看看是不是存在永久錯誤,有的話也需要告警。只要圖像的源頭C71有Asil-B,R52高于Asil-B,我i們可以放松對其余幾個模塊探測瞬時錯誤的要求。

 

接下(xia)來我(wo)們看輔助(zhu)駕(jia)駛的芯片框(kuang)架(jia)圖(tu),和中控不同(tong),輔助(zhu)駕(jia)駛需(xu)要感知和決策,是一個復雜的實時運(yun)算(suan)過(guo)程,沒有辦法(fa)通(tong)過(guo)安(an)全(quan)(quan)島(dao)監測來達到高等(deng)級安(an)全(quan)(quan),只能通(tong)過(guo)處理(li)器(qi)本身來保證。所以這里(li)的處理(li)器(qi)全(quan)(quan)部換成了帶(dai)冗(rong)余設計的A76AE和A65AE。虛擬化在這個系統里并不是必須,MMU600AE僅僅是為了虛實地址轉換。由于沒有采用虛擬機,各個處理單元之間的數據隔離可以靠CMN600AE的MPU來完成。沒有經過CMN600AE的設備,需要在和總線之間添加MPU來實行地址保護,并且所有的MPU配置要保持一致。另一方面,使用MPU也限制了分區不能太多,否則就需要映射到內存。到底使用虛擬機還是MPU進行隔離需要看應用來決定。另外,如果需要片間互聯,那所有主設備都應該通過NoC AE形成子網連到CMN600AE。



這個框架的(de)計算(suan)流是這樣的(de):C71(Asil-B)把數據從傳感器收集,做固定的圖像信號處理,把結果放到DDR;A65AE讀取數據,進行車道檢測等傳統的矢量運算。相對于大核,A65AE提供了高能效比的運算能力,適合多路并行計算。也可以把任務丟到圖形處理器來運算,延遲稍大,能效比也很高。如果涉及神經網絡運算,那A76AE會把任務調度到AI加速器上,同時在算子不足的情況下負責部分計算。也可以調度到圖形處理器,不存在算子不支持的問題。當然,對于神經網絡計算,能效比還是趕不上專用加速器。A76AE作為大核,具有很高的單線程性能,可以用來做決策。

 

CMN600AE作(zuo)為橋梁,連(lian)接了(le)所有(you)設備,并提供高帶寬,硬件一致性以及(ji)系統緩存。受(shou)布(bu)局布(bu)線的(de)限制,還(huan)是需(xu)要NoC把帶寬和延(yan)遲需(xu)求不高的(de)設備通過子網連(lian)到(dao)CMN600AE。

 

最后劃一下重(zhong)點。汽車芯片的關鍵是實時性,功能安全(quan),電氣,虛(xu)擬化。功能安全(quan)最復雜(za),需要IP級就開始支持。如果不符合,那需要場景分析做分解,用最少的代價實現安全。

返回上一步
打印此頁
[向上]