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