高清网站少妇,国产欧美日韩96,性AV男人的天堂,成人AⅤ免费视频在线观看,拨开少妇双腿挺进视频,青草青草视频2免费观看,AV不卡在线看波多野结衣,亚洲私拍福利视频 ,拨开少妇双腿挺进视频,草莓视频色版在线观看 ,国产爽妇精品,成年大片免费视频网站,嗯啊在线网站,在线观看日本一本卡道,好妈妈5高清中字在线观看,白丝喷水在线,很黄很黄污的的在线观看视频

今天是2025年9月11日 星期四

,歡迎光臨本站 宜訊汽車裝備(上海)有限公司 網(wǎng)址: www.sytygk.com

行業(yè)動(dòng)態(tài)

必讀,汽車芯片設(shè)計(jì)指南

文字:[大][中][小] 2019-5-7    瀏覽次數(shù):2925    

時(shí)隔一年

,終于有機(jī)會(huì)再攢一顆芯片
。這一次,是熱點(diǎn)中的汽車芯片

 

記得兩年前

,在中國(guó)找不出幾家做前裝汽車芯片的公司。而兩年后的今天
,突然如雨后春筍般的涌現(xiàn)出十多家
,其范圍涵蓋了輔助駕駛,中控
,儀表盤
,T-Box,網(wǎng)關(guān)
,車身控制,電池管理
,硬件加解密
,激光雷達(dá),毫米波雷達(dá)
,圖像傳感器和圖像信號(hào)處理器等
,八仙過(guò)海各顯神通。

 

全球范圍內(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ù)門檻也并非不可逾越
,更不存在絕對(duì)的生態(tài)閉環(huán)。只是量沒有消費(fèi)電子那么大
,一年出個(gè)幾百萬(wàn)片就不錯(cuò)了
。在這個(gè)領(lǐng)域里,新造車勢(shì)力方興未艾
,傳統(tǒng)造車勢(shì)力追求差異化
,又趕上5G,自動(dòng)駕駛與人工智能的熱點(diǎn)
,于是汽車芯片成了繼虛擬現(xiàn)實(shí)
,礦機(jī),NB-IOT
,人工智能之后新的投資方向


上圖是一個(gè)典型的汽車電子系統(tǒng)框架。這個(gè)系統(tǒng)分為幾個(gè)域

,車身
,動(dòng)力總成,底盤
,信息娛樂(lè)
,輔助駕駛,網(wǎng)關(guān)和T-Box
。每個(gè)域有著各自的域控制器
,通過(guò)車載以太網(wǎng)和Can總線互聯(lián)。我們就以架構(gòu)上最復(fù)雜的中控和輔助駕駛芯片為例
,展開探討其設(shè)計(jì)思路與方法

 

新一代的中控芯片的架構(gòu)如下圖

,主要由處理器,圖形處理器
,多媒體
,圖像處理,安全(Security)管理
,功能安全(Safety)
,片上調(diào)試和總線等子系統(tǒng)構(gòu)成。它和通常的應(yīng)用處理器區(qū)別主要在于虛擬化
,功能安全
,實(shí)時(shí)性和車規(guī)級(jí)電氣標(biāo)準(zhǔn)。



先說(shuō)虛擬化

。虛擬化其實(shí)是從服務(wù)器來(lái)的概念
,為什么汽車也會(huì)有這個(gè)需求??jī)牲c(diǎn)原因:現(xiàn)在的中控芯片有一個(gè)趨勢(shì)
,集成儀表盤
,降低成本。以前的儀表盤通常是用微控制器做的
,圖形界面也較簡(jiǎn)單
。而現(xiàn)在的系統(tǒng)越來(lái)越炫,甚至需要圖形處理器來(lái)參與
。很自然的
,這就使得中控和儀表盤合到單顆芯片內(nèi)。它們跑的是不同的操作系統(tǒng)
,虛擬化能更好的實(shí)現(xiàn)軟件隔離
。當(dāng)然,有些廠商認(rèn)為虛擬化還不夠
,需要靠物理隔離才放心
,這是后話,稍后展開
。另一個(gè)趨勢(shì)是中控本身需要同時(shí)支持多個(gè)屏幕
,每個(gè)屏幕分屬于不同的虛擬機(jī)和操作系統(tǒng),這樣能簡(jiǎn)化軟件設(shè)計(jì)
,提高軟件的可靠性

 

虛擬化在硬件上有什么具體要求?這并沒有明確定義

。可以依靠處理器自帶的二階內(nèi)存管理單元(s2MMU)
,實(shí)現(xiàn)軟件虛擬機(jī)
;也可以在內(nèi)存控制器前放一個(gè)硬件防火墻,對(duì)訪問(wèn)內(nèi)存的地址進(jìn)行檢查和過(guò)濾,不做地址重映射
;還可以使用系統(tǒng)內(nèi)存管理單元SMMU實(shí)現(xiàn)完整的硬件虛擬化
,這是我們要重點(diǎn)介紹的。



如上圖黃色框所示

,每個(gè)主設(shè)備和總線之間
,都加了一個(gè)MMU600。為什么每個(gè)主設(shè)備后都要加
?很簡(jiǎn)單
,如果不加,那必然存在安全漏洞
,和軟件虛擬化無(wú)異
。那為何不用防火墻?防火墻的的實(shí)現(xiàn)方法
,通常是用一個(gè)片上內(nèi)存來(lái)存放過(guò)濾表項(xiàng)
。如果做到4K字節(jié)的顆粒度,那4G字節(jié)內(nèi)存就需要1百萬(wàn)項(xiàng)
,每項(xiàng)8位
,總共1MB的片上內(nèi)存,這是個(gè)不小的成本
。另外一個(gè)原因是
,防火墻方案的物理地址空間對(duì)軟件是不透明的,采用系統(tǒng)內(nèi)存管理器SMMU600對(duì)上層軟件透明
,更貼近虛擬化的需求



當(dāng)處理器發(fā)起一次地址虛實(shí)轉(zhuǎn)換請(qǐng)求,內(nèi)存管理單元會(huì)在內(nèi)部的TLB緩存和Table Walk緩存查找最終頁(yè)表項(xiàng)和中間表項(xiàng)
。如果在內(nèi)部緩存沒找到
,那就需要去系統(tǒng)緩存或者內(nèi)存讀取。在最差情況下
,每一階的4層中間表可能都是未命中
,4x4+4=20,最終會(huì)需要20次內(nèi)存讀取
。對(duì)于系統(tǒng)內(nèi)存管理器
,情況可能更糟。如上圖所示
,由于SMMU本身還需引入多級(jí)描述符來(lái)映射多個(gè)頁(yè)表
,最極端情況需要36次的訪存才能找到最終頁(yè)表項(xiàng)。如果所有訪問(wèn)都是這個(gè)延遲
,顯然無(wú)法接受

 

Arm傳統(tǒng)的設(shè)計(jì)是添加足夠大的多級(jí)TLB緩存和table walk緩存

,效果如下:



這是啟用2階地址映射后的實(shí)測(cè)結(jié)果,其各項(xiàng)緩存大小均配置成較大

,然后把兩個(gè)主設(shè)備連到接口
,進(jìn)行地址較為隨機(jī)的訪問(wèn)?div id="4qifd00" class="flower right">
?梢钥吹?div id="4qifd00" class="flower right">
,主設(shè)備的5萬(wàn)次訪問(wèn),在經(jīng)過(guò)SMMU后
,產(chǎn)生了近5萬(wàn)次未命中
。這意味著訪問(wèn)的平均延遲等于訪存延遲,150ns以上
。另一方面
,處理器開了虛擬機(jī)后,它的隨機(jī)訪存效率
,和未開虛擬機(jī)比
,卻能做到80%以上,這是為什么呢
?答案很簡(jiǎn)單
,處理器內(nèi)部的MMU,會(huì)把中間頁(yè)表的物理地址繼續(xù)發(fā)到二級(jí)或者三級(jí)緩存
,利用緩存來(lái)減少平均延遲
。而SMMU就沒有這么幸運(yùn),在Arm先前的手機(jī)處理器參考設(shè)計(jì)中
,并沒有系統(tǒng)緩存
。這種情況下,即使對(duì)于延遲不太敏感的主設(shè)備
,比如圖形處理器
,打開虛擬化也會(huì)造成性能損失,可能高達(dá)9%
,這不是一個(gè)小數(shù)目

 

怎么解決這個(gè)問(wèn)題?在Arm服務(wù)器以及下一代手機(jī)芯片參考設(shè)計(jì)中

,會(huì)引入網(wǎng)狀結(jié)構(gòu)總線
,而不是之前的crossbar結(jié)構(gòu)的一致性總線。網(wǎng)狀結(jié)構(gòu)總線的好處
,主要是提升了頻率和帶寬
,并且,在提供多核一致性的同時(shí)
,也可以把系統(tǒng)緩存交給各個(gè)主設(shè)備使用
。不需要緩存的主設(shè)備還是可以和以前一樣發(fā)出非緩存的的數(shù)據(jù)傳輸
,避免額外占用緩存
,引起頻繁的緩存替換
;同時(shí),SMMU可以把頁(yè)表和中間頁(yè)表項(xiàng)放在緩存
,從而縮短延遲

 

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)如下圖:



如果我們讀一下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而言
,它僅僅支持單向的廣播
,接了SMU600的主設(shè)備,本身的緩存和頁(yè)表操作并不能廣播到處理器
,反過(guò)來(lái)是可以的

 

對(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即可
。如果訪問(wèn)時(shí)的id和預(yù)設(shè)的不符,SMMU會(huì)報(bào)異常給hypervisor

 

如果主設(shè)備要實(shí)現(xiàn)硬件的方式支持虛擬化

,那本身需要根據(jù)多組寄存器設(shè)置,主動(dòng)發(fā)出不同的vmid/streamid
。為了對(duì)軟件兼容
,可以把不同組按照4KB邊界分開,這樣在二階地址映射時(shí),可以讓相同的實(shí)地址訪問(wèn)不同組的寄存器
,而對(duì)驅(qū)動(dòng)透明
。同時(shí),對(duì)于內(nèi)部的資源也要做區(qū)分
,不能讓數(shù)據(jù)互相影響
。如果用到緩存,那緩存還必須對(duì)vmid敏感
,相同地址不同vmid的情況
,必須識(shí)別為未命中。

 

如果主設(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上的二階段地址
,讓寄存器訪問(wèn)和數(shù)據(jù)通路處于‘穿透’的模式,不引起異常
,提高效率
。相應(yīng)的,讓虛擬機(jī)直接訪問(wèn)寄存器
,那訪問(wèn)控制就實(shí)現(xiàn)不了了
。為了實(shí)現(xiàn)多虛擬機(jī)的調(diào)度,我們可以在hypervisor里面實(shí)現(xiàn)一個(gè)調(diào)度器
,并且在核心態(tài)的驅(qū)動(dòng)部分開放接口
,讓hypervisor可以主動(dòng)調(diào)度。示意圖如下:


這個(gè)實(shí)現(xiàn)的優(yōu)點(diǎn)很明顯

,改動(dòng)較少
,實(shí)現(xiàn)簡(jiǎn)單
,無(wú)論是Xen和KVM都可以適配。缺點(diǎn)是主動(dòng)權(quán)并不掌握在hypervisor
,如果某個(gè)虛擬機(jī)上渲染任務(wù)過(guò)于繁重
,一直不把控制權(quán)交給調(diào)度器,那只有強(qiáng)制重啟
。另一個(gè)明顯的缺點(diǎn)是
,無(wú)法在圖形處理器同時(shí)運(yùn)行兩個(gè)虛擬機(jī)上的任務(wù)。這就需要另一種虛擬機(jī)的實(shí)現(xiàn)方式
,如下圖:

在這種實(shí)現(xiàn)下
,虛擬機(jī)里只跑驅(qū)動(dòng)的用戶空間,所有涉及核心空間的調(diào)用全都扔到Hypervisor
。這要求hypervisor本身是Linux
,只有KVM符合這個(gè)要求。Arm的Mali圖形處理器
,硬件上是支持指定某個(gè)渲染核心跑特定任務(wù)的
,也就是可以把某個(gè)虛擬機(jī)的任務(wù)運(yùn)行在特定渲染核心的。這樣
,如果有實(shí)時(shí)性的操縱系統(tǒng)要跑
,比如儀表盤,可以保留出一個(gè)核來(lái)
,不被其他虛擬機(jī)搶占
,來(lái)實(shí)現(xiàn)一定程度的QoS。此時(shí)
,圖形處理器是真正同時(shí)跑兩個(gè)虛擬機(jī)任務(wù)的
,而不是時(shí)分復(fù)用。至于輸出的frame buffer
,不同的任務(wù)是可以放到不同物理地址的
,只是沒法區(qū)分SteamID,沒法做隔離

 

Arm支持硬件虛擬化的圖形處理器估計(jì)還要一年才會(huì)出來(lái)
。具體到細(xì)節(jié),虛擬化除了需要寄存器分組
,緩存對(duì)vmid敏感之外
,通用的一些單元也需要支持分組。

            關(guān)于虛擬機(jī)的效率
,還有兩點(diǎn)需要注意:

 

Arm現(xiàn)有的中斷控制器GIC600

,受限于GICv3.x協(xié)議,是沒有辦法繞過(guò)hypervisor,直接把虛擬中斷送到Guest OS的
。外部中斷送進(jìn)來(lái)
,還是得經(jīng)由hypervisor權(quán)限設(shè)置寄存器,產(chǎn)生一個(gè)虛擬中斷到Guest OS
。中斷直接送到Guest OS要到GICv4才會(huì)改進(jìn)

 

Armv8.1及之后的CPU,都支持一個(gè)叫VHE的機(jī)制

,可以加速2型虛擬機(jī)的切換
。具體原理是,KVM等2型虛擬機(jī)
,Hypervisor就在Linux核心里面
,而Linux需要完整的2階3/4層頁(yè)表。另外一方面
,Armv8.1之前的處理器EL2沒有對(duì)應(yīng)的頁(yè)表
。如果沒有VHE,那這個(gè)Hypervisor必須把一部分駐留在EL2做高權(quán)限操作
,而Host Linux還是運(yùn)行在EL1。這樣
,很多操作需要從EL1陷入EL2
,改完再回到EL1的Linux核心,多了一層跳轉(zhuǎn)
。有了VHE
,那么Host Linux核心直接運(yùn)行在EL2,可以操作EL1的4層頁(yè)表的頁(yè)表寄存器
,軟件上不用做修改
。硬件上,這些訪問(wèn)會(huì)被重定向到EL2
,以保證權(quán)限

 

對(duì)于1型虛擬機(jī),比如Xen

,這個(gè)改動(dòng)沒有影響
。這里我們要提一下QNX的虛擬機(jī),它是1型虛擬機(jī)
。QNX是目前唯一一個(gè)能達(dá)到Asil-D等級(jí)的操作系統(tǒng)(包含Hypervisor)
。如果需要實(shí)現(xiàn)Asil-D級(jí)別的系統(tǒng),必須把現(xiàn)有的軟件從Linux系統(tǒng)移植到QNX
。所幸的是
,QNX也是符合Posix標(biāo)準(zhǔn)的,尤其是圖形處理器的驅(qū)動(dòng),移植起來(lái)會(huì)省事一些
。QNX不是所有的模塊都是Asil-D級(jí)
,移植過(guò)去的驅(qū)動(dòng),其實(shí)是沒有安全等級(jí)的
。QNX依靠Asil-D級(jí)的核心軟件模塊和Hypervisor
,保證99%以上的失效覆蓋率。如果子模塊出了問(wèn)題
,那只能重啟子模塊

 

前面說(shuō)到,有些廠商認(rèn)為虛擬化還不夠

,有些場(chǎng)景要物理隔離
。虛擬化的時(shí)候,硬件資源還是共享的
,只不過(guò)對(duì)軟件是透明
。這樣其實(shí)并不能完全防止硬件的沖突和保證優(yōu)先級(jí)。請(qǐng)注意
,硬件隔離是separation
,而不是分區(qū)partition,Partition是用MPU來(lái)做的
。在中控的系統(tǒng)框架圖內(nèi)
,我們把采用物理隔離的紅色部分單獨(dú)列出來(lái),如下圖:

 



此時(shí)的處理器A55和圖形處理器G31

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

 

同樣的

,圖形處理器也有物理隔離的需求
。實(shí)現(xiàn)其實(shí)并不復(fù)雜,比支持硬件虛擬化要直接
,如下圖:


由于圖形處理器面積最大的是渲染核心SC

,這部分不動(dòng)
。其余的硬件模塊,每組核都復(fù)制一份
,組和組之間用內(nèi)部總線ASN互聯(lián)
。當(dāng)拆成多個(gè)圖形處理器的時(shí)候,每個(gè)冗余模塊分別控制自己的資源
。此時(shí)
,每組GPU需要獨(dú)立運(yùn)行一個(gè)驅(qū)動(dòng)。而把所有資源融合運(yùn)行的時(shí)候
,冗余的部分自動(dòng)關(guān)閉
,由一個(gè)模塊集中調(diào)度。此時(shí)
,某些公用資源可能會(huì)遇到性能瓶頸
,但汽車通常只會(huì)要求物理隔離兩個(gè)組,分別給儀表盤和信息娛樂(lè)
,并且儀表盤所需資源較少
,融合的時(shí)候,可以啟用信息娛樂(lè)的共享單元
,從而避免瓶頸
。對(duì)于系統(tǒng)中其余的主設(shè)備,也可以利用類似的設(shè)計(jì)思路來(lái)實(shí)現(xiàn)隔離

 

有了同時(shí)支持虛擬化和硬件隔離的圖形處理器

,我們的中控芯片構(gòu)架會(huì)有如下改動(dòng):



此時(shí)圖形處理器的物理隔離和硬件虛擬化可以同時(shí)啟用,跑多份驅(qū)動(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ò)誤

,比如邏輯或者片上內(nèi)存的某一位一直粘在0或者1
,或者干脆短路及斷路。對(duì)于這一類錯(cuò)誤
,在芯片封測(cè)的時(shí)候
,我們可以使用邊界掃描和MBIST來(lái)發(fā)現(xiàn)壞掉的晶體管。這樣
,問(wèn)題就轉(zhuǎn)換為怎樣提高DFT的覆蓋率
。這一塊,業(yè)界已經(jīng)有成熟的方法了

 

僅僅有出廠測(cè)試是不夠的

,晶體管會(huì)在使用過(guò)程中慢慢老化損壞。因此
,我們需要在每次開機(jī)的時(shí)候都進(jìn)行自檢
,提前發(fā)現(xiàn)問(wèn)題,減少在系統(tǒng)運(yùn)行狀態(tài)下出錯(cuò)的可能
。此時(shí)
,我們需要使用LBIST和MBIST。其原理和出廠測(cè)試很像
,也是利用掃描鏈
,不同的是芯片里需要LBIST/MBIST控制器,用來(lái)運(yùn)行測(cè)試向量和模板
。自然,這會(huì)引入額外的成本
。覆蓋率越高
,成本相應(yīng)越大。

 

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


這么簡(jiǎn)單就實(shí)現(xiàn)了功能安全
?并沒有,有幾個(gè)問(wèn)題需要解決:

 

第一個(gè)問(wèn)題是

,比較器到底比哪些信號(hào)
以處理器為例,如果我們只是在對(duì)總線的接口上增加比較器
,芯片內(nèi)部的很多模塊
,比如寫緩沖,并不能在較短且確定的時(shí)間內(nèi)把影響傳遞到對(duì)外接口
,被比較器發(fā)現(xiàn)
。此時(shí),處理器可能是處于失效狀態(tài)而并沒有被探測(cè)出來(lái)
。那我們就不能說(shuō)當(dāng)前冗余機(jī)制能覆蓋此類失效
。為此,我們需要把比較器連到內(nèi)部子模塊接口處
,并且分析是不是能在較短時(shí)間內(nèi)看到影響
。這需要在設(shè)計(jì)階段就考慮,具體做法如下圖:

對(duì)于任何一個(gè)寄存器

,一定可以找到影響它的組合邏輯和上一級(jí)寄存器
。在這條通路上任何一位出了問(wèn)題,那么在一個(gè)時(shí)鐘周期后
,我們就可以看到寄存器輸出與其冗余的模塊產(chǎn)生不一致
。把這個(gè)節(jié)點(diǎn)記為1,然后再以1的輸入寄存器為新起點(diǎn)
,找到節(jié)點(diǎn)2
。依次類推
,我們可以往前找出一條沒有循環(huán)的通路,這條通路上的任何一點(diǎn)發(fā)生問(wèn)題
,在確定的較短時(shí)間內(nèi)
,一定會(huì)在最終輸出上反應(yīng)出來(lái)。我們把這個(gè)通路記為模塊X
。通過(guò)一定的EDA工具
,我們可以在芯片內(nèi)找出若干個(gè)模塊X,如下圖的例子:

 

這里

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

 

基于上述的思想

,我們來(lái)看處理器是怎么做的
。在EDA工具的幫助下,我們將它劃分為幾個(gè)大模塊:內(nèi)存管理單元
,寫緩沖
,取指單元,數(shù)據(jù)處理單元
,程序追蹤緩沖, 數(shù)據(jù)/指令緩存
,總線接口單元, 時(shí)鐘和重置控制單元, ECC/奇偶校驗(yàn)控制單元, 中斷接口, 監(jiān)聽控制單元
。此處
,我們沒有把片上內(nèi)存包含進(jìn)去,即使是討論緩存
,也指的是控制邏輯部分

 

每一個(gè)單元內(nèi),又可以細(xì)分成很多子模塊

。以數(shù)據(jù)處理單元為例, 又分為通用寄存器組
,存取單元,浮點(diǎn)單元
,浮點(diǎn)寄存器組
,解碼單元
,調(diào)試單元,控制信號(hào)單元
,系統(tǒng)寄存器組
,分支執(zhí)行單元等
。每一個(gè)子單元又可以再一次細(xì)分
。細(xì)分的目的是判斷在晶體管失效時(shí)
,受其影響的寄存器是不是會(huì)失效,并且這個(gè)失效能被外部比較器探測(cè)到
。這就需要把內(nèi)部信號(hào)拉到外面
。那到底怎么決定哪些信號(hào)拉出去哪些不拉
?覆蓋率是不是足夠
?工具給的節(jié)點(diǎn)和模塊信息只能作為參考
,設(shè)計(jì)人員還是要一個(gè)個(gè)檢查來(lái)做最后決定
。通常會(huì)有很多信號(hào)被拉出來(lái)
,比如Cortex-R5,20多萬(wàn)門的邏輯,最終送到比較器的信號(hào)數(shù)達(dá)2000多個(gè)
,平均每100門就有一個(gè)信號(hào)。

 

在芯片過(guò)認(rèn)證的時(shí)候

,如果IP本身沒有過(guò)經(jīng)過(guò)認(rèn)證,或者以前沒有被廣泛采用
,認(rèn)證機(jī)構(gòu)可能會(huì)需要一條條的和芯片公司討論
,看看連出來(lái)的的管腳是不是能提供足夠的失效檢測(cè)覆蓋率
。通常這些設(shè)計(jì)相關(guān)的信息
,IP公司并不會(huì)提供給芯片公司
,所以認(rèn)證公司可能會(huì)要和IP設(shè)計(jì)公司拿這些信息,導(dǎo)致更長(zhǎng)的認(rèn)證時(shí)間
。相應(yīng)的
,如果是廣泛使用的IP模塊
,這個(gè)時(shí)間可以縮短

解決了冗余設(shè)計(jì)覆蓋率的問(wèn)題

,還有第二個(gè)問(wèn)題
。如果遭受電磁沖擊或者射線影響
,即使用了冗余設(shè)計(jì),也可能兩個(gè)模塊同一時(shí)間產(chǎn)生一樣的錯(cuò)誤
。這個(gè)比較容易處理
,只要把兩個(gè)同樣的邏輯
,輸入錯(cuò)開幾拍就可以
。在輸出的時(shí)候
,錯(cuò)開相同的拍數(shù)
,使得比較器還是看到相同的結(jié)果

 

第三個(gè)問(wèn)題,復(fù)制了一份邏輯,并且比較器發(fā)現(xiàn)了錯(cuò)誤

,能把他糾正過(guò)來(lái)嗎?很可惜
,不能。除非復(fù)制兩分邏輯
,三個(gè)同時(shí)比較。這樣的代價(jià)就是再增加原先100%的邏輯部分面積
,對(duì)于大的處理器設(shè)計(jì),基本沒人這么做
。如果是小的處理邏輯,比如看門狗電路
,倒是可以

 

第四

,邏輯比較器本身,也是可能出錯(cuò)的
。這類錯(cuò)誤已經(jīng)被ISO26262定義
,也就是所謂的潛藏錯(cuò)誤Latent Fault
。如果發(fā)現(xiàn)比較器本身的失效覆蓋率不夠
,那同樣可以對(duì)比較器采用冗余設(shè)計(jì)
,做比較器的比較器
,提高它的覆蓋率
。對(duì)于Asil-D來(lái)說(shuō)
,潛藏錯(cuò)誤覆蓋率需要達(dá)到90%
,而Asil-B是60%

 

以上都是對(duì)于邏輯錯(cuò)誤的分析

。還有一類是內(nèi)存錯(cuò)誤。這里內(nèi)存指的是片上內(nèi)存,也包含嵌入式閃存
。內(nèi)存的錯(cuò)誤比較容易發(fā)現(xiàn),通常ECC就可以做到99%覆蓋率
,1位糾正多位報(bào)錯(cuò)
。有些內(nèi)存
,比如一級(jí)指令緩存
,只支持奇偶校驗(yàn)
,不支持糾正

 

對(duì)于邏輯的冗余和內(nèi)存的ECC

,為了驗(yàn)證探測(cè)機(jī)制本身是不是能達(dá)到設(shè)計(jì)的要求
,芯片里面需要加入錯(cuò)誤注入
。請(qǐng)注意
,錯(cuò)誤注入機(jī)制本身并不是為了驗(yàn)證芯片里單點(diǎn)錯(cuò)誤失效和多點(diǎn)錯(cuò)誤失效率
,只是為了驗(yàn)證錯(cuò)誤探測(cè)機(jī)制

 

綜上所述

,邏輯冗余和內(nèi)存ECC是幫助我們達(dá)到Asil-B/D等級(jí)的必要手段。沒有冗余設(shè)計(jì)的時(shí)候
,把一個(gè)程序在一個(gè)核上運(yùn)行兩遍
,然后比較結(jié)果
,也是一種通向高等級(jí)安全的辦法
,但僅僅適用于簡(jiǎn)單的
,實(shí)時(shí)性要求不高的運(yùn)算
。如果存在永久錯(cuò)誤
,這個(gè)方法就會(huì)失效
。同樣
,用兩個(gè)非冗余處理器同時(shí)做相同運(yùn)算
,也是一種方法。但如果計(jì)算很復(fù)雜
,這樣做不但會(huì)增加系統(tǒng)延遲和帶寬
,成本也并不低

 

上述兩種方法并不能從本質(zhì)上改善安全等級(jí),如果最終安全等級(jí)需要Asil-D

,這兩種方法會(huì)要求拆解后也得達(dá)到Asil-B
。而Asil-B的單點(diǎn)90%覆蓋率
,不用冗余機(jī)制同樣很難達(dá)到。還有一種方法
,單路計(jì)算,另一路判斷其結(jié)果是不是合理
。作為監(jiān)測(cè)的這一路提高到Asil-D。這只有在特定場(chǎng)景才有可能應(yīng)用
,我們后面會(huì)討論到

 

綜上所述
,要做通用的Asil-B/D,最好從設(shè)計(jì)開始就使用邏輯冗余和內(nèi)存ECC

 

實(shí)際設(shè)計(jì)中

,特別是對(duì)于處理器
,在冗余設(shè)計(jì)之外
,還有一套錯(cuò)誤發(fā)現(xiàn)和糾正機(jī)制
。Arm把它稱作RAS (Reliability
,Availability
,Serviceability)
。RAS并不能代替冗余設(shè)計(jì)來(lái)實(shí)現(xiàn)Asilb-B/D
,畢竟它的覆蓋率太低
。但有些場(chǎng)景,比如ECC報(bào)錯(cuò)
,指令報(bào)錯(cuò)
,這套機(jī)制可以在不重啟核心的情況下糾正錯(cuò)誤
,或者阻止錯(cuò)誤在糾正前被擴(kuò)散(Data Poisoning)
,又或者記錄下錯(cuò)誤時(shí)的上下文
。這是它的優(yōu)點(diǎn)
,在沒有冗余設(shè)計(jì)的芯片里也是有一些用處的

 

讓我們結(jié)合ISO26262文檔,來(lái)看看Arm的面向汽車應(yīng)用的IP是怎么實(shí)現(xiàn)高等級(jí)功能安全的




上面是A76AE配置圖

,也就是面向汽車的A76
,它引入了Split-Lock的設(shè)計(jì)
。正常情況下
,可以當(dāng)4核SMP用
,在冗余模式下
,核心內(nèi)所有的邏輯和內(nèi)存都復(fù)制兩份
,互為備份
。這兩種模式需要重啟來(lái)進(jìn)行切換
,不能動(dòng)態(tài)切換
,對(duì)于汽車應(yīng)用來(lái)說(shuō)足夠
。核心內(nèi)部添加的比較器
,約占5%的面積
,頻率也會(huì)有5%左右的損失。

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

 

Arm還有一個(gè)支持汽車Asil-D等級(jí)的處理器A65AE

,可以作為小核
,放在不同的處理器組
,并和大核通過(guò)CMN600AE總線互聯(lián)
,提供高能效比的異構(gòu)計(jì)算
。A65AE支持單核雙線程,通過(guò)增加一個(gè)寄存器組
,使得兩個(gè)軟件線程可以在一個(gè)物理核上共享流水線,并且對(duì)軟件透明
。這其實(shí)最初來(lái)自于網(wǎng)絡(luò)處理器的需求
,執(zhí)行單元經(jīng)常等待高延遲的讀傳輸
。為了提高流水線利用率
,A65AE增加了5%左右的硬件寄存器
,提高了20%左右的總性能

 

下圖是輔助駕駛芯片里A76AE和A65AE的各種組合

。在汽車上
,尤其是在輔助駕駛的領(lǐng)域
,同樣存在同時(shí)需要大小核的場(chǎng)景:大核跑決策
,單線程性能要求高
;小核跑計(jì)算
,能效比要求高



接下來(lái)看看Arm新的實(shí)時(shí)處理器Cortex-R52

,通常它被當(dāng)作安全島來(lái)使用
,是整個(gè)芯片的安全設(shè)計(jì)基石
。在R52上
,各種安全機(jī)制均有所體現(xiàn)
,包括鎖步
,實(shí)時(shí)虛擬化
,地址隔離
,內(nèi)存ECC
,總線ECC
,在線MBIST,LBIST
,在線軟件測(cè)試庫(kù),RAS
,如下圖所示:



R52的同時(shí)支持鎖步和Split-Lock模式。鎖步模式下
,只有一個(gè)核,冗余部分僅僅復(fù)制邏輯
,不復(fù)制內(nèi)存
,邏輯就是額外的成本
,沒法省掉
。Split-Lock模式
,配置完整的兩套核
,包括邏輯與內(nèi)存,平時(shí)作為Split模式使用
,相當(dāng)于兩個(gè)AMP
,在進(jìn)入Lock模式時(shí),其中一套的內(nèi)存不起作用
。此外,由于采用的是MPU的虛擬化
,地址并沒有重映射,只是多了一層訪問(wèn)檢查
。這也就意味著地址對(duì)軟件不透明
,不同的虛擬機(jī)可以看到別人的地址
,只不過(guò)沒法訪問(wèn)

 

R52的最大亮點(diǎn)是實(shí)現(xiàn)了實(shí)時(shí)虛擬化

,這是為了軟件達(dá)到更高的安全等級(jí)而準(zhǔn)備的
。和A系列基于MMU的虛擬化不同
,它是在原來(lái)的EL1 MPU基礎(chǔ)上
,添加了EL2 2MPU
。同時(shí)
,為了保證R系列的實(shí)時(shí)性,避免我們前文提到的SMMU訪內(nèi)延遲極大增加的問(wèn)題,R52沒有采用內(nèi)存映射
,也不轉(zhuǎn)換地址
,而是用片上內(nèi)存
,做兩層的權(quán)限檢查
。用戶可以指定幾十個(gè)區(qū)域
,顆粒度可以不同
,但是沒法做到頁(yè)表那么多的條數(shù)。在R52上
,由于沒有A系列的EL3,安全啟動(dòng)就需要先進(jìn)入EL2
,然后再建立信任鏈
,流程和A系列類似。

 

另一個(gè)重要的安全設(shè)計(jì)是支持在線的MBIST和SBIST

。在線MBIST原理并不復(fù)雜,它在片上內(nèi)存接口前添加控制邏輯
,不斷探測(cè)是不是有處理器那邊發(fā)過(guò)來(lái)的傳輸。如果沒有
,那就趁空閑時(shí)間讀寫內(nèi)存并做測(cè)試
。SBIST就是針對(duì)處理器IP的在線軟件測(cè)試
。我們可以把這個(gè)測(cè)試運(yùn)行在某個(gè)虛擬機(jī)上
,通過(guò)中斷來(lái)周期性的切換
,花5%的時(shí)間來(lái)不停檢測(cè)硬件
。當(dāng)然,必須把虛擬機(jī)切軟硬件換時(shí)間保證在較小范圍內(nèi)
,不影響實(shí)時(shí)任務(wù)的調(diào)度。

 

這兩種在線測(cè)試

,可以作為開機(jī)自檢的補(bǔ)充,也可以作為在鎖步/ECC機(jī)制但點(diǎn)錯(cuò)誤覆蓋率不夠時(shí)的補(bǔ)充
,更可以作為發(fā)現(xiàn)潛藏錯(cuò)誤的補(bǔ)充
。但是在高等級(jí)的安全設(shè)計(jì)中
,尤其是在安全島的設(shè)計(jì)里
,僅僅靠這兩種在線測(cè)試發(fā)現(xiàn)單點(diǎn)錯(cuò)誤還是不夠的
,也只能作為補(bǔ)充

 

其他方面

,R52還對(duì)MPU編程做了優(yōu)化
,不是像以前需要針對(duì)一個(gè)CP15寄存器填,填完再用內(nèi)存壁壘指令確保寫入次序?div id="jpandex" class="focus-wrap mb20 cf">,F(xiàn)在采用多組寄存器方式,基本20-30時(shí)鐘周期就可以完成虛擬機(jī)切換的寄存器編程。此外中斷寄存器放到了cluster內(nèi)部
,不用再通過(guò)AXI口出去,減少一些延遲

 

再來(lái)看看中斷控制器GIC600AE。以AE結(jié)尾的IP表示在原有的基礎(chǔ)上做了功能安全設(shè)計(jì)

,可以支持到Asil-D
。GIC600AE結(jié)構(gòu)如下圖:



和處理器一樣

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


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

 

由于目前GIC600AE還比較新,對(duì)于一些老的設(shè)計(jì)

,可能并沒有與之匹配的中斷控制器可用
。這種情況下
,就只能把和安全相關(guān)的工作用輪詢來(lái)完成
,避免走中斷通道。輪詢的對(duì)象可以是一段ECC保護(hù)的內(nèi)存
,也可以是有冗余設(shè)計(jì)的硬件鎖或者外置exclusive monitor。

 

MMU600AE也是類似的安全設(shè)計(jì)

,在此我們不深入討論。對(duì)于Coresight這樣的片上調(diào)試系統(tǒng)
,由于本身并不涉及安全
,它的錯(cuò)誤被稱作safe fault
,不計(jì)入考慮范圍
。 我們接下去看看CMN600AE。

 

CMN600是Arm服務(wù)器總線IP

,它最大的特點(diǎn)是網(wǎng)狀拓?fù)浣Y(jié)構(gòu),對(duì)外支持AMBA CHI接口
,內(nèi)部改用路由結(jié)構(gòu)轉(zhuǎn)發(fā)數(shù)據(jù),并提供硬件一致性和系統(tǒng)緩存,還支持多芯片互聯(lián)
。CMN600在T16FFC上可以做到2Ghz,極大的拓展了帶寬
,非常適合ADAS這類有大量異構(gòu)計(jì)算的應(yīng)用



CMN600AE做了功能安全設(shè)計(jì)

,引入了完整的端到端的失效探測(cè)機(jī)制
。如上圖,整個(gè)總線被分成三類模塊
,主設(shè)備,總線
,從設(shè)備。主設(shè)備與總線
,總線與從設(shè)備之間
,總線內(nèi)部,會(huì)有錯(cuò)誤探測(cè)編碼
,也就是EDC。各處的EDC策略可以是不同的



這是主設(shè)備與總線,總線與從設(shè)備接口處的EDC
,和GCI600AE的有些相似
,只不過(guò)更全
。對(duì)于一些控制類信號(hào)
,采用復(fù)制的方法,有時(shí)候把兩根線正負(fù)反轉(zhuǎn)
;對(duì)于數(shù)據(jù)線和地址線,采取添加奇偶位的做法

 

在總線內(nèi)部,由于網(wǎng)狀總線的特點(diǎn)是把傳輸轉(zhuǎn)成管腳更少的包FLIT傳輸

,所以在每個(gè)包后面
,加了CRC-8數(shù)據(jù)作為校驗(yàn)
,而不是添加管腳
。對(duì)于總線處理模塊,仍舊采用邏輯鎖步和內(nèi)存ECC來(lái)做安全設(shè)計(jì)
。此外,CMN600在傳輸上加了計(jì)數(shù)器
,如果從設(shè)備端超時(shí)不響應(yīng)
,那就報(bào)異常

 

除了鎖步

,ECC和傳輸線保護(hù)
,有一類IP模塊設(shè)計(jì)
,可以使用簡(jiǎn)單一些的方法,來(lái)達(dá)到一定的安全等級(jí)
。下圖是一個(gè)簡(jiǎn)單的圖像信號(hào)處理單元,從前到后
,流水分別是Raw域
,RGB域
,YUV域
,每個(gè)域都包含了各自的子模塊。模塊之間
,包括到DDR的傳輸,使用傳輸線安全設(shè)計(jì)
。而子模塊內(nèi)部
,如果輸出結(jié)果是單調(diào)遞增
,單調(diào)遞減或者在某一區(qū)域內(nèi)的
,就可以用帶冗余的簡(jiǎn)單邏輯做硬件監(jiān)控,來(lái)實(shí)現(xiàn)Asil-B/D等級(jí)


我們?nèi)?/span>RGB域上的Local Tome Mapping為例。Local Tome Mapping的本意是

,對(duì)于高動(dòng)態(tài)HDR或者標(biāo)準(zhǔn)動(dòng)態(tài)范圍SDR的圖
,可以把局部的亮度調(diào)整到一個(gè)合適范圍內(nèi),效果如下圖
?div id="4qifd00" class="flower right">
;谶@個(gè)假設(shè)
,我們可以寫簡(jiǎn)單邏輯
,看某個(gè)區(qū)域的像素是不是顏色保持不變
,而亮度和原來(lái)比有合理提高
。這個(gè)簡(jiǎn)單的邏輯,可以使用鎖步來(lái)確保高等級(jí)功能安全
。根據(jù)功能安全的功能分解原則,Asil-D可以分解為Asil-D的監(jiān)控模塊和QM的功能模塊
,這樣
,還是能保證整個(gè)Local Tome Mapping子模塊的高安全等級(jí)



以上是IP模塊級(jí)別對(duì)于安全設(shè)計(jì)的考量
,接下來(lái)我們談下模塊級(jí)實(shí)時(shí)性設(shè)計(jì)。

 

所謂實(shí)時(shí)性

,是在一個(gè)確定的,比較小的時(shí)間內(nèi)處理完任務(wù)
。很多時(shí)候,我們其實(shí)并不是真的需要實(shí)時(shí)性
,而只是需要一個(gè)比較高的平均性能
。Arm的R系列專門為嚴(yán)格的實(shí)時(shí)性設(shè)計(jì):確定的幾十ns的中斷響應(yīng)時(shí)間;緊耦合內(nèi)存保證流水線在一個(gè)時(shí)鐘周期就能訪問(wèn)指令和數(shù)據(jù)
;內(nèi)部總線具有QoS保證優(yōu)先級(jí);不存在頁(yè)表
,MPU做在核心內(nèi)部
,無(wú)需外部訪問(wèn)
。真實(shí)的應(yīng)用場(chǎng)景可能并不需要納秒級(jí)的響應(yīng)時(shí)間
,哪怕是馬達(dá)控制,系統(tǒng)響應(yīng)在毫秒級(jí)也足夠了
。而毫秒與納秒差了1百萬(wàn)倍
。這就給了Arm的A系列機(jī)會(huì)。

 

A系列最大的不確定性來(lái)自于訪問(wèn)外部?jī)?nèi)存時(shí)的延遲

。我們前面在討論虛擬機(jī)的時(shí)候分析過(guò),最差情況下
,一次頁(yè)表讀取,可能需要20倍的訪存時(shí)間
,差不多是3us。為了使A系列有可能用于實(shí)時(shí)性任務(wù)
,軟件上的優(yōu)化是必須的
,包括虛擬機(jī)上下文切換等
。硬件上
,可以縮短特權(quán)級(jí)切換時(shí)間,也可以采取固定分配來(lái)提高頁(yè)表查找命中率
,還可以固定分配某塊緩存或者片上內(nèi)存給某處理器。方法很多
,不一一列出

 

以上的優(yōu)化可以減少單個(gè)處理單元的延遲

。但是復(fù)雜系統(tǒng)里有很多主設(shè)備
,它們之間共享內(nèi)存和其他從設(shè)備,是有可能產(chǎn)生阻塞和死鎖的
。死鎖可以在設(shè)計(jì)流程過(guò)程中通過(guò)充分的驗(yàn)證來(lái)發(fā)現(xiàn),而阻塞就得靠?jī)?yōu)先級(jí)QoS設(shè)計(jì)來(lái)避免了
。下面我們看看CMN600AE是如何處理的

 

實(shí)時(shí)處理最簡(jiǎn)單的方案是給傳輸分優(yōu)先級(jí)

。芯片中的總線和從設(shè)備根據(jù)優(yōu)先級(jí)來(lái)決定先后處理
。但是僅僅采用優(yōu)先級(jí)會(huì)有個(gè)問(wèn)題,就是某些內(nèi)部資源
,比如緩沖,表項(xiàng)已經(jīng)被低優(yōu)先級(jí)的傳輸占用了
。此時(shí)如果來(lái)一個(gè)高優(yōu)先級(jí)的傳輸
,由于之前的還沒有完成,就會(huì)出現(xiàn)高優(yōu)先級(jí)被低優(yōu)先級(jí)阻塞的情況
。怎么辦
?可以預(yù)先保留相應(yīng)的資源給高優(yōu)先級(jí)。



如上圖

,在每個(gè)與主設(shè)備的接口處,都有一個(gè)QoS模塊
,里面包含了一個(gè)優(yōu)先級(jí)定義,可以被軟件編程
。這個(gè)優(yōu)先級(jí)會(huì)隨著傳輸?shù)娇偩€的每一個(gè)部分
,每個(gè)部分都根據(jù)優(yōu)先級(jí)來(lái)給它相應(yīng)的資源。有時(shí)候
,同樣高優(yōu)先級(jí)的請(qǐng)求過(guò)多,超過(guò)了系統(tǒng)資源的承受范圍
。這時(shí)候
,CMN600AE的內(nèi)部模塊
,會(huì)告訴請(qǐng)求傳輸?shù)哪K重傳
,并給它一個(gè)籌碼。每請(qǐng)求一次
,籌碼加一。下次這個(gè)籌碼就會(huì)隨著新的請(qǐng)求一起傳過(guò)來(lái)
,只要資源有空閑
,那么擁有最高籌碼的請(qǐng)求將被允許。QoS模塊還負(fù)責(zé)統(tǒng)計(jì)它所管理的傳輸
,看看平均延遲是多少,傳輸間隔是多少
,然后動(dòng)態(tài)調(diào)整其優(yōu)先級(jí)

 

CMN600AE另一個(gè)很重要的特性是支持片間硬件一致性互聯(lián)

。對(duì)于輔助駕駛芯片
,當(dāng)面積大到一定程度,比如400mm^2@16nm
,良率會(huì)迅速下跌
。這時(shí)候,進(jìn)一步增加面積不是一個(gè)好的選擇
。應(yīng)對(duì)的辦法是實(shí)現(xiàn)片間互聯(lián)
,減少單個(gè)die的面積
。當(dāng)然
,實(shí)現(xiàn)高速的PHY本身也會(huì)引入相當(dāng)大的面積,TSMC16FFC上一個(gè)支持PCIe Gen4x16的PHY就要6個(gè)平方毫米
,相當(dāng)于四核A55加DSU,這里需要做好取舍
。片間互聯(lián)也會(huì)引入額外的片間延遲
,可能會(huì)達(dá)到50ns



如上圖,有了CMN600AE和片間互聯(lián)協(xié)議CML

,我們就可以把MMU600AE和GIC600AE全部串聯(lián)起來(lái)
,實(shí)現(xiàn)片間虛擬化和中斷系統(tǒng)
,對(duì)軟件完全透明
。其中,MMU600AE訪存的實(shí)時(shí)性靠固定分配虛擬機(jī)
,以及使用大頁(yè)表來(lái)保證,目的是消除頁(yè)表項(xiàng)的未命中
。對(duì)于中斷系統(tǒng)的實(shí)時(shí)性
,片內(nèi)的話使用傳統(tǒng)的SPI/PPI,問(wèn)題不大
,片外的話,只能使用PCIe的消息中斷機(jī)制MSI了
。支持消息中斷需要ITS表
,類似于頁(yè)表,也存放在內(nèi)存中
,也有類似緩存的設(shè)計(jì)。只要保證ITS緩存條目足夠多
,映射的設(shè)備數(shù)量不太多
,也是可以消除未命中,提高實(shí)時(shí)性的

 

以上是關(guān)于保證實(shí)時(shí)性的一些考量

。接著來(lái)看看AEC-Q100,和芯片設(shè)計(jì)相關(guān)的是溫度和電壓

 

溫度設(shè)計(jì)相對(duì)簡(jiǎn)單,只要工藝允許

,標(biāo)準(zhǔn)庫(kù)和內(nèi)存單元支持
,那只需在做后端時(shí)加入溫度限制條件即可?div id="m50uktp" class="box-center"> ,F(xiàn)在新的中控和輔助駕駛多用TSMC16FFC
,可以支持-40C~150C的節(jié)溫,相當(dāng)于環(huán)境-40C~125C
,其代價(jià)是犧牲一定的頻率和面積。

 

ESD測(cè)試是對(duì)接口的要求

,包括2000V+的HBM和6A+的CDM
。和封裝相關(guān),也和芯片IO設(shè)計(jì)相關(guān)
。和數(shù)字部分IP一樣,PHY和GPIO也需要使用IP來(lái)支持AEC-Q100
。此處的GPIO指的是200Mhz以下的低速IO
,包括但并不限于SPI/PWM/I2C等接口協(xié)議

 

GPIO為例

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

 

同時(shí)

,GPIO本身同樣需要支持功能安全,也就是要加入探測(cè)電路
,對(duì)各類可能產(chǎn)生的失效報(bào)警
。相對(duì)來(lái)說(shuō)
,模擬電路失效種類較少
,比較容易做到Asil-D。相應(yīng)的
,IP還得提供FMEA和FMEDA報(bào)告
,供芯片公司過(guò)認(rèn)證

 



上圖是集成在芯片內(nèi)部的GPIO,集成時(shí)

,除了要插入一些特殊的單元來(lái)完成不同電壓的IO模塊隔離,還需要注意一定的IO上電次序

至此

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



讓我們回頭看看上面的中控芯片結(jié)構(gòu)圖。最重要的是紅色框內(nèi)的安全島

,由R52和緊耦合內(nèi)存
,中斷控制器,總線
,內(nèi)存控制器,以及DMA控制器,硬件鎖
,SRAM等組成
。理想情況下,每一個(gè)模塊都需要是Asil-B/D的
。如果做不到,那么至少R52
,緊耦合內(nèi)存和硬件鎖做到
。由它們構(gòu)成安全的基石,用來(lái)輪詢其余模塊是否發(fā)生故障
。同時(shí),這個(gè)安全島還可以作為系統(tǒng)控制器
,來(lái)控制其余模塊的電源
,電壓和時(shí)鐘狀態(tài);否則
,還需要一個(gè)Asil-B/D的電源管理的有限狀態(tài)機(jī)來(lái)做這件事情,具體可以參考CMN600AE里時(shí)鐘,P/Q通道和重置信號(hào)的設(shè)計(jì)

 

作為信息娛樂(lè)域的處理器

,多媒體,加解密
,總線,中斷控制器
,調(diào)試系統(tǒng)等均無(wú)需安全等級(jí)
,出錯(cuò)不影響駕駛。需要安全等級(jí)的是儀表盤
,Asil-B級(jí)。由于我們這里已經(jīng)做了隔離設(shè)計(jì)
,所以不需要考慮信息娛樂(lè)域的大小核以及其他主設(shè)備對(duì)其產(chǎn)生的影響
。內(nèi)存控制器雖然是共享的,但只要做好了類似CMN600AE的QoS
,保留出相應(yīng)的資源
,也不用擔(dān)心被低優(yōu)先級(jí)阻塞

 

黃色框內(nèi)作為儀表盤處理器的A55

,很難被替換成R52
,因?yàn)閳D形處理器通常需要支持MMU的操作系統(tǒng)
。此處的操作系統(tǒng)
,可以是Asil-B/D級(jí)的QNX等,也可以是Asil-B/D級(jí)虛擬機(jī)之上建立的實(shí)時(shí)操作系統(tǒng)
。另一方面
,A55雖然有ECC和RAS機(jī)制
,但并不支持鎖步
,很難做到通用場(chǎng)景下的Asil-B等級(jí)。至于同樣被隔離的圖形處理器G31
,更沒有安全設(shè)計(jì)
。那怎么把儀表盤做到Asil-B?一旦發(fā)生故障
,比如儀表盤畫不出正確的圖層,或者干脆不響應(yīng)
,我們可以把A55和G31排除在安全狀態(tài)之外
,讓R52驅(qū)動(dòng)外置LED燈告知駕駛員錯(cuò)誤信息。這樣
,就把問(wèn)題歸到了怎樣用Asil-D級(jí)的安全島探測(cè)錯(cuò)誤。這個(gè)就相對(duì)要簡(jiǎn)單多了
?div id="d48novz" class="flower left">
?梢杂?jì)算每一幀r的CRC,看看是不是連續(xù)幾幀不變
;也可以定期讓A55響應(yīng)中斷或者喂狗
,又或者同時(shí)采用

 

在這里,我們引入了一個(gè)概念

,出錯(cuò)處理
。在失效發(fā)生后
,系統(tǒng)需要在失效容忍時(shí)間間隔(FTTI)內(nèi)進(jìn)入安全狀態(tài)
。所謂的安全狀態(tài),可以是之前的正常運(yùn)行狀態(tài)
,也可以是應(yīng)急的處理狀態(tài)
。之前儀表盤的錯(cuò)誤警告LED就是一種應(yīng)急處理的安全狀態(tài)。

 

對(duì)于鎖步設(shè)計(jì)

,最簡(jiǎn)單的做法就是重置整個(gè)邏輯
。如果是處理器,那就需要重啟相應(yīng)的處理器核心
。而這個(gè)重啟
,必須在失效容忍時(shí)間間隔內(nèi)完成
,否則
,還是要被視作失效。通常
,這個(gè)最短容忍時(shí)間是10毫秒到100毫秒
,和系統(tǒng)應(yīng)用場(chǎng)景有關(guān)

 

對(duì)于簡(jiǎn)單的微控制器

,100毫秒甚至10毫秒重啟并不困難
。但對(duì)于一個(gè)復(fù)雜的處理器,重啟就是麻煩事了
。如果按照傳統(tǒng)的開機(jī)流程
,那幾秒鐘是需要的,沒法符合要求
。那我們就只剩下兩條路,第一個(gè)是使用虛擬機(jī)
。如果發(fā)生失效的并不是Hypervisor所運(yùn)行的處理器核
,可以只重啟某個(gè)虛擬機(jī)來(lái)實(shí)現(xiàn)加速。對(duì)于重要的高實(shí)時(shí)任務(wù)
,還可以兩個(gè)虛擬機(jī)跑同一個(gè)業(yè)務(wù),互為備份
,一個(gè)出問(wèn)題那立刻切另外一路
;也可以用一個(gè)虛擬機(jī)待機(jī),看其余哪個(gè)虛擬機(jī)重啟
,立刻開始接手那個(gè)虛擬機(jī)的業(yè)務(wù)
。如果是Hypervisor所運(yùn)行的處理器核重啟
,那優(yōu)化重啟過(guò)程
,保存當(dāng)前上下文環(huán)境至內(nèi)存
,并且盡量調(diào)整驅(qū)動(dòng)啟動(dòng)步驟,做到最先使用的主設(shè)備優(yōu)先初始化
?div id="jfovm50" class="index-wrap">?梢詤⒖际謾C(jī)上的Suspend To Ram機(jī)制
,手機(jī)基本上可以做到休眠時(shí)全芯片下電
,數(shù)據(jù)保留在DDR,喚醒時(shí)處理器起來(lái)調(diào)用顯示模塊
,先顯示之前保存的圖層
,再啟動(dòng)圖形處理器渲染新的幀,做到無(wú)明顯感覺
。利用這種機(jī)制,對(duì)于儀表盤失效
,可以先告警
,然后在毫秒級(jí)的時(shí)間內(nèi)完成相應(yīng)子系統(tǒng)重啟。


再來(lái)看看媒體部分的安全設(shè)計(jì)問(wèn)題

。上圖中是倒車后視的子系統(tǒng),圖像信號(hào)處理是C71(Asil-B)
,R52(Asil-D)
,總線NIC450(QM),DMA330(QM)
,SRAM(帶ECC)
,顯示模塊D71(QM)。子系統(tǒng)要求做到Asil-B等級(jí)
。由于并不是所有模塊都做到了Asil-B,我們需要對(duì)其做失效樹分析
。真正出現(xiàn)失效的場(chǎng)景
,在于顯示畫面凍結(jié)在某一幀。瞬時(shí)錯(cuò)誤引起的一些問(wèn)題
,比如某幀畫面有壞點(diǎn),并不構(gòu)成失效
。因此
,我們要做的事情就變成兩件:先用R52從顯示模塊獲取每一幀的CRC,看看是不是連續(xù)多幀都不變
,如果出錯(cuò)
,立刻亮燈告警,這個(gè)計(jì)算必須在失效容忍時(shí)間間隔內(nèi)完成
;其次,開機(jī)或者周期性運(yùn)行LBIST/MBIST
,看看是不是存在永久錯(cuò)誤
,有的話也需要告警。只要圖像的源頭C71有Asil-B
,R52高于Asil-B
,我i們可以放松對(duì)其余幾個(gè)模塊探測(cè)瞬時(shí)錯(cuò)誤的要求

 

接下來(lái)我們看輔助駕駛的芯片框架圖

,和中控不同,輔助駕駛需要感知和決策
,是一個(gè)復(fù)雜的實(shí)時(shí)運(yùn)算過(guò)程
,沒有辦法通過(guò)安全島監(jiān)測(cè)來(lái)達(dá)到高等級(jí)安全
,只能通過(guò)處理器本身來(lái)保證
。所以這里的處理器全部換成了帶冗余設(shè)計(jì)的A76AE和A65AE。虛擬化在這個(gè)系統(tǒng)里并不是必須
,MMU600AE僅僅是為了虛實(shí)地址轉(zhuǎn)換
。由于沒有采用虛擬機(jī),各個(gè)處理單元之間的數(shù)據(jù)隔離可以靠CMN600AE的MPU來(lái)完成
。沒有經(jīng)過(guò)CMN600AE的設(shè)備,需要在和總線之間添加MPU來(lái)實(shí)行地址保護(hù)
,并且所有的MPU配置要保持一致
。另一方面,使用MPU也限制了分區(qū)不能太多
,否則就需要映射到內(nèi)存
。到底使用虛擬機(jī)還是MPU進(jìn)行隔離需要看應(yīng)用來(lái)決定。另外
,如果需要片間互聯(lián),那所有主設(shè)備都應(yīng)該通過(guò)NoC AE形成子網(wǎng)連到CMN600AE



這個(gè)框架的計(jì)算流是這樣的:C71(Asil-B)把數(shù)據(jù)從傳感器收集

,做固定的圖像信號(hào)處理
,把結(jié)果放到DDR;A65AE讀取數(shù)據(jù)
,進(jìn)行車道檢測(cè)等傳統(tǒng)的矢量運(yùn)算。相對(duì)于大核
,A65AE提供了高能效比的運(yùn)算能力
,適合多路并行計(jì)算。也可以把任務(wù)丟到圖形處理器來(lái)運(yùn)算
,延遲稍大
,能效比也很高。如果涉及神經(jīng)網(wǎng)絡(luò)運(yùn)算
,那A76AE會(huì)把任務(wù)調(diào)度到AI加速器上,同時(shí)在算子不足的情況下負(fù)責(zé)部分計(jì)算
。也可以調(diào)度到圖形處理器
,不存在算子不支持的問(wèn)題。當(dāng)然
,對(duì)于神經(jīng)網(wǎng)絡(luò)計(jì)算
,能效比還是趕不上專用加速器
。A76AE作為大核
,具有很高的單線程性能,可以用來(lái)做決策

 

CMN600AE作為橋梁

,連接了所有設(shè)備,并提供高帶寬
,硬件一致性以及系統(tǒng)緩存。受布局布線的限制
,還是需要NoC把帶寬和延遲需求不高的設(shè)備通過(guò)子網(wǎng)連到CMN600AE

 

最后劃一下重點(diǎn)。汽車芯片的關(guān)鍵是實(shí)時(shí)性

,功能安全
,電氣
,虛擬化
。功能安全最復(fù)雜,需要IP級(jí)就開始支持。如果不符合