不對稱內(nèi)核的引導固件體系結(jié)構(gòu)
摘要
過去,支持不同計算內(nèi)核(對稱/不對稱架構(gòu))的處理器通常從一個特定的內(nèi)核(一般為主內(nèi)核或內(nèi)核0)引導。由于經(jīng)濟增長放緩,半導體公司力求創(chuàng)新,尋求不同的方式和方法提高經(jīng)濟效益,增加其毛利率。片上系統(tǒng)(SoC)解決方案旨在滿足多個領(lǐng)域的要求。如支持不對稱引導,各個公司可使用相同的光刻掩模將SoC的目標范圍擴展到各個不同的市場。
概述
人們對互連世界的渴望催生了獨特的系統(tǒng)架構(gòu)設(shè)計,包括使用同構(gòu)或異構(gòu)計算架構(gòu)的單核系統(tǒng)及多核架構(gòu)。
目前設(shè)計的復雜應(yīng)用需要支持在系統(tǒng)中執(zhí)行特定功能的特殊硬件加速器。這些以ASIC(特定用途集成電路)、FPGA(現(xiàn)場可編程門陣列)、GPU(圖形處理單元)等形式實現(xiàn)。這些不同的功能單元大多采用不同的指令集架構(gòu)(ISA)。
背景
過去,支持不同計算內(nèi)核(對稱/不對稱架構(gòu))的處理器通常從一個特定的內(nèi)核(一般指定為主內(nèi)核或內(nèi)核0)引導。由于經(jīng)濟增長放緩,半導體公司力求創(chuàng)新,尋求不同的方式和方法來提高經(jīng)濟效益,增加其毛利率。片上系統(tǒng)(SoC)解決方案旨在滿足多個領(lǐng)域的要求。如支持不對稱引導,各個公司可使用相同的光刻掩模將SoC的目標范圍擴展到各個不同的市場。例如,如果一個SoC有一個應(yīng)用處理器(AP)和一個實時控制器內(nèi)核,SoC可從AP或?qū)崟r控制器引導,同一個SoC不僅可用于高性能(采用AP引導方式)應(yīng)用,還可用于關(guān)鍵任務(wù)(低延遲、關(guān)鍵時間應(yīng)用)應(yīng)用。
什么是不對稱內(nèi)核?
不對稱內(nèi)核是指一個系統(tǒng)的兩個及以上的處理元件或單元擁有不同的指令集架構(gòu)(ISA)。這些內(nèi)核為整個系統(tǒng)提供特定的功能,如改善系統(tǒng)的處理能力或加快系統(tǒng)的反應(yīng)速度等。
因此不對稱內(nèi)核系統(tǒng)軟件設(shè)計就成了一個難題。如果SoC支持從多個內(nèi)核引導,問題則變得更加復雜。第一個問題是引導體系結(jié)構(gòu)。本文闡述采用不對稱內(nèi)核架構(gòu)的引導固件設(shè)計。
引導體系結(jié)構(gòu)的設(shè)計標準
在定義此類系統(tǒng)的引導體系結(jié)構(gòu)時會遇到各種問題,不是每個問題都有通用的解決方案。有時一個解決方案還需要硬件支持。以下是設(shè)計人員遇到的一些設(shè)計問題:
● 指令集架構(gòu)(ISA)兼容性
● 上電復位向量位置
指令集架構(gòu)兼容性
第一個也是最重要的設(shè)計挑戰(zhàn)是不同內(nèi)核的指令集架構(gòu)(ISA)兼容性問題。ISA是指硬件和軟件之間的邊界。ISA用于將助記符轉(zhuǎn)換成機器語言(能夠被處理器理解)。
根據(jù)ISA,引導體系結(jié)構(gòu)可分為兩個部分:
a.ISA不兼容
這意味著為一個內(nèi)核編寫的軟件無法被其它內(nèi)核理解。在此類系統(tǒng)中,引導代碼對不同的內(nèi)核是完全不同的。
b.ISA部分兼容
這意味著不同的內(nèi)核支持一個共同的ISA版本,例如,包含ARM Cortex-A和Cortex-M內(nèi)核的系統(tǒng)。對于此類系統(tǒng),引導代碼分為兩部分。
● 第一部分是特定內(nèi)核的引導代碼,實現(xiàn)單個內(nèi)核的特定軟件功能。
● 第二部分是采用通用ISA實現(xiàn)的公共引導代碼,實現(xiàn)批量引導功能。該軟件調(diào)用第一部分實現(xiàn)的特定內(nèi)核的軟件。
許多處理器架構(gòu)采用處理器ID或CPU ID等寄存器。SoC設(shè)計人員針對不同的內(nèi)核對該寄存器賦予不同的值。通過讀取該處理器ID寄存器來識別內(nèi)核類型。根據(jù)該寄存器,引導代碼可決定實現(xiàn)特定內(nèi)核的功能。要點是公共引導代碼可在不同內(nèi)核上執(zhí)行相同的指令,再根據(jù)執(zhí)行內(nèi)核產(chǎn)生不同的結(jié)果。
● 公共寄存器:
如果該寄存器是內(nèi)存映射的,那么訪問該寄存器的地址對于所有內(nèi)核都必須相同。例如,在對接ARM Cortex-Ax和Cortex-Mx時,處理器ID寄存器通過不同的助記符訪問。因此,在此類SOC設(shè)計中需要采用內(nèi)存映射寄存器,識別執(zhí)行內(nèi)核的機制也與硬件相關(guān)。
● 使用相同的指令讀取處理器ID/CPU ID:
在某些情況下,將寄存器作為某種特殊目的寄存器(Special Purpose Register)(如在PowerPC的情況下)。應(yīng)注意,相同的指令可用于通過不同的內(nèi)核訪問該寄存器。例如,當在SoC中集成Z2和Z4 PowerPC內(nèi)核時,用SPR 286寄存器訪問處理器ID。
上電復位向量位置
上電復位向量位置表示加載到內(nèi)核程序計數(shù)器的地址,當內(nèi)核復位后從該地址提取第一個指令,這對不對稱內(nèi)核SoC引導體系結(jié)構(gòu)提出了一個重大的設(shè)計挑戰(zhàn)。包含多個內(nèi)核的SoC可設(shè)計為從任何可用內(nèi)核進行引導。大多數(shù)情況下,從哪個內(nèi)核引導是可配置的,但是,由于引導軟件駐留到微處理器的ROM區(qū)域,因此引導軟件應(yīng)能夠在選定的引導內(nèi)核上運行。
那么復位向量位置為引導軟件帶來了什么挑戰(zhàn)呢?對稱內(nèi)核是絕對沒有問題的。這是因為對于對稱內(nèi)核來說,引導向量位置解析是相同的。但是,對于不對稱內(nèi)核來說,則會產(chǎn)生問題,這有兩個主要原因:
● 復位向量對于所有可引導的內(nèi)核都不同。
● 兩個或以上可引導的不對稱內(nèi)核有一個公共的復位向量位置。
復位向量對于所有可引導的內(nèi)核都不同
如果復位向量對于所有可引導的內(nèi)核都不同,那么這個問題的解決方案可在引導軟件中實現(xiàn),如下圖所示。引導軟件將位于ROM內(nèi)存區(qū)的不同位置,內(nèi)核在上電復位后將從該位置跳轉(zhuǎn)。
兩個或以上可引導的不對稱內(nèi)核有一個公共的復位向量位置
當各種不對稱可引導內(nèi)核共享復位向量時,問題會變復雜。
● 復位向量位置解析
即使復位向量位置對于兩個或以上不對稱內(nèi)核是相同的,然而,復位向量位置可用的數(shù)據(jù)的解析對于不同的內(nèi)核可能會不同。例如,如果一個SoC有兩個不對稱內(nèi)核Cortex-Ax和Cortex-Mx,那么復位向量位置對于這兩個內(nèi)核均為0x0000_0000。該地址可用的數(shù)據(jù)被這兩個內(nèi)核以不同的方式解析。Cortex-Ax將該數(shù)據(jù)解析為一個指令,導致跳轉(zhuǎn)到引導固件代碼將駐留的位置。但同樣的數(shù)據(jù)被Cortex-Mx內(nèi)核解析為堆棧指針。
● 指令集架構(gòu)不兼容
復位向量位置呈現(xiàn)的代碼可被一個內(nèi)核理解,但無法被另一個內(nèi)核理解。這可能會產(chǎn)生異常,或者使不能理解代碼的內(nèi)核進入不可預知的狀態(tài)。
在這種情況下,人們可能想把失敗內(nèi)核的復位向量位置轉(zhuǎn)到不同的地址位置,即映射到閃存或任何非易失性存儲器位置。不能僅在軟件設(shè)計中解決此類問題,還需要硬件支持。該解決方案需要SoC硬件的地址轉(zhuǎn)換邏輯,將所有可引導不對稱內(nèi)核總線上的復位向量地址轉(zhuǎn)換為復位向量表駐留的ROM存儲器區(qū)的不同位置。
結(jié)束語
本文展示了為不對稱內(nèi)核系統(tǒng)設(shè)計引導體系結(jié)構(gòu)的不同設(shè)計方法。此類系統(tǒng)的設(shè)計方法不限于本文所述內(nèi)容,但主要受SOC設(shè)計的限制。設(shè)計人員甚至可以根據(jù)硬件架構(gòu)結(jié)合使用所述不同方法。