计算机组成原理与接口技术笔记
計算機(jī)組成原理與接口技術(shù)
——基于MIPS架構(gòu)
目錄
- 計算機(jī)組成原理與接口技術(shù)
- 為什么要寫這個筆記?
- 寫給讀者
- 第一章 計算機(jī)基礎(chǔ)
- 1. 計算機(jī)結(jié)構(gòu)
- CPU
- 存儲器
- 總線
- 2. 計算機(jī)工作原理
- 基本術(shù)語
- 工作過程
- 3. 計算機(jī)結(jié)構(gòu)模型
- 馮諾依曼結(jié)構(gòu)
- 哈佛結(jié)構(gòu)
- 改進(jìn)的哈佛結(jié)構(gòu)
- 混合結(jié)構(gòu)
- 4. 計算機(jī)中的信息表示
- 數(shù)制轉(zhuǎn)換
- 整數(shù)的編碼
- 小數(shù)的編碼
- 定點數(shù)
- 浮點數(shù)
- 5. 計算機(jī)的運算基礎(chǔ)
- 整數(shù)運算
- 無符號數(shù)運算
- 有符號數(shù)運算
- 浮點數(shù)運算(難點)
- 6.計算機(jī)中的信息存儲
- 第二章 MIPS匯編語言
- 1.計算機(jī)語言
- 2.計算機(jī)指令架構(gòu)
- CISC(復(fù)雜指令集計算機(jī))
- RISC(精簡指令集計算機(jī))
- 兩種架構(gòu)的對比
- 3.MIPS匯編指令概述
- MIPS指令結(jié)構(gòu)
- MIPS操作數(shù)類型
- MIPS指令類型
- 4.MIPS指令操作數(shù)
- 寄存器操作數(shù)
- 存儲器操作數(shù)
- 立即數(shù)操作數(shù)
- 5.MIPS指令編碼
- R型指令
- I型指令
- J型指令
- 小結(jié)
- 6.MIPS常用匯編指令
- 數(shù)據(jù)傳送指令
- 裝載(Load)
- 存儲(Store)
- 特殊數(shù)據(jù)傳輸指令
- 算術(shù)運算指令
- 加減運算
- 乘法運算
- 除法運算
- 位運算指令
- 位邏輯運算指令
- 移位指令
- 程序控制指令
- 相等條件控制指令
- 無條件控制指令
- 大小條件控制指令
- 與0比較
- 與非0比較
- 7.子程序原理
- 子程序調(diào)用和返回
- 棧
- 8.MIPS尋址原理
- 操作數(shù)尋址:獲取操作數(shù)的方式
- 指令尋址:獲取下一條指令存儲地址的方式
- 9.編譯、匯編、鏈接、裝載
- 10.偽指令、宏指令和系統(tǒng)功能調(diào)用
- 偽指令
- 宏指令
- 系統(tǒng)功能調(diào)用
- 第三章 微處理器
- 1.控制器
- ALU控制信號
- 主控制器
- 2.現(xiàn)代微處理器新技術(shù)
- 3.異常處理
- 第四章 存儲系統(tǒng)
- 1.分級存儲結(jié)構(gòu)
- 2.高速緩存
- cache映射機(jī)制
- cache寫策略
- 3.虛擬存儲器
- 分段管理
- 分頁管理
- TLB
- 第五章 總線
- 1.總線分類
- 按位置分
- 按定時分
- 按數(shù)據(jù)傳輸方式分
- 按是否復(fù)用方式分
- 2.總線操作類型
- 3.AXI總線
- 4.PCI總線
- 5.外部總線
- 第六章 半導(dǎo)體存儲器接口
- 1.常見半導(dǎo)體存儲器
- 2.容量擴(kuò)展
- 3.空間映射
- 4.多類型數(shù)據(jù)訪問
- 5.存儲控制器
- 第七章 IO接口
- 1.IO尋址
- 2.IO讀寫操作函數(shù)
- 3.常見IO設(shè)備接口設(shè)計
- 開關(guān)和LED燈
- 矩陣鍵盤
- 七段數(shù)碼管
- LED點陣
- 4.GPIO
- 第八章 中斷技術(shù)
- 1.中斷控制器
- 2.AXI INTC中斷控制器
- 3.INTC編程控制
- 4.c語言中斷方式程序設(shè)計
- 5.普通中斷方式應(yīng)用
- 6.快速中斷方式應(yīng)用
- 7.GPIO中斷
- 結(jié)構(gòu)
- 相關(guān)寄存器
- 初始化程序(普通中斷)
- 中斷服務(wù)程序(普通中斷)
- 8.AXI Timer定時器
- 9.SPI接口
- 第九章 DMA技術(shù)
- 1.DMA傳輸系統(tǒng)構(gòu)成
- 2.DMA傳輸分類
- 3.DMA傳輸模式
為什么要寫這個筆記?
??課后整理筆記是一個復(fù)習(xí)的過程。上學(xué)期寫了一個數(shù)字電路的筆記,感覺這門課一下子得心應(yīng)手起來。這學(xué)期繼續(xù)這個做法,選幾門覺得難的課程整理下筆記
寫給讀者
??感謝你閱讀本筆記,轉(zhuǎn)載請注明作者。有任何問題可以與我聯(lián)系,我的郵箱是wnn2000@hust.edu.cn
第一章 計算機(jī)基礎(chǔ)
1. 計算機(jī)結(jié)構(gòu)
??計算機(jī)系統(tǒng)由軟件和硬件組成,這門課主要研究硬件
??計算機(jī)硬件包括CPU、存儲器、I/O設(shè)備等
CPU
??CPU由ALU、控制器、寄存器組成
??ALU是運算單元
??控制器負(fù)責(zé)控制信號
??CPU位數(shù) = CPU中寄存器的位數(shù) = CPU能夠一次并行處理的數(shù)據(jù)寬度 = 數(shù)據(jù)總線寬度
??例如64位計算機(jī),其CPU中寄存器的位數(shù)為64。它一次能并行處理64位的數(shù)據(jù)。它的數(shù)據(jù)總線寬度為64
存儲器
??存儲器就是內(nèi)存,由存儲矩陣構(gòu)成,最小存儲單位為Byte,即8個bit
總線
??總線是指計算機(jī)組件間規(guī)范化的交換數(shù)據(jù)的方式
??總線分為數(shù)據(jù)總線、控制總線、地址總線
??數(shù)據(jù)總線是用來傳輸數(shù)據(jù)的,是雙向的
??控制總線是控制數(shù)據(jù)傳輸方向的信號線,是雙向的
??地址總線是傳輸數(shù)據(jù)位置的,是單向的
2. 計算機(jī)工作原理
基本術(shù)語
??指令:計算機(jī)能識別并執(zhí)行的基本操作命令
??指令由操作數(shù)和操作碼組成。操作碼決定要完成什么操作,操作數(shù)指參加運算的數(shù)據(jù)及其所在的地址
??指令以二進(jìn)制的形式存在內(nèi)存中
??指令集:計算機(jī)全部指令的集合
??程序:完成既定任務(wù)的指令序列
工作過程
1.讀取指令
2.指令譯碼
3.獲取數(shù)據(jù)
4.執(zhí)行運算
5.存儲結(jié)果
3. 計算機(jī)結(jié)構(gòu)模型
馮諾依曼結(jié)構(gòu)
??計算機(jī)由控制器、運算器、存儲器、輸入設(shè)備、輸出設(shè)備五大部分組成
??程序和數(shù)據(jù)以二進(jìn)制不加區(qū)分存在存儲器(數(shù)據(jù)類型是由程序決定的)
??計算機(jī)只有一個CPU,一個存儲器,一套總線。CPU的速度越來越快,但是由于只有一個存儲器和一套總線,使得讀數(shù)據(jù)、讀指令、存放結(jié)果不能并行
哈佛結(jié)構(gòu)
??為了解決以上問題,提出哈佛結(jié)構(gòu)。提供兩個存儲器分別存放指令和數(shù)據(jù),同時提供兩套總線
??代價是增加了復(fù)雜度
改進(jìn)的哈佛結(jié)構(gòu)
??提供兩個存儲器,但只有一套總線
混合結(jié)構(gòu)
??現(xiàn)在最常見的是混合結(jié)構(gòu)
4. 計算機(jī)中的信息表示
??計算機(jī)是數(shù)字電路,存儲的信息都是二進(jìn)制信息
數(shù)制轉(zhuǎn)換
??這部分網(wǎng)絡(luò)資料很多,就不記了
整數(shù)的編碼
??原碼、反碼、補(bǔ)碼參考:https://www.jianshu.com/p/36ec7a047f29
??這里提一下模的概念,模是符號位的進(jìn)位位的權(quán)值。例如有8位二進(jìn)制,模是第9位的權(quán)值,即28=256
??負(fù)數(shù)的補(bǔ)碼為模減去該數(shù)的絕對值,這是負(fù)數(shù)補(bǔ)碼的定義,可以越過原碼和反碼
??事實上,有些負(fù)數(shù)的原碼和反碼不存在,不能通過反碼+1的方法計算補(bǔ)碼。比如計算-128的8位補(bǔ)碼,-128的8位反碼不存在,那么-128的補(bǔ)碼為:256-128=128,即1000 0000
??機(jī)器碼的概念:機(jī)器碼包括原碼、反碼、補(bǔ)碼和移碼
小數(shù)的編碼
定點數(shù)
??不需要保存小數(shù)點的位置,所有位置都用來存儲數(shù)字
??包括定點整數(shù)、定點純小數(shù)、定點帶小數(shù)
浮點數(shù)
??遵循IEEE 754編碼,分為單精度和雙精度。單精度有32位,雙精度有64位。浮點數(shù)從高位到低位分別是符號域、指數(shù)域和尾數(shù)域。其中符號域為了正負(fù)數(shù)的統(tǒng)一,需要加上偏移量
??具體過程如圖所示,首先將實數(shù)進(jìn)行二進(jìn)制小數(shù)規(guī)范化,再填入對應(yīng)的域,注意指數(shù)域需要加上偏差
??以下是特殊情況和單精度規(guī)范化浮點數(shù)的表示范圍
5. 計算機(jī)的運算基礎(chǔ)
整數(shù)運算
無符號數(shù)運算
??直接算
??溢出:當(dāng)最高為向更高位有進(jìn)位(或借位)時產(chǎn)生溢出
??產(chǎn)生的進(jìn)位或借位由狀態(tài)寄存器的CF位保存
有符號數(shù)運算
??加減統(tǒng)一為補(bǔ)碼運算
??溢出:最高位進(jìn)位狀態(tài)⊕次高位進(jìn)位狀態(tài)=1,則溢出。溢出只可能發(fā)生在同符號的數(shù)運算之間
??最高位和次高位,一個有進(jìn)位一個沒有進(jìn)位,則他們的狀態(tài)異或得1,則結(jié)果就有溢出
浮點數(shù)運算(難點)
1.檢測0操作數(shù),如果有一個是0就不用算了
2.指數(shù)對齊。小的指數(shù)向大的對齊。原因是:小的向大的對齊時,指數(shù)小的那個數(shù)的小數(shù)點左移,其尾數(shù)域右端的數(shù)字被移出,誤差小;而反過來誤差較大
3.尾數(shù)求和。都用補(bǔ)碼運算
4.結(jié)果規(guī)范化
??例題:計算1.5 - 27.5(單精度)
??首先把兩個浮點數(shù)表示出來
??把1.5的小數(shù)點左移,與-27.5的補(bǔ)碼相加。得到的結(jié)果依然是補(bǔ)碼,再變回原碼
??已經(jīng)是規(guī)范化的小數(shù)了,本題結(jié)束
6.計算機(jī)中的信息存儲
??當(dāng)數(shù)據(jù)存在連續(xù)的存儲空間時,其地址是就是存儲空間的首地址
??大字節(jié)序:高位存入低地址,低位存入高地址(MIPS采用大字節(jié)序)
??小字節(jié)序:高位存入高地址,低位存入低地址
第二章 MIPS匯編語言
1.計算機(jī)語言
??高級語言:獨立于硬件,描述算法
??匯編語言:使用助記符號和地址符號來表示指令的語言,又稱符號語言
??機(jī)器語言:依賴硬件,是二進(jìn)制代碼,計算機(jī)可以直接執(zhí)行
??匯編:把匯編語言翻譯成機(jī)器語言的過程
??匯編程序:實現(xiàn)匯編過程的軟件
??匯編語言程序:用戶用匯編語言編寫的程序
2.計算機(jī)指令架構(gòu)
CISC(復(fù)雜指令集計算機(jī))
RISC(精簡指令集計算機(jī))
兩種架構(gòu)的對比
??可以看出CISC的指令種類較多,長度不固定
??而RISC只有三類指令,長度固定。注意:RISC只有裝載和存儲可以訪問存儲器,其他指令都在寄存器之間進(jìn)行
??二者各用用處,這門課我們學(xué)習(xí)的MIPS架構(gòu)采用精簡指令集(RISC)
3.MIPS匯編指令概述
MIPS指令結(jié)構(gòu)
??MIPS匯編指令基本結(jié)構(gòu)如下圖
??在下面這條示例指令中,add是操作碼,決定這條指令進(jìn)行加法操作;a, b, c是三個操作數(shù),是操作的對象,其中a是目的操作數(shù)b, c是源操作數(shù)
add a, b, cMIPS操作數(shù)類型
??操作數(shù)只有三種,分別是寄存器、存儲器和立即數(shù)
??寄存器操作數(shù):是CPU內(nèi)部的寄存器,表示方法是美元符加上寄存器的名稱或編號,如$s0,$s7,$3
??存儲器操作數(shù):是內(nèi)部存儲器,在MIPS架構(gòu)下僅用于裝載(Load)和存儲(Store)指令。表示方法是常數(shù)加上括號寄存器的形式,其中的常數(shù)是偏移量,如4($s3)
??立即數(shù)操作數(shù):就是常數(shù),如4,8
MIPS指令類型
??指令中的u表示操作數(shù)據(jù)是無符號數(shù)。這就解釋了為什么之前說內(nèi)存中的數(shù)據(jù)類型是程序決定的
??指令中的i表示這條指令的操作數(shù)含有立即數(shù)
??數(shù)據(jù)傳送指令中的w h b分別表示這條指令針對的數(shù)據(jù)是字、半字、字節(jié)
??這里將MIPS指令按照功能分類,之后我們還會按照編碼方式分類
4.MIPS指令操作數(shù)
寄存器操作數(shù)
??MIPS有32個通用寄存器($0-$31),具體內(nèi)容如下圖
??沒列出的$26,$27寄存器保留給異常處理函數(shù)使用
存儲器操作數(shù)
??MIPS數(shù)據(jù)存儲要求邊界對齊。半字存儲地址需要為偶數(shù);字的存儲地址需要為4的整數(shù)倍。MIPS指令是32位的,即一個字,所以指令的地址也是4的整數(shù)倍
??表示方法僅有一種,是常數(shù)加上括號寄存器的形式,其中的常數(shù)是偏移量,如4($s3)
??例如,A中存儲int,A保存在$s8中,請表示A[8]
??答案為:32($8)。因為每一個int占據(jù)4個字節(jié),偏移量為32
立即數(shù)操作數(shù)
??是指出現(xiàn)在指令中的常數(shù),如下列指令中的40
addi $s1,$s2,40??立即數(shù)可以有10進(jìn)制或者16進(jìn)制表達(dá)方式。后者需要有0x作為前綴
5.MIPS指令編碼
??我們知道MIPS的指令編碼都是定長的,那么如何用二進(jìn)制編碼指令,即如何表示指令的操作碼和操作數(shù)?
??回答這個問題前,我們將指令分為R型,I型,J型三種指令。實際上,我們分類的標(biāo)準(zhǔn)是這三種指令有不同的編碼形式
R型指令
I型指令
J型指令
小結(jié)
??三種指令的編碼形式如下圖
6.MIPS常用匯編指令
數(shù)據(jù)傳送指令
裝載(Load)
??指令格式如下
lx $Rt, Imm($Rs)??顯然,裝載指令是I型指令。指令中的lx,Rt,Rs,Imm分別與I型指令的各個域?qū)?yīng)
??lx并不代表真的有l(wèi)x這個指令,在實際代碼中,要被替換成lw,lh,lhu,lb,lbu等
??lw指令將一個字的數(shù)據(jù)拷貝到寄存器。注意MIPS寄存器的左邊儲存數(shù)據(jù)的高位,存儲器的低地址存放數(shù)據(jù)的高位
??lh,lhu拷貝半字到寄存器。由于寄存器是32位,半字只有16位,所以二者需要分別進(jìn)行有符號擴(kuò)展和無符號擴(kuò)展
有符號擴(kuò)展是在高位補(bǔ)充符號位
無符號擴(kuò)展是在高位補(bǔ)充0
例如,16位立即數(shù)0x8000,進(jìn)行有符號擴(kuò)展和無符號擴(kuò)展得到如下結(jié)果
有符號擴(kuò)展:0xFFFF8000
無符號擴(kuò)展:0x00008000
??lb,lbu拷貝字節(jié)到寄存器。同樣要進(jìn)行擴(kuò)展,方式與上述一致
??以上都是規(guī)則字的裝載,下面來講非規(guī)則字的裝載。這種情況發(fā)生在地址不是4的整數(shù)倍的時候(針對MIPS架構(gòu)大字節(jié)序)
??lwl是左邊界對齊非規(guī)則字訪問。復(fù)制存儲器中從高位到低位的數(shù)據(jù),粘貼在寄存器的左邊
??lwr是右邊界對齊非規(guī)則字訪問。復(fù)制存儲器中從低位到高位的數(shù)據(jù),粘貼在寄存器的右邊
??舉個lwl的例子。lwr與例子相反,就不舉了
??從高字節(jié)的0到低字節(jié)的1,依次復(fù)制到寄存器的左邊。結(jié)果如下圖
??非規(guī)則字的裝載可以和非規(guī)則字的存儲配合使用,實現(xiàn)小字節(jié)序
存儲(Store)
??指令格式如下
sx $Rt, Imm($Rs)??存儲指令和裝載指令一樣,都是I型指令
??sx在實際代碼中為sw,sh,sb
??sw直接將寄存器中的一個字存到存儲器,注意地址必須是4的整數(shù)倍
??sh存半字,而且是低半字。因為高位是拓展而來的,不會影響數(shù)據(jù)的值
??sb存字節(jié),而且是低字節(jié)
??存儲指令中也有非規(guī)則字存儲指令
??swl是將寄存器中從左邊界開始的值,以從高位到低位的方式存到存儲器
??swr是將寄存器中從右邊界開始的值,以從低位到高位的方式存到存儲器
??swl與lwl過程相反,swr與lwr過程相反
??舉個swl的例子
??得到結(jié)果如下
??一句話概括非規(guī)則裝載存儲:裝載是中間裝到邊界,存儲是邊界存到中間
特殊數(shù)據(jù)傳輸指令
??四條都是R型指令。$Rd,$Rs代表域
??代碼如下
lui $Rt,Imm??這是I型指令,功能是把16位立即數(shù)賦給寄存器的高16位,低16位補(bǔ)0
??代碼的u不是無符號數(shù)的意思,而是高位(up)的意思
??如何給寄存器賦32位值?需要用到后續(xù)課程的邏輯運算指令
算術(shù)運算指令
加減運算
??先來看4條R型加減運算指令
add $Rd,$Rs,$Rt # 有OF作為溢出標(biāo)志位 addu $Rd,$Rs,$Rt sub $Rd,$Rs,$Rt # 有OF作為溢出標(biāo)志位,運算結(jié)果是Rs的值-Rt的值 subu $Rd,$Rs,$Rt??還有2條I型加減運算指令
addi $Rt,$Rs,Imm #Imm是16位的,高16位補(bǔ)充符號位 addiu $Rt,$Rs,Imm #Imm是16位的,高16位充0??立即數(shù)參與的時候就沒有減法了,因為只要加上一個負(fù)數(shù)就可以實現(xiàn)減法
乘法運算
mult $Rs,$Rt multu $Rs,$Rt??乘法結(jié)果的符號由參與運算的數(shù)的符號決定,所以要區(qū)分有符號和無符號(乘法的實現(xiàn)比較復(fù)雜,這只是簡單理解,想了解更多請看乘法電路)
??乘法的結(jié)果保存在特殊寄存器中。高32位存在hi寄存器,低32位保存在lo寄存器中
??想得到結(jié)果需要用到前文的mfhi,mflo等
除法運算
??與乘法類似
div $Rs,$Rt divu $Rs,$Rt??進(jìn)行$Rs/$Rt的運算,結(jié)果保存在特殊寄存器中。余數(shù)存在hi寄存器,商存在lo寄存器中
位運算指令
位邏輯運算指令
??先講與、或、或非、異或四類運算,這里都是位邏輯運算
??邏輯運算的具體功能請參考《數(shù)字電路》課程
??可以通過或非0,異或1,實現(xiàn)非運算
移位指令
??還有一類移位指令,分為邏輯移位和算術(shù)移位
# 邏輯移位指令,移入0,都是R型指令,Imm存在移位域 sll $Rd,$Rt,Imm #邏輯左移Imm srl $Rd,$Rt,Imm #邏輯右移Imm sllv $Rd,$Rs,$Rt #邏輯左移,移動的位數(shù)是$Rt的值 srlv $Rd,$Rs,$Rt #邏輯右移,移動的位數(shù)是$Rt的值 # 算術(shù)移位指令,移入符號位,都是R型指令,Imm存在移位域 # 沒有算術(shù)左移,因為左移會丟失符號位 sra $Rd,$Rt,Imm #算術(shù)右移Imm srav $Rd,$Rs,$Rt #算術(shù)右移,移動的次數(shù)是$Rt的值程序控制指令
??在學(xué)這部分知識前,我們先要復(fù)習(xí)以下幾個知識:
1.MIPS指令都是32位的,即4個字節(jié),即1個字
2.MIPS架構(gòu)的存儲器要求邊界對齊,字的存放的首地址必須是4的整數(shù)倍,也就是地址的最低兩位是0
3.指令存放在存儲器中,且是順序存儲。在程序中相鄰的指令在內(nèi)存中也相鄰
4.PC寄存器指向下一條指令的地址
5.在無跳轉(zhuǎn)指令時,程序依靠PC寄存器依次+4來順序執(zhí)行指令;實現(xiàn)跳轉(zhuǎn)的關(guān)鍵是改變PC寄存器的值
相等條件控制指令
??有beq和bne兩條指令,都是I型指令
beq $Rs,$Rt,label # $Rs,$Rt相等時跳轉(zhuǎn)到label bne $Rs,$Rt,label # $Rs,$Rt不相等時跳轉(zhuǎn)到label??label是程序前的標(biāo)號,代表指令的地址。實際上是一個常數(shù),存在Imm域
??label實際上保存的是相對地址,即label-PC再右移兩位的低16位。結(jié)果是一個符號數(shù),正數(shù)往后跳,負(fù)數(shù)往前跳
??原因是地址的最低兩位是0,沒必要存。剩下的從低到高存16位。可見這兩條指令的跳轉(zhuǎn)有范圍限制
無條件控制指令
??只有一條j指令
j label # 無條件跳轉(zhuǎn)到label??J型指令的Imm域是26位的。實際上,保存的是label的去除高4位和低2位的中間26位
??j指令的跳轉(zhuǎn)也是有限的,跳轉(zhuǎn)到的指令的地址高4位必須和PC一樣
大小條件控制指令
與0比較
??滿足條件時,跳轉(zhuǎn)到label
與非0比較
??滿足條件時,會給第一個寄存器操作數(shù)置1
??再結(jié)合beq和bne指令,實現(xiàn)跳轉(zhuǎn)
7.子程序原理
子程序調(diào)用和返回
??子程序調(diào)用的過程實際上是main函數(shù)向sub函數(shù)跳轉(zhuǎn)的過程
??調(diào)用子程序時,采用jal指令,這是一條J型指令
??格式如下,label為標(biāo)號
??使用jal指令時,會將PC寄存器中的值暫存到$ra寄存器
??函數(shù)調(diào)用結(jié)束后,使用jr指令就可跳轉(zhuǎn)回主程序,這是R型指令,格式如下
??調(diào)用子程序時,依次使用$a0-$a3寄存器保存入口參數(shù)。使用$v0-$v1寄存器保存返回值
棧
??數(shù)據(jù)進(jìn)出遵循先進(jìn)后出原則
??出棧:先取出數(shù)據(jù),再改變棧頂指針
??入棧:先改變棧頂指針,再存入數(shù)據(jù)
??$sp指示棧頂
??$fp指示當(dāng)前子程序可操作的棧的棧頂
8.MIPS尋址原理
??尋址是指處理器獲得數(shù)據(jù)和指令的存儲地址
操作數(shù)尋址:獲取操作數(shù)的方式
1.寄存器尋址。例如指令add $Rd,$Rs,$Rt,操作數(shù)在寄存器中
2.基址尋址。例如指令lw $Rt,(Imm)$Rs,地址由基地址和偏移地址組成
3.立即尋址。例如指令addi $Rt,$Rs,Imm,操作數(shù)來自指令中的立即數(shù)
指令尋址:獲取下一條指令存儲地址的方式
1.寄存器間接尋址。例如指令jr $Rs,PC來自寄存器
2.PC相對尋址。例如指令beq $Rs,$Rt,label,新PC的值和原PC的值相關(guān)
3.偽直接尋址。例如指令j label,新PC的值基本來自指令
9.編譯、匯編、鏈接、裝載
??c語言程序經(jīng)過編譯,成為匯編語言程序
??匯編語言程序經(jīng)過匯編,成為目標(biāo)文件
??目標(biāo)文件經(jīng)過鏈接,成為可執(zhí)行文件
??可執(zhí)行文件裝載到內(nèi)存中運行
10.偽指令、宏指令和系統(tǒng)功能調(diào)用
偽指令
宏指令
系統(tǒng)功能調(diào)用
??系統(tǒng)功能調(diào)用由系統(tǒng)軟件提供,作用為屏蔽不同特定硬件的具體操作,作為硬件抽象層。
第三章 微處理器
??數(shù)據(jù)通路和控制信號如圖所示
1.控制器
ALU控制信號
??通過兩級譯碼,來確定ALU執(zhí)行哪種運算。
??如果是I型指令,操作碼就可以確定運算類型;如果是R型指令,操作碼譯碼后還需結(jié)合功能碼,進(jìn)一步譯碼來確定運算類型
主控制器
??以下是控制信號和它們的具體含義
??RegDst控制寫寄存器的編號
??RegWr和MemWr是寄存器和存儲器的寫控制信號
??ALUSrc控制ALU的第二個數(shù)據(jù)源是立即數(shù)還是寄存器
??Mem2Reg控制寫入寄存器的數(shù)據(jù)的來源是存儲器還是ALU運算的輸出
??這些控制信號由指令的操作碼譯碼而來,如圖所示
??以下是各條指令的各個控制信號的取值
2.現(xiàn)代微處理器新技術(shù)
??流水線、超標(biāo)量和多核
3.異常處理
??被中斷時,進(jìn)入中斷程序前需要保存PC的值。用棧或者特殊功能寄存器MIPS EPC
??中斷技術(shù)一章中詳細(xì)學(xué)習(xí)
第四章 存儲系統(tǒng)
1.分級存儲結(jié)構(gòu)
??時間局部性:剛剛訪問的存儲區(qū)域又馬上訪問
??空間局部性:訪問剛剛訪問的存儲區(qū)域的相鄰區(qū)域
??存儲器的發(fā)展基本跟不上CPU的腳步。速度快的存儲器價格太貴,便宜的存儲器速度太慢
??計算機(jī)內(nèi)采用分級的存儲結(jié)構(gòu)提高效率,如下圖
2.高速緩存
??如果將經(jīng)常使用的數(shù)據(jù)或指令裝載到高速緩存中,就可以提高速度
??cache的容量小于內(nèi)存,不可能把所有的數(shù)據(jù)都裝進(jìn)cache。故需要建立一種映射機(jī)制,也就是說cache數(shù)據(jù)和內(nèi)存數(shù)據(jù)的對應(yīng)關(guān)系
cache映射機(jī)制
??這里有三種映射機(jī)制,分別是直接映射(一路組相聯(lián))、全相聯(lián)映射、組相聯(lián)映射
??參考:https://blog.csdn.net/l_nan/article/details/78883996
cache寫策略
??CPU寫緩存時,有以下幾種方式
??1.透寫:既寫緩存,也寫內(nèi)存
??2.回寫:只寫緩存,當(dāng)需替換時再寫入內(nèi)存
??3.配寫:寫內(nèi)存后,再拷貝到緩存
??4.不配寫:僅寫內(nèi)存
??1和3配合使用;2和4配合使用
3.虛擬存儲器
??將外存當(dāng)作內(nèi)存使用
??管理方式有分段管理和分頁管理
分段管理
??從虛擬空間裝載一段數(shù)據(jù)到物理空間時,是連續(xù)裝載的,偏移地址是一樣的。因此要得到物理地址,只需要記錄段的首地址,即段地址。
??保存段地址的方式有兩種:
??1.用專用寄存器來保存。稱為實模式
??2.用內(nèi)存中的段地址描述符保存。稱為保護(hù)模式
??以下是段地址描述符的結(jié)構(gòu)
分頁管理
??把內(nèi)存和外存分為大小相同的頁,以頁為單位裝載
??頁表存儲在內(nèi)存中,頁表的索引是虛擬地址,值是物理地址
??可以建立多級頁表,索引是虛擬地址的一部分,數(shù)據(jù)是下一級頁表的地址
TLB
??把頁表存進(jìn)高速緩存(全相聯(lián)映射),提高查找的效率
第五章 總線
1.總線分類
按位置分
??片內(nèi)總線:微處理器內(nèi)部的總線,如AXI總線
??系統(tǒng)總線:連接計算機(jī)系統(tǒng)各個模塊的總線,通常在服務(wù)器上使用
??局部總線:專門針對某些類型的設(shè)備設(shè)計的總線,如PCI總線、PCIE總線
??外部總線:連接外部設(shè)備的總線,或稱為外部接口,如USB\UART\SATA\SPI\IIC
按定時分
??同步:SPI\IIC
??異步:USB\UART\SATA
??半同步:AXI\PCI
按數(shù)據(jù)傳輸方式分
??并行:片內(nèi)總線、系統(tǒng)總線、局部總線一般是并行。如AXI\PCI
??串行:目前外部總線一般采用串行。局部總線PCIE是串行
按是否復(fù)用方式分
??復(fù)用:所有串行總線都是復(fù)用的。也有并行總線采用復(fù)用,如PCI
??專用:AXI總線
2.總線操作類型
??寫操作:主設(shè)備傳到從設(shè)備
??讀操作:從設(shè)備傳到主設(shè)備
3.AXI總線
4.PCI總線
??并行
5.外部總線
??目前,外部總線一般都是串行總線
??異步串行的外部總線USB\UART\SATA的特點如下
??同步串行的外部總線SPI\IIC的特點如下
第六章 半導(dǎo)體存儲器接口
1.常見半導(dǎo)體存儲器
2.容量擴(kuò)展
3.空間映射
4.多類型數(shù)據(jù)訪問
5.存儲控制器
第七章 IO接口
1.IO尋址
??分為存儲器映像IO尋址和獨立IO尋址
??前者將IO接口映射到邏輯存儲空間,相當(dāng)于存儲器;后者訪問IO接口時需要提供獨立的控制信號,不占用邏輯存儲空間
??前者主要用于嵌入式系統(tǒng),后者主要用于PC機(jī)
2.IO讀寫操作函數(shù)
??介紹Standalone BSP端口讀寫C語言函數(shù)
Xil_In8(addr) # 從addr讀入8位數(shù)據(jù) Xil_In16(addr) # 從addr讀入16位數(shù)據(jù) Xil_In32(addr) # 從addr讀入32位數(shù)據(jù) Xil_Out8(addr,value) # 向addr輸出8位數(shù)據(jù) Xil_Out16(addr,value) # 向addr輸出16位數(shù)據(jù) Xil_Out32(addr,value) # 向addr輸出32位數(shù)據(jù)3.常見IO設(shè)備接口設(shè)計
??輸入設(shè)備與總線相連接時需要緩沖器,如74**244
??輸出設(shè)備與總線相連接時需要鎖存器,如74**373
開關(guān)和LED燈
??這部分比較簡單,就不記了
矩陣鍵盤
??電路及控制程序如下
??要識別一個按鍵,首先要判斷是否有按鍵按下。如果沒有按鍵按下,程序?qū)⒃诘谝粋€while處死循環(huán)。當(dāng)有按鍵按下時,ABCD引線會出現(xiàn)低電平。接下來逐列掃描,確定掃描碼
七段數(shù)碼管
??四個七段數(shù)碼管接口電路如下
??輸出位碼,即可選中對應(yīng)的數(shù)碼管;然后再輸出段碼,即可點亮該數(shù)碼管
??顯示5678的程序如下
LED點陣
??行輸出1,列輸出0時,對應(yīng)位置LED被點亮。接口電路和控制程序如下
4.GPIO
??接口電路和寄存器含義如下
??例題:設(shè)計控制程序,將16位開關(guān)實時反應(yīng)到16位LED上,且16位開關(guān)表示的二進(jìn)制數(shù)以十六進(jìn)制形式顯示在4位七段數(shù)碼管上
第八章 中斷技術(shù)
1.中斷控制器
??中斷控制器應(yīng)該具有以下部分
??1.中斷狀態(tài)寄存器:用來指示是哪一個設(shè)備產(chǎn)生中斷
??2.中斷響應(yīng)寄存器:響應(yīng)后,用來清除中斷狀態(tài)
??3.中斷使能寄存器:使能中斷
??電路如下
2.AXI INTC中斷控制器
??結(jié)構(gòu)和寄存器含義如下圖
??ISR為中斷狀態(tài)寄存器,某位為1時,表示對應(yīng)位產(chǎn)生了中斷
??IER為中斷使能寄存器,某位為1時,使能對應(yīng)位中斷輸入
??IAR為中斷響應(yīng)寄存器,某位為1時,清除對應(yīng)位中斷
??IMR為工作模式寄存器,某位為0時,標(biāo)志工作在普通中斷模式;為1時,標(biāo)志工作在快速中斷模式
??IVR保存最高優(yōu)先級中斷源的編碼,intr0的優(yōu)先級最高,intr31優(yōu)先級最低。如果intr2產(chǎn)生中斷,而intr0和intr1沒有中斷,則IVR的值為0x2
??MER寄存器僅兩位。D1=1表示使能硬件中斷。D0=1表示允許Irq產(chǎn)生中斷請求
??ILR寄存器保存阻止的最高優(yōu)先級中斷源的編碼。如果ILR=0x3,表示阻止intr3到intr31產(chǎn)生中斷
??IVAR寄存器共有32個寄存器,每個寄存器4B,保存各個中斷源的中斷向量
3.INTC編程控制
4.c語言中斷方式程序設(shè)計
microblaze_enable_interrupts();//微處理器開中斷 microblaze_disable_interrupts();//微處理器關(guān)中斷 void name() __attribute__((interrupt_handler));//注冊總中斷服務(wù)程序,用于普通中斷 void name() __attribute__((fast_interrupt));//用于快速中斷5.普通中斷方式應(yīng)用
??鴿了
6.快速中斷方式應(yīng)用
??鴿了
7.GPIO中斷
結(jié)構(gòu)
相關(guān)寄存器
初始化程序(普通中斷)
??清除中斷狀態(tài)。寫GPIO的IPISR寄存器和INTC的IAR寄存器
??開放中斷。寫GPIO的GIER和IPIER寄存器開放GPIO中斷;寫INTC的IER,MER和IMR寄存器,開放INTC中斷并設(shè)定工作模式;開放微處理器的中斷
??注冊中斷服務(wù)程序
??配置GPIO的工作方式。寫GPIO_TRI寄存器
中斷服務(wù)程序(普通中斷)
??1.識別中斷源,執(zhí)行對應(yīng)的中斷事務(wù)處理函數(shù)
??2.返回前需要清除GPIO和INTC的中斷狀態(tài)
8.AXI Timer定時器
??以下是定時器的結(jié)構(gòu)和寄存器
??以下是TCSR的各位的含義
??定時器的計時模式過程如下
9.SPI接口
??SPI是同步串行總線接口
??MOSI傳輸方向為主設(shè)備到從設(shè)備;MISO傳輸方向為從設(shè)備到主設(shè)備
??選中從設(shè)備時,從設(shè)備選擇信號ss為低電平
??CPOL表示從設(shè)備空閑時的始終電平
??CPHA表示時鐘相位,0為0度,1為180度。第一個時鐘邊沿為相位0度,第二個時鐘邊沿為相位180度。
第九章 DMA技術(shù)
1.DMA傳輸系統(tǒng)構(gòu)成
2.DMA傳輸分類
??IO到存儲器
??存儲器到IO
??存儲器到存儲器(DMAC內(nèi)部有FIFO存儲器)
3.DMA傳輸模式
??單字節(jié)模式:DMA傳一個字節(jié)釋放總線
??塊傳輸模式:DMA傳輸塊時一直占用總線
??請求傳輸模式:外設(shè)和DMA中存在DREQ請求和DACK響應(yīng)。當(dāng)外設(shè)保持DREQ請求時,一直占用總線,否則釋放
??級聯(lián)模式:主DMA僅僅負(fù)責(zé)DMA請求,從DMA工作在前三種模式中的一種
總結(jié)
以上是生活随笔為你收集整理的计算机组成原理与接口技术笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(1798):前端调试之css伪
- 下一篇: 用125行C语言编写一个简单的16位虚拟