隨著道路上汽車數(shù)量的增加,我們需要更多的技術(shù)來進一步減少交通事故。過去幾年,基于雷達和攝像機的新系統(tǒng)功能的出現(xiàn)使駕駛更加安全。很多高級輔 助駕駛系統(tǒng)(ADAS)應(yīng)用,如自動巡航控制、道路偏離報警、交通信號標(biāo)志識別等,已經(jīng)成為車輛上非常方便的功能,但對車輛行為沒有影響或影響很小。然 而,現(xiàn)在這些技術(shù)開始在車輛控制中扮演積極主動的角色,如車道輔助保持(LKA)或自動緊急剎車(AEB)等,以幫助實現(xiàn)減少交通事故的既定目標(biāo)。這帶來 的挑戰(zhàn)是,當(dāng)系統(tǒng)出現(xiàn)故障時,必須確保系統(tǒng)不會對車輛和環(huán)境造成更大的損害。
本文以單前端攝像機系統(tǒng)為例,對其進行深入分析,介紹它如何通過使用AlteraCycloneVSoC確定關(guān)鍵數(shù)據(jù)流。在現(xiàn)有的診斷機制下,如何找到故障;并提供一些診斷實例,通過靈活的可編程FPGA,在系統(tǒng)級實現(xiàn)診斷。與使用通用微處理器、數(shù)字信號處理(DSP)和其他平臺相比,在某些情況下,針對實際應(yīng)用使用定制診斷方法可以提高應(yīng)用性能。
ADAS應(yīng)用中的FPGA
上文提到的很多應(yīng)用都有相對較高的計算需求,需要從雷達或視頻圖像中提取特征信號,確定目標(biāo)及其蹤跡。這通常要求高性能多核CPU體系結(jié)構(gòu)。這些CPU能夠靈活地對特殊事件重新編程,但缺點是效率較低,因為有些功能并非必需或很少使用。
功耗是需重點關(guān)注的另一因素。很多系統(tǒng)位于后視鏡前面的擋風(fēng)玻璃下面,直接暴露在陽光下,或位于散熱器前保險杠中,因此無法高效地散熱。當(dāng)使用高頻運行 的多核通用CPU體系結(jié)構(gòu)時,很難滿足性能和功耗要求。使用FPGA可同時解決這些問題。FPGA的功耗通常比標(biāo)準(zhǔn)邏輯高,但與通用計算體系結(jié)構(gòu)相比,高 效的定制實現(xiàn)某一算法實際上降低了功耗。FPGA的另一優(yōu)點是,當(dāng)實現(xiàn)流處理算法后,可以避免在內(nèi)部和外部存儲器之間傳送數(shù)據(jù)。若使用外部DDR存儲器進 行數(shù)據(jù)處理,實際功耗會非常大。
就性能而言,流處理也降低了某些應(yīng)用中遇到外部存儲器帶寬問題的風(fēng)險。FPGA內(nèi)在的可編程特性帶來了 通用計算體系結(jié)構(gòu)所具有的某些優(yōu)勢。它甚至支持系列產(chǎn)品的在現(xiàn)場更新,實現(xiàn)在系統(tǒng)編程。在某些情況下,基于FPGA開發(fā),要比基于CPU的高性能芯片體系 結(jié)構(gòu)容易得多。由于SoC越來越多,因此,F(xiàn)PGA能夠很好地結(jié)合這兩種體系結(jié)構(gòu),例如AlteraCycloneVSoC系列,它在一個芯片上集成了通 用CPU系統(tǒng)和FPGA架構(gòu)。CycloneVSoC實現(xiàn)了兩個ARMCortex-A9CPU,支持通用微控制器和處理器常用的很多外設(shè)。
性能安全
與目前市場上的其他解決方案相比,F(xiàn)PGA更加容易滿足應(yīng)用的功能安全需求。ADAS需要滿足特殊的功能安全要求。2011年,發(fā)布了載重3.5噸以上 的ISO26262標(biāo)準(zhǔn),以降低系統(tǒng)出現(xiàn)故障后造成危險狀態(tài)的風(fēng)險。這一標(biāo)準(zhǔn)要求實現(xiàn)嚴(yán)密的設(shè)計過程,在應(yīng)用執(zhí)行過程中探測隨機硬件故障,以減少系統(tǒng)性故 障。它涉及到一個系統(tǒng)及多個系統(tǒng)的分析和開發(fā),列出了系統(tǒng)中使用的每一硬件組件的指南(包括這些硬件組件上運行的軟件),設(shè)定了產(chǎn)品整個安全生命周期中的 要求。
應(yīng)用開發(fā)人員定義了專門的安全目標(biāo),針對每一目標(biāo)分配了相應(yīng)的汽車安全完整性等級(ASIL)。對于應(yīng)用中最高級別的ASIL,通常定義了每一組件從開發(fā)直至工作到壽命終了時應(yīng)滿足的要求。圖1顯示了ASlL目前的范圍,來自ADAS需要遵守的客戶需求。
圖1ADASASlL市場需求
ASIL-B是市場上的最低級別,而某些應(yīng)用則要求采用ASIL-D以支持某些功能。越來越多的ASIL有更嚴(yán)格的要求。在某些具體實現(xiàn)中,組件的通用 ASIL或者條目(系統(tǒng))等級都會帶來不必要的復(fù)雜度,對開發(fā)成本和進度有影響。建議應(yīng)詳細地了解應(yīng)用需求。這一般通過分析系統(tǒng)概念,并從中得出安全概念 和要求來實現(xiàn)。還可以把應(yīng)用分成幾種不同的步驟,具有不同的ASIL,更容易實現(xiàn),效率更高。
ADAS單前端攝像機應(yīng)用系統(tǒng)概念
本文舉例的前端攝像機應(yīng)用使用了ADAS中常見的一個圖像傳感器。圖2顯示了系統(tǒng)的整體框圖。
圖2高級單前端攝像機ADAS
一個圖像傳感器連接至圖像處理器,即AlteraCycloneVSoC。信號處理鏈和數(shù)據(jù)流被分成4部分:
◆通過把圖像變換成更實用的表示,在像素級上進行底層處理。
◆對行圖像或者塊圖像進行中間級處理,使用相應(yīng)的算法,例如Sobcl濾波器或者Canny邊沿探測算法等,提取出邊沿等特征。
◆進行高級處理,提取出每一幀的數(shù)據(jù),探測目標(biāo)并分類。
◆跟蹤識別出的目標(biāo),決定在危險環(huán)境下是否需要采取措施,例如剎車或者換擋電子控制單元(ECU)等會要求與微控制器進行通信。
在FPGA上能夠非常高效地實現(xiàn)底層和中間級處理,但用戶也可以在CycloneVSoC硬核處理器系統(tǒng)(HPS)的Cortex-A9處理器等CPU 上實現(xiàn)某些中間級處理。高級處理主要是控制代碼,可以映射到HPS中的一個或兩個Cortex-A9上。處理鏈的最后一步是目標(biāo)跟蹤和判決,可以在外部微 控制器上完成這一步。
在整個處理過程中,每一步將輸入數(shù)據(jù)進行簡化得到更有意義的數(shù)據(jù),數(shù)據(jù)減少意味著提高了安全臨界。因此,底層實現(xiàn) 可以分成質(zhì)量管理(QM)或底層ASIL(如ASIL-A)。這樣的原因是,一個像素期間引入的故障對后續(xù)算法性能的影響很小,可以忽略。在這個例子中, 假設(shè)中間級處理符合ASIL-A或者ASIL-B,識別目標(biāo)并進行分類的高級處理應(yīng)符合ASIL-B。對目標(biāo)進行分類后,生成目標(biāo)表,提供給微控制器,進 行目標(biāo)跟蹤和判決。這是信號鏈最關(guān)鍵的部分,我們假設(shè)它應(yīng)該符合ASIL-D,這對汽車的行力有直接影響。
組件應(yīng)用功能
圖3顯示了單前端攝像機系統(tǒng)實例的總體結(jié)構(gòu)圖。由一個外部電源管理電路為CycloneVSoC提供電源。當(dāng)供電電壓不在額定工作范圍內(nèi)時,單獨的電壓 監(jiān)控功能會產(chǎn)生復(fù)位。外部非易失存儲器連接至四路串行外設(shè)(quadSPI)模塊,用于系統(tǒng)啟動過程中裝入應(yīng)用程序并配置FPGA。執(zhí)行應(yīng)用代碼,存儲數(shù) 據(jù)和圖像幀時,我們使用DDR存儲器。通過SPI連接外部微控制器,進行目標(biāo)探測和最終判決,通過CAN總線接口與汽車基礎(chǔ)結(jié)構(gòu)的其他部分進行通信。
圖3單前端攝像機系統(tǒng)實例
圖4CycloneVSoC模塊視圖
圖4顯示了單前端攝像機應(yīng)用中的圖像處理器模塊。由于具體實現(xiàn)各不相同,因此,并沒有詳細介紹FPGA的具體執(zhí)行過程,但是對于在更高抽象級別上介紹不同分析步驟這樣的目的來說已經(jīng)足夠了。
圖像傳感器配置
假設(shè)由HPS系統(tǒng)對傳感器進行配置。圖5顯示了圖像傳感器配置涉及的模塊。一 個或者兩個Cortex-A9CPU執(zhí)行代碼,數(shù)據(jù)通過I2C模塊從DDR存儲器傳送至傳感器。DDR存儲器和L2高速緩存的單錯誤糾正雙錯誤探測 (SECDED)糾錯碼(ECC)功能保護相關(guān)的存儲器。奇偶校驗功能保護CPU的L1高速緩存。這包括TAGRAM,以及全局歷史緩沖和分支預(yù)測單元的 分支目標(biāo)訪問高速緩存。傳感器配置相關(guān)的邏輯(CPU、L3互聯(lián)、I2C等等)只能使用一次,沒有特殊的診斷。要探測可能出現(xiàn)的故障時,可以采用寫入和回 讀方法。例如,CPU0向傳感器寫入配置數(shù)據(jù),CPU1將其回讀。后續(xù)進行寫入數(shù)據(jù)和回讀數(shù)據(jù)對比,能夠探測到寫會話過程中引入故障。一個CPU寫數(shù)據(jù), 另一個CPU讀回數(shù)據(jù),這樣做的優(yōu)點是能夠探測到其中一個CPU中的永久故障。只有一個CPU用于寫讀會話時,可以采用各種軟件來探測永久故障。但是,由 于需要對CPU內(nèi)部功能進行詳細的分析,增加了軟件的復(fù)雜度,因此,這實現(xiàn)起來難度很大。
圖5圖像傳感器配置涉及的模塊
汽車中使用的某些傳感器支持在每一圖像幀的輔助掃描線中傳送某些配置寄存器數(shù)據(jù)。通過這一功能,可以檢查每一幀的傳感器設(shè)置,不需要通過I2C接口來讀取寄存器。不需要CPU開銷,傳送幀數(shù)據(jù)時就可以在FPGA中實現(xiàn)這種檢查。
上面所有的配置寄存器測試的優(yōu)點是,不僅覆蓋了CycloneVSoC故障,而且還有傳感器外部接口或者傳感器內(nèi)部帶來的故障。某些應(yīng)用會使用更復(fù)雜的 處理器體系結(jié)構(gòu),在總線上進行內(nèi)部診斷。但是內(nèi)置診斷機制不一定覆蓋I2C模塊中的故障和外部故障,仍然需要考慮這些故障,采用與前面討論的相似的機制。 在這一場景中,增加的處理器診斷功能帶來的優(yōu)勢有限。
底層圖像處理
圖6顯示了圖 像處理級涉及到的模塊。在很多情況下,圖像傳感器通過并行視頻接口連接至圖像處理器。對于CycloneVSoC應(yīng)用,可以例化Altcra視頻和圖像處 理套裝的視頻端口,用于接收來自傳感器的數(shù)據(jù)。然后,將這些數(shù)據(jù)傳送至圖像預(yù)處理模塊。數(shù)據(jù)處理完成后,被寫入到DDR存儲器中。
圖6底層圖像處理級涉及到的模塊
大部分圖像傳感器含有傳送定義好的測試幀的功能,不需要傳送正常的圖像數(shù)據(jù)。定義好輸入數(shù)據(jù)后,也就定義了圖像處理模塊的輸出數(shù)據(jù)。然后進行后續(xù)測試。 例如,通過對輸出數(shù)據(jù)進行循環(huán)冗余校驗(CRC),找到系統(tǒng)中出現(xiàn)的任何永久故障。這種測試覆蓋了整個數(shù)據(jù)通路中的永久故障。它支持對外部連接問題進行測 試,測試視頻端口和圖像處理模塊中的問題,以及DDR存儲器數(shù)據(jù)傳輸過程中出現(xiàn)的問題。檢查永久故障的另一方法是在FPGA架構(gòu)中實現(xiàn)測試碼型發(fā)生器,可 以將其復(fù)用到視頻端口的輸入通路上。定義好的測試碼型覆蓋了整個通路中的很多故障。
某些圖像傳感器還具有在每一幀中傳送幀計數(shù)器等其他 功能。這一功能有助于探測幀間隙,或者像素時鐘、幀同步問題等。除此之外,視頻端口實現(xiàn)了每一行像素數(shù)以及行數(shù)計數(shù)器功能。如果計數(shù)器與設(shè)置好的數(shù)值不一 致,則產(chǎn)生一個中斷。這也可以用于探測像素時鐘,以及垂直和水平同步問題。
還應(yīng)該探測到FPGA中一個模塊傳輸數(shù)據(jù)時數(shù)據(jù)的變化。前面提到的測試碼型或者測試幀方法涵蓋了大部分永久故障,但是,探測不到瞬時故障。實現(xiàn)各種 圖像流水線時,會出現(xiàn)瞬時故障。使用AlteraAvalon流協(xié)議在模塊之間傳輸數(shù)據(jù)時,可能會例化兩個不同的接口,保證瞬時故障對兩個通路中的數(shù)據(jù)傳 輸有不同的影響。不同圖像流水實例見圖7。
圖7不同圖像流水實例
在很多設(shè)計中,也需要使用存儲器緩沖來臨時存儲數(shù)據(jù)。對于這種情況,也可以例化奇偶校驗或者SECDEDECC,這是因為FPGA架構(gòu)中的用戶存儲器已經(jīng)為具體實現(xiàn)提供了所需的奇偶校驗位。
數(shù)據(jù)最終被寫入到DDR存儲器之后,在傳輸時,應(yīng)隨時計算數(shù)據(jù)的校驗和??梢葬槍γ恳粠蛘邘械拿恳恍衼硗瓿蛇@一工作。在大部分情況下,由于后面的中 間級處理可以按行或者模塊來讀取數(shù)據(jù),很容易檢查這些數(shù)據(jù),因此,可以按行來進行這一工作。Altera提供了CRC引擎,可以在用戶設(shè)計的不同部分來例 化它,產(chǎn)生流數(shù)據(jù)CRC校驗和。在牛成的數(shù)據(jù)上附加校驗和也能夠覆蓋F2H橋接和DDR控制器中可能出現(xiàn)的故障。然后由SECDEDECC以及校驗和來保 護DDR中的數(shù)據(jù)。需要考慮的另一種故障是數(shù)據(jù)地址可能會改變。為避免覆寫其他關(guān)鍵的應(yīng)用數(shù)據(jù),DDR存儲器控制器實現(xiàn)了存儲器保護功能,可以定義20種 不同的存儲器區(qū),它們有不同的訪問權(quán)限,而主機可以訪問某些特定的區(qū)域。
中間級圖像處理
只查看圖像中關(guān)注的特征,減少了生成數(shù)據(jù)。數(shù)據(jù)減少后,由于故障會導(dǎo)致后續(xù)處理步驟中丟失目標(biāo),因此,丟失特征的風(fēng)險增大了,也增大了應(yīng)用程序出現(xiàn)錯誤的風(fēng)險。圖8顯示了中間級圖像處理涉及的模塊。
圖8中間級圖像處理涉及的模塊
需要讀回前面圖像預(yù)處理級產(chǎn)生的數(shù)據(jù)以及存儲在外部DDR存儲器中的數(shù)據(jù),以便進行各種圖像處理。由于前面的數(shù)據(jù)附加了CRC校驗和,因此,可以再次對其進行檢查,查看數(shù)據(jù)存儲在外部存儲器期間是否被修改,或者傳送至FPGA時是否被修改。
最好在這一處理級實現(xiàn)一些存儲器緩沖,以便臨時存儲數(shù)據(jù)??梢栽俅吾槍@些存儲器例化奇偶校驗或SECDEDECC,實現(xiàn)相對較高的診斷覆蓋。
探測邏輯本身的故障吋,可以把兩個相同的邏輯模塊放到一起,鎖定它們。為能夠?qū)ΤR姷墓收线M行探測,可以針對它們使用不同的時鐘網(wǎng)絡(luò),或者運行一個具有兩周期時鐘延時的邏輯模塊。對兩個模塊的輸出進行連續(xù)對比,能夠探測到一個模塊中出現(xiàn)的故障。
在這一中間處理級產(chǎn)生了新數(shù)據(jù)后,需要再次寫入外部DDR存儲器。與前面的步驟相同,可以對新數(shù)據(jù)計算校驗和,將這一校驗和寫入到存儲器中。DDR存儲器控制器中的存儲器保護功能會探測地址故障,避免覆寫其他關(guān)鍵的應(yīng)用數(shù)據(jù)。
高級圖像處理
高級圖像處理階段包括目標(biāo)探測和目標(biāo)分類。從軟件術(shù)語的角度來講,這一級主要是控制代碼,因此,非常適合在CPU上運行。在我們的應(yīng)用實例中,可以在HPS中開發(fā)這類功能。圖9顯示了高級圖像處理涉及到的模塊。
雖然實現(xiàn)了兩個CPU,但是并沒有運行在鎖定模式下,即在程序執(zhí)行過程中,一個CPU進行檢查,另一個自動探測故障。如果一個執(zhí)行安全關(guān)鍵代碼或者 數(shù)據(jù)的CPU出現(xiàn)了故障,那么,應(yīng)用程序應(yīng)保證對計算結(jié)果進行檢查。這可以通過在相同的CPU或者另一個CPU上冗余執(zhí)行代碼來完成。如果一個CPU出現(xiàn) 了永久故障,在一個CPU上相同的代碼執(zhí)行了兩遍,那么,CPU中的故障可能會產(chǎn)生兩次錯誤的結(jié)果,從而不會被探測到??梢酝ㄟ^實現(xiàn)兩種不同的程序來避免 這一問題,但是,其缺點是增加了開發(fā)工作量,針對同一程序開發(fā)兩種不同的版本。另一種選擇是在第二個CPU上運行冗余計算。一個CPU中的永久故障不會影 響另一個CPU,因此,只要故障不是在共享資源中,那么,不需要運行不同的軟件就能夠探測到錯誤執(zhí)行。運行算法兩次,然后對比結(jié)果,也可以探測到瞬時故 障。對于軟件在兩個CPU上執(zhí)行的情況,很有可能相同的代碼并沒有在兩個CPU的同一周期中執(zhí)行,因此,進行計算然后對比冗余執(zhí)行的輸出即可發(fā)現(xiàn)故障。在 不同的時間執(zhí)行代碼的優(yōu)點是能夠有效地測出常見的故障。
圖9高級圖像處理涉及到的模塊
正如前面所提到的,由SECDEDECC或者奇偶校驗功能來保護處理過程所涉及到的存儲器。
而在L3互聯(lián)、DDR存儲器控制器、片內(nèi)RAM控制器的其他邏輯中還可能會出現(xiàn)故障。對于較大的數(shù)據(jù),可以采用CRC校驗和來保護數(shù)據(jù)不會被修改。為中 間級處理模塊生成的數(shù)據(jù)建立了校驗和后,可以在用于后面的操作之前對其進行檢查。對于較小的數(shù)據(jù),存儲這些數(shù)據(jù),讀回就可以確定傳輸是否正確。對于讀取用 于處理的數(shù)據(jù),可以讀兩遍,在使用之前進行對比。當(dāng)數(shù)據(jù)規(guī)模有限時這不會產(chǎn)生太大的處理開銷,但是能夠很好地測出故障。
用于探測故障的其他特性包括每一Cortex-A9處理器中的存儲器管理單元(MMU)、DDR存儲器控制器中的存儲器保護特性,以及看門狗定時器。
結(jié)論
ADAS是確保越來越擁擠的道路更加安全的下一波創(chuàng)新。這些系統(tǒng)的性能需求給現(xiàn)有以及未來的標(biāo)準(zhǔn)商用貨架(COTS)產(chǎn)品帶來了挑戰(zhàn),而可編程FPGA 在這方面有很大的優(yōu)勢。實現(xiàn)定制碼型發(fā)生器或者定制看門狗定時器等專用診斷功能,能夠提高對系統(tǒng)的診斷覆蓋范圍,而這些功能很難在標(biāo)準(zhǔn)產(chǎn)品上實現(xiàn)。流處理 是圖像處理的第一步,減少了存儲器讀寫操作,因此,能夠減少故障的發(fā)生,降低功耗,提高應(yīng)用性能。很多COTS產(chǎn)品在設(shè)計時并沒有體現(xiàn)功能安全,使用具有 功能安全的平臺和開發(fā)環(huán)境,與擅長功能安全的合作伙伴合作,都有利于系統(tǒng)的整體實現(xiàn)。