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