在細談 RISC-V 之前,我們先了解一下甚麼是 RISC ?
中央處理器 (CPU) 的設計大致可以分成兩類:精簡指令集電腦 (RISC) 和 複雜指令集電腦 (CISC) 。
CISC 多出現在早期的處理器設計,也許大家聽過 x86 這個名詞,他就是 CISC 的代表之一喔!而現今的處理器設計大多為 RISC ,如教科書介紹的 MIPS 、手機常用的 ARM 以及本次的主題 RISC-V 都屬於 RISC。
我們可能會很好奇,為什麼複雜的指令集出現在早期呢?因為早期的編譯器不發達,程式設計師大多直接使用組合語言或是機器語言來撰寫程式,為了方便他們撰寫程式,指令集的設計者就會把所有需要的指令都設計出來,漸漸的,處理器架構就越來越龐大。
更多種類的指令對我們來說不好嗎?因為 CISC 的指令長度通常不固定,在解碼時會花費大量的時間,因此 RISC 就出現了啦!再加上編譯器的發展已經相當進步,特殊用途指令的需求也不像過往如此需要了。
RISC 有一個重要的特色:指令長度相同。這使得其解碼時間可以大幅降低,同時也使得在管線化設計 (Pipeline) 較為容易。因此整體處理器所需的晶片面積較小,也較為省電。
RISC-V 是一個精簡指令集架構,於西元 2010 年由 UC Berkeley 開啟的一個專案。與 ARM, MIPS 等最大的不同是 RISC-V 為一個開源架構,因此當公司或是任何人在製造、販售時,不需要支付專利費用。
根據不同的需求,RISC-V 被分成多個子集,包含基本指令集和擴充指令集。
之所以把擴充指令集獨立出來,是因為使用者未必需要那麼多功能。如果將他置放在其中,會耗費很大量的晶片面積,且會耗費不必要的電。
在系列文中,我們要來學習怎麼實作 RISC-V 的晶片架構(以 RV32I 為主)。相信在看完系列文,大家對於 CPU 的設計會有更深的理解,也會更清楚「計算機組織」這門課程的脈絡。