《自己动手写CPU》学习记录(1)——第1章
引言
此專欄的文章記錄自己學(xué)習(xí)《自己動手寫CPU》的過程。算是一個學(xué)習(xí)筆記,里面也會夾雜個人的思考以及代碼編寫。希望自己可以像作者一樣,堅持到最后。加油~~
本篇學(xué)習(xí)MIPS32處理器的基本架構(gòu)。
致謝
感謝書籍《自己動手寫CPU》及其作者雷思磊。一并感謝開源精神。
目錄
引言
致謝
處理器與MIPS
1、計算機(jī)的簡單模型
2、架構(gòu)與指令集
3、MIPS的ISA演變
4、MIPS32 Release 1 指令集架構(gòu)
1、數(shù)據(jù)類型
2、寄存器
3、字節(jié)次序
4、指令格式
5、指令集
6、尋址方式
7、協(xié)處理器CP0
8、異常
硬件描述語言 Verilog
處理器與MIPS
1、計算機(jī)的簡單模型
?計算機(jī)主要由三大組成部分構(gòu)成:處理器、輸入輸出、存儲器。
?匯編指令將助記符進(jìn)行譯碼,變?yōu)槎M(jìn)制數(shù)據(jù),供計算機(jī)識別、執(zhí)行。
高級語言先通過編譯變?yōu)閰R編語言,然后通過匯編指令將指令翻譯為二進(jìn)制編碼數(shù)據(jù)。
2、架構(gòu)與指令集
指令集架構(gòu)(ISA):包括了一套指令集和一些寄存器。面向ISA編程的最大優(yōu)點就是,程序的執(zhí)行無關(guān)處理器類型,無關(guān)硬件。ISA本身是一個抽象物,不涉及任何實現(xiàn)的硬件與環(huán)境。
微架構(gòu):是ISA的具體實現(xiàn)。
同樣的ISA,不同的微架構(gòu)則會帶來不同的性能。
根據(jù)不同的ISA,可將計算機(jī)分為兩類:復(fù)雜指令集計算機(jī)(CISC)、精簡指令集計算機(jī)(RISC)。二者的主要區(qū)別在于:
CISC指令編碼長度不一致;
RISC指令編碼長度一致且固定;
ISA種類:
x86:屬CISC范疇
ARM:Acorn RISC Machine ,屬RISC范疇,目前ARM公司僅作CPU內(nèi)核設(shè)計,不做具體的芯片制造和生產(chǎn)。其產(chǎn)品側(cè)重于低功耗、低成本,主要面向嵌入式應(yīng)用。
SPARC:Scalable Processor ARChitecture ,可擴(kuò)展處理器架構(gòu)。屬RISC范疇。
POWER:Performance Optimization With Enhanced RISC ,屬RISC范疇。IBM公司的產(chǎn)品。
MIPS:Microprocessor without Interlocked Piped Stages,無內(nèi)鎖流水線處理器。屬RISC范疇。其設(shè)計理念:使用簡單的指令,結(jié)合優(yōu)秀的編譯器,采用流水線執(zhí)行指令的硬件,就可以用更少的晶圓面積生產(chǎn)更快的處理器。龍芯處理器采用的就是此架構(gòu)。
3、MIPS的ISA演變
4、MIPS32 Release 1 指令集架構(gòu)
該參考數(shù)目的處理器設(shè)計就是遵循 MIPS32 Release 1 架構(gòu)。?
1、數(shù)據(jù)類型
- 位(b):長度為 1 bit;
- 字節(jié)(Byte):長度為8 bit;
- 半字(HalfWord):長度16 bit;
- 字(Word):長度為 32 bit;
- 雙字(Double Word):長度為 64bit;
- 另:32位單精度浮點數(shù),64位雙精度浮點數(shù);
2、寄存器
MIPS32的指令中處了 加載/存儲?指令外,其他指令都是用寄存器或者立即數(shù)作為操作數(shù)。因為寄存器的存取可以在一個時鐘周期內(nèi)完成。
MIPS32中的寄存器類別:通用寄存器、特殊寄存器。
1、通用寄存器
MIPS32架構(gòu)定義了 32 個 32 位寬的寄存器,用 $0 ~ $31表示。$0 一般用作常量 0;
實際使用中,寄存器一般遵循如下的約定:
2、特殊寄存器
MIPS32中的特殊寄存器有3個:PC(程序計數(shù)器)、HI(乘除結(jié)果高位寄存器)、LO(乘除結(jié)果地位寄存器)。乘法運(yùn)算時,HI保存乘法結(jié)果的高32位,LO保存低32位。除法運(yùn)算時,HI存儲余數(shù),LO存儲商。?
3、字節(jié)次序
?數(shù)據(jù)在存儲器中的存取都是以字節(jié)為單位的,所以當(dāng)存取的數(shù)據(jù)的位寬多于1個字節(jié)時,就需要明確數(shù)據(jù)的大小端模式。
大端模式:MSB,數(shù)據(jù)高位存儲于低地址;
小端模式: LSB,數(shù)據(jù)低位保存在低地址;
參考書中MIPS32的實現(xiàn)是大端模式。
示例:
4、指令格式
MIPS32的架構(gòu)中,指令位寬都是32。
?圖中 op 為指令碼;func 為功能碼;
5、指令集
1、邏輯操作指令
包含8條指令:and 、andi 、or 、ori 、xor 、xori 、nor 、lui
2、移位操作指令
包含6條指令:sll 、sllv 、sra 、srav 、srl 、srlv
3、移動操作指令
?包含6條指令:movn、movz、mfhi、mthi、mflo、mtlo
4、算術(shù)操作指令
包含21條指令:add、addi、addiu、addu、sub、subu、clo、clz、slt、slti、sltiu、sltu、mul、mult、multu、madd、maddu、msub、msubu、div、divu
5、轉(zhuǎn)移指令
包含14條指令:jr 、jalr 、j、?jal、b、bal、beq、bgez、bgezal、bgtz、blez、bltz、bltzal、bne
6、加載存儲指令
包含14條指令:lb、lbu、lh、lhu、ll、lw、lwl、lwr、sb、sc、sh、sw、swl、swr
7、協(xié)處理器訪問指令
包含2條指令:mtc0、mfc0
8、異常相關(guān)指令
包含14條指令,其中12條自陷指令:teq、tge、tgeu、tlt、tltu、tne、teqi、tgei、tgeiu、tlti、tltiu、tnei;系統(tǒng)調(diào)用指令:syscall、異常返回指令:eret
9、其余指令
包含4條指令:nop、ssnop、sync、pref
6、尋址方式
MIPS32架構(gòu)的尋址方式:寄存器尋址、立即數(shù)尋址、寄存器相對尋址、PC相對尋址。
1、寄存器相對尋址:
?2、PC相對尋址
7、協(xié)處理器CP0
MIPS32架構(gòu)提供了最多 4 個協(xié)處理器,分別是 CP0 ~ CP3。其中CP0用作系統(tǒng)控制,CP1、CP3作浮點處理單元。CP2用于特定實現(xiàn)。除CP0以外的協(xié)處理器都是可選的。
協(xié)處理器CP0,主要的作用:
配置CPU工作狀態(tài);
高速緩存控制;
異??刂?#xff1b;
存儲單元管理;
8、異常
硬件描述語言 Verilog
此部分本人比較了解,就不再記錄。建議初學(xué)者查看我的下面的專欄,快速了解Verilog HDL語法:
?Verilog HDL 語法整理https://blog.csdn.net/qq_43045275/category_11341294.html?spm=1001.2014.3001.5482
總結(jié)
以上是生活随笔為你收集整理的《自己动手写CPU》学习记录(1)——第1章的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件即服务的三重境界
- 下一篇: 如何在 2 分钟内入睡(二战时期美国飞行