嵌入式處理器架構(gòu)

大家好,我是良許。

在嵌入式開發(fā)的這些年里,我接觸過各種各樣的處理器架構(gòu),從最早做單片機(jī)時(shí)用的51內(nèi)核,到后來(lái)做汽車電子時(shí)用的ARM Cortex-A系列,再到現(xiàn)在項(xiàng)目中偶爾會(huì)碰到的RISC-V架構(gòu)。

每次換一個(gè)新架構(gòu),都需要重新熟悉它的特性和開發(fā)方式。

今天就和大家聊聊嵌入式處理器架構(gòu)這個(gè)話題,幫助大家建立一個(gè)系統(tǒng)的認(rèn)知框架。

1. 什么是處理器架構(gòu)

處理器架構(gòu),簡(jiǎn)單來(lái)說就是處理器的設(shè)計(jì)藍(lán)圖和規(guī)范。

它定義了處理器如何執(zhí)行指令、如何管理內(nèi)存、如何與外設(shè)交互等一系列核心問題。

就像蓋房子需要先有建筑設(shè)計(jì)圖紙一樣,處理器的制造也需要先有架構(gòu)設(shè)計(jì)。

從技術(shù)角度來(lái)看,處理器架構(gòu)主要包含以下幾個(gè)方面:

1.1 指令集架構(gòu)(ISA)

指令集架構(gòu)是處理器架構(gòu)的核心,它定義了處理器能夠識(shí)別和執(zhí)行的所有指令。

比如ARM架構(gòu)有自己的指令集,x86架構(gòu)也有自己的指令集,它們是完全不同的。

這就像不同的語(yǔ)言一樣,說中文的人聽不懂英文,反之亦然。

在我剛開始做嵌入式開發(fā)的時(shí)候,用的是51單片機(jī),它的指令集非常簡(jiǎn)單,只有幾十條指令。

后來(lái)轉(zhuǎn)到ARM平臺(tái),發(fā)現(xiàn)ARM的指令集要復(fù)雜得多,但也更加強(qiáng)大和靈活。

1.2 寄存器組織

寄存器是處理器內(nèi)部用于臨時(shí)存儲(chǔ)數(shù)據(jù)的高速存儲(chǔ)單元。

不同的架構(gòu)有不同數(shù)量和類型的寄存器。

比如ARM Cortex-M系列有16個(gè)通用寄存器,而x86架構(gòu)的寄存器組織方式就完全不同。

1.3 內(nèi)存管理

處理器如何訪問和管理內(nèi)存也是架構(gòu)的重要組成部分。

有些架構(gòu)支持虛擬內(nèi)存管理單元(MMU),有些只支持內(nèi)存保護(hù)單元(MPU),還有些什么都不支持。

這直接影響到系統(tǒng)能否運(yùn)行復(fù)雜的操作系統(tǒng)。

1.4 流水線和執(zhí)行單元

現(xiàn)代處理器通常采用流水線技術(shù)來(lái)提高執(zhí)行效率。

不同架構(gòu)的流水線級(jí)數(shù)、執(zhí)行單元數(shù)量和組織方式都不相同,這直接影響到處理器的性能表現(xiàn)。

2. 主流嵌入式處理器架構(gòu)

2.1 ARM架構(gòu)

ARM架構(gòu)可以說是嵌入式領(lǐng)域的絕對(duì)霸主,市場(chǎng)占有率超過90%。

我在外企做汽車電子的時(shí)候,用的就是ARM Cortex-A系列處理器。

ARM架構(gòu)的成功主要得益于其低功耗、高性能和良好的生態(tài)系統(tǒng)。

ARM架構(gòu)主要分為以下幾個(gè)系列:

2.1.1 ARM Cortex-M系列

這是專門為微控制器(MCU)設(shè)計(jì)的系列,主打低功耗和實(shí)時(shí)性。

我們常用的STM32就是基于Cortex-M內(nèi)核的。

比如STM32F103使用的是Cortex-M3內(nèi)核,STM32F407使用的是Cortex-M4內(nèi)核(帶DSP指令和浮點(diǎn)運(yùn)算單元)。

下面是一個(gè)簡(jiǎn)單的STM32 HAL庫(kù)示例,展示如何初始化GPIO:

#include "stm32f4xx_hal.h"

void GPIO_Init_Example(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    
    /* 使能GPIOA時(shí)鐘 */
    __HAL_RCC_GPIOA_CLK_ENABLE();
    
    /* 配置PA5引腳為輸出模式 */
    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  // 推挽輸出
    GPIO_InitStruct.Pull = GPIO_NOPULL;          // 無(wú)上下拉
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速
    
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
    /* 點(diǎn)亮LED */
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
}

2.1.2 ARM Cortex-A系列

這是為應(yīng)用處理器設(shè)計(jì)的系列,性能強(qiáng)大,支持運(yùn)行Linux等復(fù)雜操作系統(tǒng)。

我在外企做的汽車娛樂系統(tǒng)就是基于Cortex-A9的處理器,運(yùn)行的是定制版的Linux系統(tǒng)。

這類處理器通常主頻在幾百M(fèi)Hz到幾GHz之間,支持MMU、多核心等高級(jí)特性。

2.1.3 ARM Cortex-R系列

這是為實(shí)時(shí)系統(tǒng)設(shè)計(jì)的系列,介于M系列和A系列之間。

主要用于對(duì)實(shí)時(shí)性要求極高的場(chǎng)合,比如汽車的安全系統(tǒng)、工業(yè)控制等。

2.2 x86/x64架構(gòu)

x86架構(gòu)主要由Intel和AMD主導(dǎo),在PC和服務(wù)器領(lǐng)域占據(jù)統(tǒng)治地位。

雖然在傳統(tǒng)嵌入式領(lǐng)域應(yīng)用不多,但在工業(yè)PC、邊緣計(jì)算等場(chǎng)景中也有一定的應(yīng)用。

x86架構(gòu)的特點(diǎn)是性能強(qiáng)大、生態(tài)成熟,但功耗相對(duì)較高。

Intel推出的Atom系列處理器就是專門針對(duì)嵌入式和移動(dòng)設(shè)備的低功耗版本。

我見過一些工業(yè)控制系統(tǒng)使用x86架構(gòu)的嵌入式主板,主要是因?yàn)樾枰\(yùn)行一些只有x86版本的專業(yè)軟件。

2.3 RISC-V架構(gòu)

RISC-V是近年來(lái)異軍突起的開源指令集架構(gòu),由加州大學(xué)伯克利分校開發(fā)。

它最大的特點(diǎn)就是完全開源,任何人都可以免費(fèi)使用,不需要支付授權(quán)費(fèi)用。

RISC-V采用模塊化設(shè)計(jì),基礎(chǔ)指令集非常精簡(jiǎn),只有40多條指令,然后可以根據(jù)需要添加各種擴(kuò)展模塊。

這種設(shè)計(jì)理念非常適合定制化需求強(qiáng)烈的嵌入式應(yīng)用。

雖然RISC-V目前的生態(tài)還不如ARM成熟,但發(fā)展勢(shì)頭非常迅猛。

國(guó)內(nèi)很多芯片廠商都在積極布局RISC-V,比如平頭哥、芯來(lái)科技等。

我最近也在關(guān)注RISC-V的發(fā)展,考慮在一些新項(xiàng)目中嘗試使用。

2.4 MIPS架構(gòu)

MIPS架構(gòu)曾經(jīng)在嵌入式領(lǐng)域占有一席之地,特別是在網(wǎng)絡(luò)設(shè)備和消費(fèi)電子產(chǎn)品中。

但近年來(lái)市場(chǎng)份額逐漸被ARM蠶食。

MIPS的特點(diǎn)是指令集簡(jiǎn)潔、流水線效率高,但生態(tài)系統(tǒng)相對(duì)薄弱。

2.5 其他架構(gòu)

除了上述主流架構(gòu),還有一些專用或小眾架構(gòu),比如:

  • PowerPC架構(gòu):主要用于航空航天、工業(yè)控制等高可靠性領(lǐng)域
  • AVR架構(gòu):Arduino使用的就是AVR內(nèi)核的單片機(jī)
  • 8051架構(gòu):雖然古老,但在一些簡(jiǎn)單應(yīng)用中仍然活躍
  • DSP架構(gòu):專門用于數(shù)字信號(hào)處理的架構(gòu),如TI的C2000系列

3. 處理器架構(gòu)的關(guān)鍵特性

3.1 RISC vs CISC

處理器架構(gòu)從指令集設(shè)計(jì)理念上可以分為RISC(精簡(jiǎn)指令集)和CISC(復(fù)雜指令集)兩大類。

RISC架構(gòu)的特點(diǎn)是指令數(shù)量少、指令格式統(tǒng)一、每條指令執(zhí)行時(shí)間固定。

ARM、RISC-V、MIPS都屬于RISC架構(gòu)。

RISC架構(gòu)的優(yōu)勢(shì)是設(shè)計(jì)簡(jiǎn)單、功耗低、容易實(shí)現(xiàn)流水線,非常適合嵌入式應(yīng)用。

CISC架構(gòu)的特點(diǎn)是指令數(shù)量多、指令功能復(fù)雜、指令長(zhǎng)度可變。

x86就是典型的CISC架構(gòu)。

CISC架構(gòu)的優(yōu)勢(shì)是代碼密度高、功能強(qiáng)大,但設(shè)計(jì)復(fù)雜、功耗較高。

在實(shí)際開發(fā)中,我發(fā)現(xiàn)RISC架構(gòu)的處理器通常更容易上手,匯編代碼也更容易理解。

比如ARM的匯編代碼就比x86的匯編代碼簡(jiǎn)潔很多。

3.2 位寬

處理器的位寬指的是處理器一次能處理的數(shù)據(jù)位數(shù)。

常見的有8位、16位、32位和64位。

  • 8位處理器:如8051、AVR,適合簡(jiǎn)單控制應(yīng)用
  • 16位處理器:如MSP430,性能和功耗的平衡點(diǎn)
  • 32位處理器:如ARM Cortex-M、STM32,目前嵌入式主流
  • 64位處理器:如ARM Cortex-A53/A72,用于高性能應(yīng)用

位寬越大,處理器能夠直接處理的數(shù)據(jù)范圍就越大,尋址空間也越大。

但位寬增加也會(huì)帶來(lái)功耗和成本的增加。

在實(shí)際項(xiàng)目中,需要根據(jù)應(yīng)用需求選擇合適的位寬。

我在做單片機(jī)項(xiàng)目的時(shí)候,發(fā)現(xiàn)32位處理器已經(jīng)成為主流選擇。

即使是一些簡(jiǎn)單的應(yīng)用,也傾向于使用32位MCU,因?yàn)閮r(jià)格已經(jīng)降到了可以接受的范圍,而且開發(fā)效率更高。

3.3 主頻和性能

處理器的主頻(時(shí)鐘頻率)是衡量性能的重要指標(biāo)之一,但不是唯一指標(biāo)。

同樣主頻的不同架構(gòu)處理器,性能可能相差很大。

在嵌入式系統(tǒng)中,我們通常使用DMIPS(Dhrystone MIPS)或CoreMark來(lái)衡量處理器的實(shí)際性能。

比如ARM Cortex-M4在100MHz主頻下,性能大約是125 DMIPS。

下面是一個(gè)簡(jiǎn)單的性能測(cè)試代碼示例:

#include "stm32f4xx_hal.h"
#include <stdio.h>

#define TEST_ITERATIONS 1000000

void Performance_Test(void)
{
    uint32_t start_tick, end_tick;
    volatile uint32_t result = 0;
    
    /* 記錄開始時(shí)間 */
    start_tick = HAL_GetTick();
    
    /* 執(zhí)行測(cè)試循環(huán) */
    for(uint32_t i = 0; i < TEST_ITERATIONS; i++)
    {
        result += i * 2;
        result -= i / 2;
    }
    
    /* 記錄結(jié)束時(shí)間 */
    end_tick = HAL_GetTick();
    
    /* 計(jì)算執(zhí)行時(shí)間 */
    uint32_t elapsed_time = end_tick - start_tick;
    
    printf("Test completed in %lu ms\n", elapsed_time);
    printf("Result: %lu\n", result);
}

3.4 功耗特性

功耗是嵌入式系統(tǒng)設(shè)計(jì)中非常重要的考慮因素,特別是對(duì)于電池供電的設(shè)備。

不同架構(gòu)的處理器在功耗方面差異很大。

ARM Cortex-M系列在低功耗方面做得非常出色,支持多種低功耗模式:

  • Sleep模式:CPU停止,外設(shè)繼續(xù)運(yùn)行
  • Stop模式:CPU和大部分外設(shè)停止,保持RAM數(shù)據(jù)
  • Standby模式:僅保持備份寄存器和RTC,功耗最低

下面是一個(gè)進(jìn)入低功耗模式的示例:

#include "stm32f4xx_hal.h"

void Enter_Sleep_Mode(void)
{
    /* 掛起SysTick中斷 */
    HAL_SuspendTick();
    
    /* 進(jìn)入Sleep模式 */
    HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
    
    /* 從Sleep模式喚醒后恢復(fù)SysTick */
    HAL_ResumeTick();
}

void Enter_Stop_Mode(void)
{
    /* 使能PWR時(shí)鐘 */
    __HAL_RCC_PWR_CLK_ENABLE();
    
    /* 掛起SysTick中斷 */
    HAL_SuspendTick();
    
    /* 進(jìn)入Stop模式 */
    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
    
    /* 從Stop模式喚醒后重新配置系統(tǒng)時(shí)鐘 */
    SystemClock_Config();
    
    /* 恢復(fù)SysTick */
    HAL_ResumeTick();
}

3.5 中斷系統(tǒng)

中斷系統(tǒng)是嵌入式處理器的重要組成部分。

不同架構(gòu)的中斷系統(tǒng)設(shè)計(jì)差異很大。

ARM Cortex-M系列使用NVIC(嵌套向量中斷控制器),支持多達(dá)240個(gè)中斷源,每個(gè)中斷可以配置16個(gè)優(yōu)先級(jí)。

這種設(shè)計(jì)非常靈活,能夠滿足復(fù)雜應(yīng)用的需求。

在實(shí)際開發(fā)中,合理配置中斷優(yōu)先級(jí)非常重要。

我的經(jīng)驗(yàn)是:

  • 高優(yōu)先級(jí):給時(shí)間敏感的任務(wù),如通信協(xié)議的超時(shí)處理
  • 中優(yōu)先級(jí):給普通外設(shè)中斷,如串口接收、定時(shí)器
  • 低優(yōu)先級(jí):給不太緊急的任務(wù),如按鍵掃描
#include "stm32f4xx_hal.h"

void NVIC_Config_Example(void)
{
    /* 配置USART1中斷優(yōu)先級(jí) */
    HAL_NVIC_SetPriority(USART1_IRQn, 1, 0);  // 搶占優(yōu)先級(jí)1,子優(yōu)先級(jí)0
    HAL_NVIC_EnableIRQ(USART1_IRQn);
    
    /* 配置TIM2中斷優(yōu)先級(jí) */
    HAL_NVIC_SetPriority(TIM2_IRQn, 2, 0);    // 搶占優(yōu)先級(jí)2,子優(yōu)先級(jí)0
    HAL_NVIC_EnableIRQ(TIM2_IRQn);
    
    /* 配置外部中斷優(yōu)先級(jí) */
    HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);   // 搶占優(yōu)先級(jí)0(最高),子優(yōu)先級(jí)0
    HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}

4. 如何選擇合適的處理器架構(gòu)

在實(shí)際項(xiàng)目中,選擇合適的處理器架構(gòu)需要綜合考慮多個(gè)因素:

4.1 應(yīng)用需求

首先要明確應(yīng)用的具體需求。

如果只是簡(jiǎn)單的控制任務(wù),8位或16位MCU就足夠了。

如果需要運(yùn)行復(fù)雜的算法或操作系統(tǒng),就需要32位甚至64位的處理器。

我在做汽車電子項(xiàng)目的時(shí)候,因?yàn)樾枰\(yùn)行Linux系統(tǒng)并處理大量的多媒體數(shù)據(jù),所以選擇了ARM Cortex-A系列的處理器。

而在做一些簡(jiǎn)單的傳感器節(jié)點(diǎn)時(shí),使用STM32F103這樣的Cortex-M3就完全夠用。

4.2 性能要求

要根據(jù)實(shí)際的計(jì)算量來(lái)選擇處理器性能。

過高的性能會(huì)造成成本和功耗的浪費(fèi),過低的性能又無(wú)法滿足需求。

一個(gè)實(shí)用的方法是:先估算應(yīng)用的計(jì)算量,然后選擇性能略高于需求的處理器,留出一定的余量。

我的經(jīng)驗(yàn)是留出30%左右的性能余量比較合適。

4.3 功耗限制

對(duì)于電池供電的設(shè)備,功耗是首要考慮因素。

需要選擇支持低功耗模式的處理器,并在軟件設(shè)計(jì)時(shí)充分利用這些特性。

4.4 開發(fā)生態(tài)

開發(fā)工具鏈、軟件庫(kù)、技術(shù)支持等生態(tài)因素也很重要。

ARM架構(gòu)在這方面具有明顯優(yōu)勢(shì),有大量的開發(fā)工具和參考資料可用。

4.5 成本因素

處理器的成本包括芯片價(jià)格、開發(fā)成本、授權(quán)費(fèi)用等。對(duì)于大批量產(chǎn)品,即使每顆芯片節(jié)省幾毛錢,總體也能節(jié)省很大一筆費(fèi)用。

4.6 長(zhǎng)期供貨

嵌入式產(chǎn)品的生命周期通常很長(zhǎng),需要考慮處理器的長(zhǎng)期供貨能力。

一些老牌廠商如ST、NXP通常能保證10年以上的供貨周期。

5. 處理器架構(gòu)的發(fā)展趨勢(shì)

5.1 異構(gòu)多核

現(xiàn)代嵌入式處理器越來(lái)越多地采用異構(gòu)多核設(shè)計(jì),即在一顆芯片上集成不同類型的處理器核心。

比如ARM的big.LITTLE架構(gòu),同時(shí)包含高性能核心和低功耗核心,根據(jù)負(fù)載動(dòng)態(tài)切換。

在汽車電子領(lǐng)域,我見過一些芯片同時(shí)集成Cortex-A核心(運(yùn)行Linux)、Cortex-R核心(處理實(shí)時(shí)任務(wù))和Cortex-M核心(控制外設(shè)),這種設(shè)計(jì)能夠很好地平衡性能、實(shí)時(shí)性和功耗。

5.2 AI加速

隨著邊緣AI的興起,越來(lái)越多的嵌入式處理器開始集成AI加速單元,如NPU(神經(jīng)網(wǎng)絡(luò)處理單元)。

這些專用硬件能夠大幅提升神經(jīng)網(wǎng)絡(luò)推理的效率。

5.3 安全特性

安全性在嵌入式系統(tǒng)中越來(lái)越重要。

現(xiàn)代處理器普遍集成了硬件安全模塊,如TrustZone、安全啟動(dòng)、加密引擎等。

5.4 開源架構(gòu)

RISC-V等開源架構(gòu)的興起,為嵌入式處理器市場(chǎng)帶來(lái)了新的活力。

開源架構(gòu)的優(yōu)勢(shì)在于靈活性和可定制性,能夠滿足特定應(yīng)用的需求。

6. 總結(jié)

嵌入式處理器架構(gòu)是一個(gè)博大精深的領(lǐng)域,涉及硬件設(shè)計(jì)、指令集、編譯器、操作系統(tǒng)等多個(gè)層面。

作為嵌入式開發(fā)者,我們不需要成為架構(gòu)設(shè)計(jì)專家,但需要對(duì)常見架構(gòu)有基本的了解,這樣才能在項(xiàng)目中做出正確的技術(shù)選擇。

在我的職業(yè)生涯中,從51單片機(jī)到ARM,從簡(jiǎn)單的裸機(jī)程序到復(fù)雜的Linux系統(tǒng),每一次架構(gòu)的轉(zhuǎn)變都是一次技術(shù)能力的提升。

我的建議是:先深入掌握一種主流架構(gòu)(比如ARM),然后再去了解其他架構(gòu),這樣能夠建立起系統(tǒng)的知識(shí)體系。

隨著技術(shù)的發(fā)展,新的處理器架構(gòu)不斷涌現(xiàn),但核心的設(shè)計(jì)理念是相通的。

只要掌握了基本原理,學(xué)習(xí)新架構(gòu)就會(huì)變得容易很多。

希望這篇文章能夠幫助大家建立起對(duì)嵌入式處理器架構(gòu)的整體認(rèn)識(shí),在實(shí)際項(xiàng)目中能夠做出更好的技術(shù)決策。

更多編程學(xué)習(xí)資源

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容