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