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