天天看點

ARM + RISC-V雙核鎖步DCLS Lockstep技術總結一、lockstep技術分類 二、ARM+RISC-V雙核lockestep設計實作

基于《A Loosely-Coupled Arm and RISC-V Locksteping Technology》文章總結

一、lockstep技術分類

ARM + RISC-V雙核鎖步DCLS Lockstep技術總結一、lockstep技術分類 二、ARM+RISC-V雙核lockestep設計實作

文中将lockstep技術總結成三類:系統級、分系統級和CPU級。系統級擁有兩套不同的CPU、Caches和Memory,輸入通過IO進入各自Memory和Caches,輸出通過Checker比較結果;分系統級共享同一個Memory和IO,輸入進入各自Cache,輸出通過Checker比較結果;CPU級隻有兩套CPU核心,Cache和Memory均使用同一套。

 二、ARM+RISC-V雙核lockestep設計實作

2.1 總體架構

下圖ARM+RISC-V雙核lockstep實作架構,其中RISC-V使用了rocket chip五級流水,并添加了用于同步的xLockstep子產品。上層軟體将同一套程式通過兩套編譯器生成底層代碼,分别分發給ARM和RISC-V,RISC-V在FPGA中實作。該架構不能完成指令級的錯誤糾正,隻能實作錯誤檢測和備援備份功能。

ARM + RISC-V雙核鎖步DCLS Lockstep技術總結一、lockstep技術分類 二、ARM+RISC-V雙核lockestep設計實作

xLockstep為該架構設計的重點,其内部結構如下圖所示。該結構有四個接口:兩個APB3總線和兩個中斷輸出。結構内部有16個内部寄存器、1個timer、1個checker子產品、1個FSM狀态機和資料控制互動邏輯。所有寄存器均32bits位寬,2個狀态寄存器為隻讀,具體寄存器含義如下。

ARM + RISC-V雙核鎖步DCLS Lockstep技術總結一、lockstep技術分類 二、ARM+RISC-V雙核lockestep設計實作

2.2 内部寄存器

  • 控制寄存器:用來控制系統運作,低6bits使用。
ARM + RISC-V雙核鎖步DCLS Lockstep技術總結一、lockstep技術分類 二、ARM+RISC-V雙核lockestep設計實作
  1. bit_Enable: 置1使能工作,置0複位系統;
  2. bit_SynchroX: 置1開始同步兩邊CPU并對比資料,當其完成後自動回到0;
  3. bit_DataSel_x: 該2bit用于訓示對比資料的數量;
  4. bit_EnInterrupt: 用于使能中斷信号接口,當xLockstep完成對比中斷就會拉高,直到bit_SynchroX位回0;
  5. bit_ErrorSolve: 用來通知xLockstep發現的錯誤CPU已經解決了。
  • 狀态寄存器:用來訓示xLockstep系統目前狀态,低4bits有效。
ARM + RISC-V雙核鎖步DCLS Lockstep技術總結一、lockstep技術分類 二、ARM+RISC-V雙核lockestep設計實作
  1. bit_busy: 訓示目前系統是否忙;
  2. bit_stateFSM_x: 訓示内部FSM狀态機目前值;
  • TimeOut寄存器:用來給Timer子產品賦初值。
  • 資料寄存器:對比的資料。
  • 錯誤狀态寄存器:用于訓示系統錯誤。
ARM + RISC-V雙核鎖步DCLS Lockstep技術總結一、lockstep技術分類 二、ARM+RISC-V雙核lockestep設計實作
  1. bit_timeOut_Corex: 如果timeout寄存器設定的時間内其中一個core沒有達到checkpoint,那麼将該bit位置1;
  2. bit_dataError_x: 用于訓示資料寄存器的哪個寄存器資料比較結果出錯;

2.3 FSM狀态機

FSM狀态機如下圖所示,主要包括六個狀态:Start、Idle、Synchro、Checker、Resume和Error。

ARM + RISC-V雙核鎖步DCLS Lockstep技術總結一、lockstep技術分類 二、ARM+RISC-V雙核lockestep設計實作

系統上電複位後進入Start狀态,Start狀态為複位後狀态,所有資料清空。Start狀态等待兩個core置位bit_Enable,隻有兩個都置位才會進入Idle狀态,其中一個清0均會跳入Start狀态。

Idle狀态下,系統會将Timeout寄存器中的數值更新到Timer中,并更新兩個狀态寄存器。系統會不停檢查控制寄存器中的設定,并根據控制寄存器數值進行相應的處理。如果其中一個core将bit_synchroX位置1,那麼狀态機會進入Synchro狀态,也就是說此時至少一個core達到了checkpoint的位置。

Synchro狀态下,系統使能timer計數,如果在規定時間内另一個核也進入到checkpoint位置并拉高bit synchroX,則狀态機進入Checker狀态。如果未能在規定時間内進入checkpoint,那麼逾時标志拉高,狀态進入Error狀态。

Checker狀态下,系統将使能checker子產品工作,并比較所有處理器的輸出。如果輸出不一緻,Checker将置位錯誤标志并進入Error狀态,如果比較一緻,則置位EndOfCheck标志,并進入Resume狀态。

進入Error狀态後,CPU需要處理目前的錯誤,并在處理完成後置位bit_ErrorSolve信号,并重新通過bit_SynchroX同步。如果錯誤修複ErrorFix的标志拉高且bit_SynchroX回0,系統進入Idle狀态。在錯誤狀态下,系統将會更新狀态和錯誤寄存器,并拉高中斷。

在Resume狀态下,系統更新狀态寄存器和中斷。系統會保持該狀态直到bit_SynchroX被清除并置位continue(與非bit_Synchro0和bit_Synchro1)。

2.4 Timer子產品

Timer子產品用于同步雙核,内部包括一個計數器。如果計數器達到timeout預設值而另一個core還沒有達到checkpoint,那麼會産生逾時error并進入Error狀态。如果沒有錯誤發生,timer會停止計數,系統進入下一個狀态。下圖是Timer子產品的結構圖以及狀态機。

ARM + RISC-V雙核鎖步DCLS Lockstep技術總結一、lockstep技術分類 二、ARM+RISC-V雙核lockestep設計實作

其内部結構較為簡單,狀态機主要包括三個狀态:Reset、Count和Timeout。Reset狀态下計數器值為0,并在enable使能後進入count狀态開始計數工作。count狀态下,計數器持續計數直到達到timeout或enable關閉(另一個核達到checkpoint)。timeout狀态下置位逾時錯誤标志,并等待enable關閉進入reset狀态。

2.5 Checker子產品

Checker子產品每個周期比較4 x 32bits寄存器結果,下圖是該子產品的結構和内部狀态機。Enable使能資料對比,DataSelX用于訓示對比寄存器的數量,EndofCheck用于訓示對比結束,ErrorDataX用于訓示各個寄存器資料對比結果是否有誤。

ARM + RISC-V雙核鎖步DCLS Lockstep技術總結一、lockstep技術分類 二、ARM+RISC-V雙核lockestep設計實作

狀态機從Idle狀态開始,如果Enable有效則進入ErrorClean狀态。Idle狀态下輸出EndOfChecker和SelectDataX清0,直到輸入Enable有效。ErrorClean狀态隻維持一個時鐘周期,并在下一周期直接進入Compare狀态。Compare狀态下,資料開始通過Data_Core0和Data_Core1一拍拍進入Checker,直到對比結束,EndofData有效進入End狀态。End狀态下,狀态機等待Enable拉低。

三、軟體實作

3.1 API

xLockstep使用APB接口作為裝置通路接口,主核和從核均通過各自的接口通路可見位址空間的寄存器。經過API封裝後,上層應用程式可以輕松的通路内部寄存器。API封裝的函數如下所示:

  1. XLOCKSTEP_init();
  2. XLOCKSTEP_synch();
  3. XLOCKSTEP_checker();
  4. XLOCKSTEP_resume();
  5. XLOCKSTEP_errorFix();
  6. XLOCKSTEP_config();
  7. XLOCKSTEP_getStatus();
  8. XLOCKSTEP_getErrorStatus();

3.2 Framework

由于主從核的異構,以及指令集的不同,程式難以做到周期級的指令對比,采用松耦合的checkpoint對比方法,能夠有效保證雙核的同步和回卷,下圖顯示這種異構的雙核對比過程。

ARM + RISC-V雙核鎖步DCLS Lockstep技術總結一、lockstep技術分類 二、ARM+RISC-V雙核lockestep設計實作

主從核執行同一套程式,但隻有主核的程式運作結果會輸出。系統首先會開始雙核的同步過程,如果同步成功,系統會儲存處理器資訊并執行程式代碼。當雙方程式均運作到checkpoint時,系統會比較兩個處理器的輸出,如果沒有錯誤則繼續到下一個checkpoint。如果在下次比較時,其中的一個核産生了錯誤并在對比過程中檢查出來,那麼系統将會回卷到上一次正确checkpoint,并重新運作程式。

checkpoint到達後,系統需要将主從核的内容存儲儲存。由于ARM和RISCV都采用了load-store架構,程式首先會将memory中的資料load到寄存器,執行指令并将結果寫回memory。需要儲存的處理器資訊包括:寄存器數值、memory數值、stack堆棧内容,這些内容的儲存對于回卷操作至關重要。saveContext()函數被調用後,首先會儲存寄存器檔案、Frame Pointer和Stack Pointer。當上述内容儲存完成後,還會儲存PC值。

儲存寄存器和stack,需要清楚處理器内部寄存器和堆棧如何工作,ARM Cortex-M3包括17個寄存器:R0-R12通用,R13用于SP,R14用于LR,R15用于PC,PSR用于程式狀态訓示。另外,M3使用R7作為FP,在程式調用過程中,SP和FP均會變化,過程如下圖所示:

ARM + RISC-V雙核鎖步DCLS Lockstep技術總結一、lockstep技術分類 二、ARM+RISC-V雙核lockestep設計實作

假設此時程式在主函數中,FP指向0x20008000位址,SP指向0x20007000位址,當程式調用function()函數後,FP指向0x20006FFC并将上一個FP位置寫入該位址,SP也會指向新的位址。

RISCV包括32個寄存器:X0常值0,X1用于傳回位址,X2用于SP,X3-X27通用,X28-X31備用。當function call發生時,同樣需要儲存上述寄存器和stack中的内容。上述的不一緻性需要考慮,因為對比資料需要從儲存的資料中提取,在發生錯誤回卷時,也需要考慮恢複的内容。盡管RISCV和ARM采用了不同的指令集,但系統儲存FP和SP的方式是相似的。

繼續閱讀