計算機系統由硬件和軟件兩大部分組成,計算機性能的好壞取決於軟硬件功能的總和。
虛擬機器:並不是實際存在的機器
實際機器:也就是實際存在的機器
計算機體系結構:能夠被程序員所看見的計算機系統的屬性。站在不同層次上編程的程序員所看見的計算機的屬性各不相同。 計算機組成:指如何實現計算機體系結構所體現的屬性。
數學傢馮諾依曼體現出來瞭“存儲程序”的概念,以此概念設計的各類計算機通稱馮諾依曼機,有以下特點:
經典的馮諾依曼計算機以運算為中心
現代計算機以存儲器為中心
計算器各部件功能:
計算機以上五個部件都在控制器的統一指揮下,有條不紊的工作。由於運算器和控制器在邏輯關系和電路結構上聯系十分緊密,往往集成在同一芯片,合稱中央處理器CPU。現代計算機可以認為由三部分組成:CPU、I/O設備及主存儲器。其中CPU和主存可以合稱主機,IO設備稱為外部設備。結構如如下:
主存儲器
隨著硬件技術發展,主存制成大規模集成電路芯片,MAR和MDR集成在CPU中。 運算器 最少包含一個算術邏輯單元(ALU)和 3個寄存器:累加器ACC(Accumulator)、乘商寄存器MQ(Multiplier-Quotient Resgister)、操作數寄存器 X。
控制器 工作過程為 取指階段、分析階段、執行階段,由以下部分組成:
I/O 包括IO設備和響應接口,IO設備通過IO接口和主機聯系,接收CU控制命令,完成對應操作。
全書章節關系,如下圖:
計算機系統部件之間互連方式
總線是各部件共享的傳輸介質,在某一時刻隻允許最多一個部件發送信息,而多個部件可以同時從總線接收信息。
現代計算機采用各類總線結構
按照連接部件不同,可分為三類
所有設備都掛在一組總線上。結構簡單,易於擴充,但是所有傳輸都通過共享總線,極易形成計算機系統瓶頸,多被小型或微型計算機采用。
be03fd8de7e02a1efb31120ff4c578d3
傳統微型計算機總線結構 高速和低速IO都掛接在ISA或EISA總線上,並通過總線控制器與系統總線相連,勢必出現總線數據傳輸瓶頸。
VL-BUS局部總線結構 為瞭消除以上總線結構瓶頸問題,將高速、高性能外設盡量靠近CPU本身總線,並對CPU同步或準同步;局部總線VL-BUS相當於在CPU和高速IO之間架上瞭高速通道。
PCI總線結構 VL-BUS是一種早期總線技術,並且由於以上的總線結構中CPU和VL-BUS過於緊密(VL-BUS是一種本地總線,直接連接到CPU的主板插槽上),由於VL-BUS有工作頻率限制,很難支持功能更強的CPU(VL-BUS需要和CPU同步),由此出現瞭PCI總線結構;CPU總線與PCI總線相互隔離,具有更高靈活性,可以支持更多高速設備,具有即插即用的特性。
總線上連接的各類設備按照對總線的控制功能分為:主設備(有控制權)、從設備(隻能響應主設備發來的總線命令)。 當多個設備同時使用總線時,就由總線控制器的判優邏輯按照一定優先等級確定哪個主設備能能使用總線。總線判優控制分為:
常見的集中控制優先仲裁方式有以下三種:
通常將完成一次總線操作的時間稱為總線周期,可以分為以下四個階段:
總線通信控制通常用以下四種方式:
同步通信優點規定明確、統一,模塊之間配合簡單一致,缺點是所有模塊采用同一限時,必須按照最慢速度部件設計公共時鐘。適用於總線長度較短,個部件存取時間比較一致的場合。
若從模塊無法在T3提供數據,就給出等待信號,主模塊在T3到來之時檢測等待信號,若$overline{WAIT}$為低電平就不立即在從數據線取數,在下一個時鐘周期采取一樣的行動。
按照存儲介質分類:
按照存取方式分類:
存儲器由三個主要性能指標:速度、容量、位價
CPU和緩存、主存都能直接交換信息。緩存-主存層次解決CPU和主存速度不匹配的問題;主存-輔存層次解決存儲系統容量問題。
在主存-輔存這一層次的不斷發展中,逐漸形成虛擬存儲系統,程序員編程的地址范圍虛擬存儲器的地址空間相對應,物理地址是程序在執行過程中真正訪問的地址,對於具有虛擬存儲器的計算機而言,編程時可用的地址空間遠大於主存地址。
根據MAR的地址訪問某個存儲單元時,需要經過地址譯碼、驅動等電路,才能找到要訪問的單元;讀出時,需要進過讀出放大器、才能將選中單元的存儲字,送到MDR。
驅動器、譯碼器和讀寫電路集中在存儲芯片中,而MAR和MDR在CPU芯片中,兩芯片通過總線連接,如下圖:
地址線時單向輸入的,數據線是雙向的,控制線主要有讀寫控制線和片選線(半導體存儲器由許多芯片組成,需要用片選線選擇存儲芯片):
靜態RAM(Static RAM,SRAM) SRAM基本單元電路:SRAM用寄存器存儲信息,每一個基本單元電路有6個MOS管組成,如下圖:
SRAM的讀寫操作:
SRAM舉例分析:以Intel2114為例,下圖為外部特性
從上圖可以看出,該芯片為1K 4位芯片,而每個基本單元隻能存儲一位信息,為瞭一次存取4位信息,將存儲矩陣的列分為4組,列選擇線可以同時控制4組中的一列,如下圖:
動態RAM(Dynamic RAM,DRAM) DRAM基本單元電路:DRAM基本單元有三管式和單管式兩種,都是靠電容存儲電荷來存儲信息,電容上有足夠電荷表示1,無電荷表示0。 三管式單元電路結構如下,讀出的數據和原來存儲的數據相反,但是在寫入時寫入信息與存放信息相同。
單管式單元電路結構如下:
DRAM芯片舉例分析:三管DRAM芯片Intel 1103
單管DRAM 4116(16K 1位),按理應該有14根地址線,但是為瞭減少芯片封裝引腳數,隻使用7根地址線,分兩次將地址信息傳送(先傳送行地址到行地址緩存器,再送列地址到列地址緩存器)。
下圖的芯片示意圖中,有讀放大器(蹺蹺板電路,兩邊電平相反),所以0到63行要寫入的數據和實際存儲信息相反,讀取時讀取出來信息和存儲的信息相反(兩次取反,導致原來存入什麼後面就可以讀出什麼)。
DRAM刷新:電容的電荷一般隻能維持1~2ms,信息會自動消失,必須在2ms內對所有存儲單元恢復一次原狀態,也就是刷新;刷新隻與行地址有關,即一行一行地刷新,DRAM的刷新有以下幾種方式:
其中集中刷新時存儲器不能進行讀寫操作,故稱為“死區”。
如果將刷新安排在指令編譯階段(此時存儲器無讀寫),不會出現“死區”。
SRAM與DRAM對比
按照ROM的原始定義,ROM隻能讀不能寫,但是隨著用戶的需求,出現瞭PROM、EPROM、EEPROM等可寫的ROM。 掩膜ROM 出廠時就設置好瞭存儲器內存儲的數據,行列相交處有MOS管存儲“1”,沒有MOS管存儲“0”,用戶無法改變原始狀態。
PROM PROM可以實現一次性編程,其基本單元中有一段熔絲,熔絲未斷存儲“1”,已斷開存儲“0”,由於斷開的熔絲沒辦法再恢復,所以PROM隻能一次編程。
EPROM EPROM可擦除可編程,基本結構如下,當需要改變狀態時,需要用紫外寫照射,將信息全部擦寫。
Flash Memory Flash Memory時在EPROM和EEPROM的工藝基礎上產生的一種新型的、具有性能價格比更好、更可靠的可擦寫非易失性存儲器,具有整片擦寫的特點,擦除重寫速度快。
存儲器容量擴展 對於位擴展,以兩片1K 4位芯片組成 1K 8位為例,其中兩個芯片的數據線分別接到數據總線的四條上面(不必按順序,保證不重合即可),地址總線同時接到兩片芯片的地址線上(不必按順序接),片選線和讀寫控制線同時連接到兩片芯片。
對於字擴展,以兩片1K8位組成 2K8位芯片為例,需要保證芯片不被同時選中,可以利用多出的一條地址線作為片選線。
存儲器和CPU的連接
對於存儲器和CPU連接的設計問題,解決步驟為:(1)進行地址分配,劃定芯片的地址范圍 (2)選擇合適芯片 (3)分配CPU地址線 (4)設計片選信號 CPU片選信號很靈活,可以利用多餘的地址線結合譯碼器構成片選信號,同時註意不要忽略$overline{MREQ}$(訪存控制信號,該信號低電平有效時,才會訪問存儲器),具體例子可參考書本。
任何一種編碼是否具有檢測能力和糾錯能力都與編碼的最小距離有關,編碼最小距離為某種編碼的任意兩組合法碼字的最小差異位數,根據糾錯理論有: $L-1=D+C ,D>=C$ 其中L為最小距離,D為檢測位數,C為糾正位數 漢明碼的工作原理已經在計算機網絡的數據鏈路層的糾錯編碼提及,這裡僅作補充,漢明碼可以按照奇校驗或者偶校驗配置,偶檢驗就是讓檢測位和其被檢測的位具有偶數個“1”,奇校驗同理。
由於CPU的工作速度的增長比存儲器快很多,致使主存的存取速度稱為計算機系統瓶頸,除瞭尋找高速元件和采用層次結構以外,調整主存的結構頁可以提高訪存速度。 單體多字系統 在一個存取周期內,在同一個地址取出相鄰幾個存儲單元的數據放入數據寄存器(也就是存儲字長比CPU字長 長);采用這種方法的前提是指令和數據是連續存放的,如果遇到轉移指令或者操作數不能連續存放,該方法效果就不明顯。
多體並行系統 采用多體模塊組成的存儲器,每個模塊有獨立的MAR、MDR、地址譯碼、驅動電路和讀寫電路,可以並行工作也可以交叉工作;多體並行分為以下兩種類型:
假設每個存儲體的存儲字長和數據總線寬度一致,低位交叉模塊數為$n$,存取周期為$T$,總線傳輸周期為$tau$,則采用流水線方式時滿足$T=ntau$;故需要保證某體啟動後,至少經過$ntau$再啟動。
高速芯片 采用高性能芯片也是提高主存速度的措施,以下對幾種高速芯片簡單介紹:
利用程序訪問的局部性原理(時間局部性和空間局部性),主存可以將近期用到的數據以及與用到的數據相鄰的數據送到緩存上面,處理器可以直接從緩存讀取信息。 Cache的工作原理 把主存和Cache都分為若幹塊,並且使他們的塊大小(即每個塊含有多少個字)相等,當CPU要訪問主存的某個字時,先查詢Cache,若Cache有對應數據,就直接取,如果沒有,就訪問內存把對應的字所屬的塊存入Cache。
效率評估 假設在一個程序執行期間,訪問Cache的次數為$N_C$,訪問主存的次數為$N_m$,則命中率$h=frac{N_c}{N_c+N_m}$,設訪問一次Cache時間為$t_c$,訪問一次主存時間為$t_m$,則訪問效率$frac{t_c}{ht_c+left( 1-h right) t_m}$。 Cache基本結構
Cache主要由以下模塊構成:
Cache的寫操作 寫入的操作比較復雜,需要保證對Cache寫入的信息和主存中的信息同步,有以下兩種策略:
Cache的改進
直接映射 采用的是固定的映射關系,核心思想為:假設Cache中塊的數量為$C(2^c)$,將主存分為每個含有$C$個字塊的組,設$i$Cache的塊號,$j$為主存塊號,則$i=i mod C$;本質上將主存上多個塊映射到Cache某個固定的塊。
全相聯映射 靈活性極大的映射,核心思想是:主存中的一個塊可以存儲到Cache任意一個塊上面;需要的標志位變多,而且需要把主存的標志和Cache中所有標志比較一遍。
組相聯映射 結合瞭全相聯和直接映射的特點,把Cache和主存都分為$Q$組,主存某一組中的塊,隻能映射到Cache對應的組裡面的塊;組相聯映射,當隻有一組時就是全相聯映射,當$C$組時就是直接映射。
組相聯和全相聯中,在需要寫入輸入且Cache已滿時,需要考慮替換哪一個塊,理想的算法是替換未來很少用到或者很久才用到的塊,但很難實現,主要使用的算法有以下:
輔存的特點時不直接與CPU交換信息,輔存不是重點,不做記錄詳情參考課件
早期階段
接口模塊和DMA階段 IO設備通過接口模塊和主機連接,接口中設備數據通路和控制通路,數據經過接口既起著緩沖作用,有可以完成串-並轉換,主機和IO交換信息時CPU要執行中斷程序
直接存儲器存取DMA(Direct Memory Access)技術,IO設備與主存之間有一條直接的數據通路
具有通道結構階段
通道時用來管理IO設備以及實現主存和IO設備之間交換信息的部件(具有特殊功能處理器,不完全獨立,依據CPU的IO執行進行啟動、停止或改變工作狀態),有專門通道指令,獨立執行通道指令編寫的IO程序;工作時,CPU不直接參與管理,提高CPU利用率
具有IO處理機階段 IO處理機獨立與主機工作,可以完成IO控制、碼制轉換、格式處理、數據檢錯糾錯,和CPU工作並行性更高
IO系統由IO軟件和IO硬件組成: IO軟件:
IO硬件: 主要有IO接口、設備控制器和通道
IO設備編址方式
聯絡方式
當使用的是串行傳送時,雙方需要設定一組特殊標記。
IO設備和主機的連接方式
程序查詢方式 由CPU不斷通過程序查詢IO設備是否做好準備,從而控制IO設備與主機交換信息;隻要啟動IO設備,CPU便處理踏步狀態,IO準備就緒之後也隻能一個字一個字的從IO設備取出,由CPU存入主存。
程序中斷方式 中斷方式是在查詢方式的基礎上做瞭改進:CPU發出讀指令之後,就執行其他操作,直到IO設備準備就緒向CPU發出中斷請求,CPU中斷當前程序,執行IO操作,省去瞭踏步的無效狀態。 在程序中斷和操作過程中,需要保存、恢復原程序狀態,需要占用CPU內部寄存器,同樣是對CPU資源的消耗,該方式最終還是需要通過CPU才能實現IO設備和主存的信息交流。
DMA方式 主存和IO設備之間存在數據通路,當DMA和CPU同時訪問主存時,CPU將總線占用權讓給DMA(竊取或者挪用),竊取的時間為一個存儲周期,而且在該周期內,CPU能繼續執行內部操作。
IO設備大致可以分為三類:
鍵盤 判斷哪個按鍵被按下,將按鍵信息轉為ASCII碼 工作原理:計數器輸出信號控制兩個譯碼器,譯碼之後就是按鍵的行列選擇信號,通過這種方式循環掃描每個按鍵,當掃描到的按鍵被按下,發出脈沖信號,計數器停止計數,計數器的值對應著一按鍵
3baf8896d1462c9976526c6321373d06
鼠標 根據定位的原理,分為機械式和光電式,機械式包含金屬球和電位器,光電式包含光電轉換器
觸摸屏 主要分為電阻式、電容式、表面超聲波式、掃描紅外線式和壓感式 各種方式各有各的特點,需要根據需要選擇
顯示器
打印機
接口是兩個系統或兩個部件之間的交接部分,IO接口是主機和IO設備之間設置的一個硬件電路以及相應的軟件控制。
接口(Interface)不同於端口(port),端口是指接口電路中一些寄存器,用來存放數據信息、控制信息和狀態信息,若幹的端口加上相應的控制邏輯才能組成接口。
總線連接方式的IO接口電路
接口的功能和組成
按數據傳送方式分類:
按功能選擇靈活性分類:
按通用性分類:
按數據傳送控制方式分類:
當有多個IO設備需要查詢時,CPU需要按照IO設備優先級進行逐級查詢。
完成查詢通常需要執行以下指令
單個IO設備程序查詢的具體流程如下:
以IO輸入為例,電路基本組成如下:
計算機在執行程序的過程中,當出現異常情況或特殊請求時,計算機停止現行程序的執行,處理異常情況或特殊請求,處理結束後返回現行程序簡短處,繼續執行。 中斷是現代計算機能有效合理發揮效能和提高效率的一個重要功能。
以下以打印機為例,顯示IO程序中斷的過程
計算機系統引入中斷並不僅僅是為瞭適應I/O工作速度慢的問題,中斷還用於處理突發事件的產生(產生異常)、實現實時控制(控制權從用戶程序返回操作系統?)。
為瞭處理I/O中斷,在I/O接口電路必須配置相關硬件線路: 中斷請求觸發器和中斷屏蔽觸發器 當中斷請求觸發器INTR為1時(接口的完成觸發器D狀態為1),表示該設備發出中斷請求。 當有多個中斷源時,CPU對各種中斷源進行排隊,優先處理優先級最高的請求,不允許其他中斷源中斷正在執行的中斷服務程序,需要設置屏蔽觸發器MASK,MASK為1時,INTR被屏蔽。
排隊器 給不同IO請求不同優先級,對於速度越高的IO設備優先級越高(若CPU不及時響應高速IO的請求,其信息可能會丟失)。 設備優先級的處理,可以采用軟件方法或硬件方法,硬件方法的實現方法:可以在CPU內部對中斷源設置一個統一的排隊器;也可以在接口電路內分別設置各個設備的排隊器——鏈式排隊器:
中斷向量地址形成部件 不同的設備有不同的中斷服務程序,每個服務程序有一個入口,入口地址的尋找這裡介紹硬件向量法: 由設備編碼器生成向量地址,找到中斷向量(其中保存程序入口地址),從而找到中斷服務程序。
中斷向量地址形成部件相當於一個設備編碼器,一個例子如下
電路結構簡化圖
CPU響應中斷的條件和時間 CPU能夠響應中斷的條件是,其中的 允許中斷觸發器$EINT$ 的值為1,該觸發器可用開中斷指令置位(開中斷),用關中斷指令或硬件自動復位(關中斷)。
中斷服務的流程
從宏觀上看,程序中斷方式克服瞭程序查詢方式的CPU原地踏步的現象,實現瞭CPU與I/O的並行工作。 從微觀操作分析,CPU在處理中斷服務程序時需要停止原程序的執行,尤其是高速I/O或輔存設備頻繁、成批的與主存交換信息時,不斷打斷CPU主程序的執行。
DMA方式與程序中斷的數據通路 程序詢問和程序中斷方式都需要使用CPU中的寄存器進行進行數據傳送,DMA方式在DMA接口和主存之間有數據通路,不需要通過CPU,工作速度高,適用於高速I/O或輔存與主存之間的信息交換。
DMA與主存交換數據的方式
既實現瞭IO傳輸,有很好發揮瞭主存和CPU效率,該方法被廣泛采用。
DMA接口的功能
DMA接口的基本組成
DMA數據傳送過程
以上工作為CPU完成,之後CPU繼續執行其他工作
DMA接口與系統的連接方式
以上兩種方式的優缺點和總線判優控制的兩種方式類似
DMA與程序中斷方式相比的特點
選擇型DMA接口 在物理上連接多個設備,在邏輯上隻允許連接一個設備。在某一段時間內,DMA接口隻能為一個設備服務(共用一組寄存器),適用於數據傳輸率很高的設備。
多路型DMA接口 在物理上連接多個設備,在邏輯上允許連接多個設備。每個設備設置一套寄存器,分別存放各自傳送參數,適用於同時為多個數據傳輸率不十分高的設備服務。
每一位都可以用來存放數值,浮點數沒有無符號數的分類
機器數與真值 對於有符號數來說,機器無法識別正負符號,需要把正負符號進行機器表示,把符號“數字化”的真值成為機器數
原碼表示法 最高位是符號位,0表示正號,1表示符號 原碼表示簡單,易於和真值進行轉換,但是在進行加減運算時較為麻煩(例如,在操作數符號不同的加法運算時,要先判斷兩個數絕對值大小,然後用大的絕對值減去小的絕對值)
補碼表示法 原理類似時鐘,指針要轉到一個數上面,可以順時針也可以逆時針撥,補碼定義如下: $left[ x right] _補=left{ begin{array}{l} 0 x,,text{,}0le x<2^n\ 2^{n+1}+xtext{,}-2^n≤x<0,,text{ }\ end{array} right.$,其中$n$代表數字位位數 此時進行加法不必判斷大小,進行減法時,即加上減數的補碼,補碼和原碼的快速轉換——原碼取反加一
小數的補碼定義為$left[ x right] _補=left{ begin{array}{l} x,,text{,}0le x<1\ 2+xtext{,}-1≤x<0,,text{ }\ end{array} right.$
反碼表示法 通常用於原碼求補碼或補碼求原碼的中間過渡
移碼表示法 由於補碼表示很難直接判斷真值的大小,所以引入瞭移碼,移碼的本質就是 補碼+$2^n$,移碼和補碼的符號為相反,數字位相同
小數點位置按照約定的位置給出,有以下兩種格式
通常浮點數被表示成$N=Stimes r^j$ 其中為$S$尾數(可正可負),為$j$階數(可正可負),$r$為基數,在計算機中基數可去2,4,8或16
浮點數的表現形式
階符和階碼的位數m反映浮點數的表示范圍以及小數點的實際位置,尾數的位數n表示浮點數的精度
浮點數的表示范圍 以非格式化數為例,當階數的數值為取m位,尾數的數值位取n位,其表示范圍如下:
當浮點數階碼大於最大階碼時上溢,機器停止運算,進行中斷溢出處理,當階碼小於最小階碼時下溢,通常將尾數各位置零,按機器零處理,不會停止運行
浮點數格式化
$r$越大,浮點數可表示的范圍越大,能表示的數的個數越多;但是浮點數的精度越低
機器零 當尾數為0時,不論階數為何值,通通按照機器零處理;當階碼小於或等於所能表示的最小數時,不論尾數為何值,也按照機器零處理
現代計算機中,浮點數一般采用IEEE指定的國際標準,格式如下
32位浮點數和64位浮點數
當計算機沒有乘除法運算電路時,可以采用移位和加法相結合實現乘除運算
算術移位規則 對於算術移位,符號位不參與移位,且是正數是原碼、反碼、補碼數值位與真值相同,左右移動都填“0”;對於負數補碼,由於補碼轉原碼“取反加一”的性質,左移添“0”,右移添“1”。
當有有效數字丟失時
實現算術移位的硬件
負數且進行右移時,可以利用符號為進行添1操作
算術移位與邏輯移位 算術移位是有符號數的移位, 邏輯移位是無符號數的移位;兩者移位的規則是不一樣的,對於邏輯移位,左右移位都是補0,而對於算術移位,補0還是補1,取決於操作數的類型(是原碼還是補碼),以及是左移還是右移 為瞭避免算術左移是高位數丟失,可以使用帶進位的移位,將最高位數字移動到進位中
由於減法運算可以看作是一個被減數加上減數的負值,現代計算機都采用補碼加法作減法運算 補碼加法基本公式 整數:$left[ A+B right] _補left( mod 2^{n+1} right) =left[ A right] _補+left[ B right] _補$ 小數:$left[ A+B right] _補left( mod,,2 right) =left[ A right] _補+left[ B right] _補$ 原理的證明:以整數為例,由於高位會被丟棄,即$mod 2^{n+1}$,每個操作數都可以看作是$x+2^{n+1}$,此時用各自補碼相加,然後丟棄進位即可
溢出的判斷 隻用一位符號位判斷——如果兩個操作數符號不同,則必然不會溢出,如果符號位相同,結果的符號為和操作數符號位不同的話,就必然溢出;因此通常采用符號位產生的進位和最高有效位產生的進位進行異或運算,結果為1則溢出
用兩個符號為進行判斷——適用於符號位有兩位的變形補碼,其定義如下: $left[ X right] _補=left{ begin{array}{l} x,,,,,,,1>xge 0\ 4+x,,,,,0>xge -1\ end{array} right.$ 變形補碼溢出判斷原則是——2個符號位不同時就溢出;無論是否溢出,最高移位符號為才是代表真正符號位 當采用雙符號位方案時,由於一個正確的數,其兩個符號位總是相同的,所以寄存器和主存中的操作數隻需保存移位符號數即可,在相加時,將保存的一位符號位同時送到加法器的兩位符號位輸入端
補碼加減法硬件配置
筆算乘法 以下是筆算乘法的一個例子
筆算乘法可以歸納出以下結論:
原碼一位乘法 原碼和真值很相近,乘積的符號可以通過符號位異或運算獲得,數值位進行相乘的過程和改進後的筆算乘法過程一樣,故原碼一位乘法規則如下:
原碼一位乘法需要註意:
原碼一位乘法硬件配置:
控制流程如下:
原碼兩位乘法 為瞭提高運算速度,采用原碼兩位乘法,原碼兩位乘法用兩位乘數位來決定新的部分積,如下:
2倍的被乘數,相當於被乘數左移1位,3倍被乘數相當於4倍被乘數(左移兩位)減去一個被乘數;可以將被乘數左移兩位的操作較為下一個乘數的兩位去完成,當前隻需要進去一個被乘數即可,此時需要一個存儲器$C_j$進行標記 由於需要進行$-x^$的操作,一般用$+[x^]_{補}$完成,所以兩個操作數是絕對值的補碼,移位運算是算術移位 在乘法過程中,需要2倍的被乘數,為瞭避免高位丟失,部分積需要3個符號位(也就是需要額外2位放置溢出),其中最高位才是真正的符號位 為瞭統一操作,需要在乘數高位增添“0”,乘數位數為奇數時增添一個0,為偶數時增添兩個0
補碼乘法 進行補碼乘法時,需要對乘數$y$的符號進行討論: 1)被乘數$x$符號任意,乘數$y$符號為正 以整數為例 $left[ x right] _補=2^{n+1}+x$ $left[ y right] _補=y$ $left[ x right] _補left[ y right] _補=left[ x right] _補y=left( 2^{n+1}+x right) y=2^{n+1}y+xy=left( 2^{n+1}+xy right) mod 2^{n+1}=left[ x*y right] _補$ 即乘數為正數時,無論被乘數符號如何都可以使用原碼乘法運算規則
2)被乘數$x$符號任意,乘數$y$符號為負 以整數為例 $left[ x right] _補=x_0x_1...x_n$ $left[ y right] _補=1y_1...y_n=y+2^{n+1}$ $y=left[ y right] _補-2^{n+1}=1y_1...y_n-2^{n+1}=0y_1...y_n-2^n$ $xy=xleft( 0y_1...y_n right) -x2^n$ $left[ xy right] _補=left[ xleft( 0y_1...y_n right) right] _補+left[ -x2^n right] _補$ 可以看出,可以乘數為負數的乘法看成是乘數為正數(乘數去掉符號位)的乘法,同時最後得到的結果加上$[-x]_補$進行校正,故稱為校正法。
3)Booth算法 該算法由校正法得出,也稱為比較法,可以用一個統一的公式表示 $left[ xy right] _補=left[ x right] _補left( 0 y_1 y_2 ... y_n right) -left[ x right] _補y_0$
可將以上算式改寫
其中$y_{n+1}=0$
補碼比較法的硬件配置:
補碼比較法的控制流程:
補碼兩位乘法 補碼兩位乘法是將判斷$y_{n-1}y_n$和$y_ny_{n-1}$,也就是將下次和本次的部分積加減情況合並,需要註意的是下一個的加減情況要乘以2
筆算除法 將筆算除法直接用計算機實現的問題有以下:
原碼除法 符號位單獨處理,商符號由兩個操作數符號異或得出,商值由兩操作數絕對值相除得到 對於定點除法,必須滿足$0<|被除數|<=|除數|$,實際計算中當被除數為0,結果直接返回0,當除數為0,中斷計算並報錯
先用餘數減去除數得到新的餘數,根據結果為正還是為負進行處理
$n$為數位的原碼進行除法時,進行$n+1$次上商,$n$次移位(用計數器$C=n$判斷運算是否結束,$C=0$時還要進行最後一次上商) 第一次上商的結果在符號位上面(最後會被覆蓋),可以根據第一次上商結果判斷是否溢出
加減交替法也稱為不恢復餘數法,根據恢復餘數法改進而來 對於餘數$R_i$
運算流程如下
補碼除法 一般采用加減交替法,在此隻討論這種方法 由於補碼除法是符號位和數值位一起參與運算的,所以相較於原碼除法需要額外解決幾個問題:(1)如何確定商值(2)如何形成商符(3)如何獲得新的餘數
由於補碼除法的操作數為補碼,補碼符號位是任意的,不能單純用補碼的差來判斷大小,應該用絕對值大小進行比較,分以下兩種情況:
由餘數和除數大小、被除數和除數是否同號共同決定:
可以根據以上兩種結論總結得到以下結果:
和原碼加減交替法類似
如果對商的精度沒有特殊要求,可采用末尾恒置一的方法,也就是最後一次上商恒上商1
補碼除法控制流程如下
對階 使得兩操作數的小數點對齊,遵循的原則是——小階向大階對其,即階小的數尾數右移,階數增加 尾數右移時,可能會使得低位有效數字丟失,影響精度——但是如果采取大階向小階對齊,尾數左移,可能會發生更嚴重的尾數高位丟失,運算出錯
尾數求和 用補碼進行相應的加法運算
規格化 當基數$r =2$時,尾數$S$規格化形式
可以看出,當完成規格化時,數值最高位和符號位相反,可以用異或運算判斷,有以下例外情況:
規格化可以分為左規和右規,以下兩種移位運算都是算術移位:
舍入 在進行對階和右規的過程中,可能會將尾數低位丟失,影響精度,可用舍入法提高尾數精度
溢出判斷 浮點數溢出和定點數溢出定義不一樣——浮點數溢出,是指階碼的溢出
尾數乘法運算
尾數相乘會得到雙倍字長的結果,若隻取一倍字長,需要將低位丟棄,采取的策略有以下:
以下為ALU框圖,A和B為兩個操作數,K指定運算類型,F為輸出
74LS181為四位ALU,其引腳圖和功能表參考教材
並行加法器 串行加法器是由當個全加器組成的加法器,數據逐位串行送入加法器進行運算(也就是用一個全加器一位一位的進行運算) 並行加法器由多個全加器組成,其全加器個數的多少取決於機器的字長,由於並行加法器可同時對數據的各位相加,各位是否能同時產生結果取決去采用的進位鏈
串行進位鏈 全加的邏輯表達式如下: $S_i=A_ioplus B_ioplus C_{i-1}$ $Ci=A_iB_i+left( A_i+B_i right) C_{i-1}$ 進位$Ci$由兩部分組成:本地進位$d_i=A_iB_i$,傳遞進位$left( A_i+B_i right) C_{i-1}$,成$t_i= A_i+B_i$為傳遞條件,則有$Ci=d_i+t_iC_{i-1}$
以四位加法器為例,采用串行進位鏈的電路如下
設與非門的級延遲時間為$t_y$,$n$為加法器最長進位時間為$2n t_y$
並行進位鏈 並行進位鏈是指並行加法器中進位信號是同時產生的,也成為先行進位、跳躍進位,有兩種實現方式
將n為全加器分為若幹小組,小組內的進位同時產生,小組之間采用串行進位,以四位並行加法器為例
小組內的每個進位的產生隻與輸入小組的最低位進位有關,采取以下電路實現並行進位
假設與或非門即延遲時間為$1.5t_y$,小組內隻需要$2.5t_y$就能產生全部進位
基本思路是——將全加器分為若幹大組,大組中有分為若幹小組,小組內部以及小組之間並行產生進位,大組之間串行傳遞進位 對於一個大組中的每個小組,其最高位進位的邏輯表達式如下:
發現小組之間可以采用類似小組內部多個全加器 采用的並行進位策略,進位電路如下
D和T的產生,由於小組內部的同步進位電路得出:
現對一個$n=32$的雙重進位進行分析:
可以發現經過$10t_y$就能產生所有進位信號(是從產生d和t信號之後開始計算)
指令是由操作碼和地址碼兩部分組成的
操作碼 指明指令完成的操作,操作碼長度:
拓展操作碼技術 操作碼的長度隨著地址數的減少而增加,任何短操作碼不能是長操作碼的前綴,可以在短操作碼中留出一種,作為長操作碼的前綴(例如,下圖中選“1111”)
地址碼 用來指出指令的的源操作數的地址,可以是主存地址、寄存器地址或者IO設備的地址。
四個地址分別是:第一個操作數地址、第二個操作數地址、結果存放的地址、下一條指令的地址。一共需要4次訪存(取指令、取兩個操作數、存放結果)。 程序中的指令大多是按照順序執行的,PC能存放當前欲執行的指令的地址,同時可以計數,可以自動生成下一條指令的地址,因此指令的地址部分可以省去下一條指令的地址。
三個地址分別代表第一個操作數地址、第二個操作數地址、結果存放的地址,一共需要4次訪存(取指令、取兩個操作數、存放結果)。
存放操作的內存可以存放結果,可以減少一個地址得到二地址指令,如果結果是存放在寄存器ACC中,則隻需要3次訪存(取指令、取兩個操作數)。
ACC既可以存發結果,也可以存發一個操作數(當前操作數可以上一次運算的結果),一次隻需要一個地址(操作數地址),一共需要2次訪存(取指令、取一個操作數)。
指令中沒有地址碼,如空操作(NOP)、停機(HLT)沒有操作數,而子程序返回(RET)、中斷返回(IRET)的操作數地址隱含在堆棧指針SP中。
用硬件資源(PC、ACC)可以代替指令字中某些地址字段後:
指令的字長取決於操作碼長度、地址碼個數和地址碼長度。
早期計算機指令字長、機器字長和存儲字長相等,指令字長固定,控制方式比較簡單。
現在計算機的指令系統可以采用不同位數的指令,控制電路比較復雜,多字長指令需要多次訪存才能取出完整指令,為瞭提高指令運行速度和節省存儲空間,盡可能把常用的指令(如,數據傳送指令、算邏輯運算指令)設計成單字長或短字長格式指令。
機器中常見的操作數類型有以下:
單個數據在存儲器存儲的方式
字節編址方式 以下為存儲字長為8字節的機器為例子
優點不浪費存儲空間,但是除瞭字的第一個字節以外,其他位置的訪存可能需要兩個存儲周期的時間,讀寫控制比較復雜。
浪費瞭空間,但是訪問任何數據隻需要一個存儲周期,讀寫控制簡單
數據的存儲的起始位置,是數據長度的整數倍,是之前兩種方案的折中,在一個存儲周期可以完成數據訪問,內存浪費也不算太嚴重
不同的機器操作類型不同,但是幾乎所有機器都有以下幾種通用操作: 數據傳送
算術邏輯操作 算術操作:加、減、乘、除、增一、減一、取負數 邏輯操作:與、或、非、異或
移位 分為算術移位、邏輯移位、循環移位
轉移 改變指令的執行順序
不受條件約束,直接把程序轉移到下一條需要執行的指令的地址,例如JMP X
根據當前指令執行結果來決定是否需要轉移,一般機器能夠提供一些條件碼,例如,零標志位Z
、負標識位N
、溢出標志位V
、進位標志位C
、奇偶標志位P
,為偶數時P=1
,其他標志位當滿足對應條件時均為1 SKP DZ
表當觸發器D為零時,跳過一條指令
調用指令CALL
與返回指令RETURN
配合使用
陷阱Trap是一種意外事故的中斷,此時計算機發出陷阱指令,暫停當前程序的執行,轉入故障處理程序進行故障處理。一般不提供給用戶使用,作為隱指令(指令系統中不提供的指令),但是有些機器設置供給用戶使用陷阱指令,用來完成系統調用。
輸入輸出 對於IO單獨編址的計算機,通常設置輸入輸出指令,完成數據在寄存器和外部IO設備之間的轉移,IO設備和內存一起編址的計算機,不需要輸入輸出指令,使用轉移指令完成對應操作。
指令尋址比較簡單,分為順序尋址、跳躍尋址
數據尋址類型較多,指令字段中需要一個字段來指明尋址的方式,指令的地址碼不一定代表真實地址,稱為形式地址,記作A,操作數的真實地址稱為有效地址,記作EA
立即尋址 操作數本身就存儲在指令地址碼字段,用#
代表立即尋址。
直接尋址 EA=A
。尋找操作數比較簡單,不需要計算操作數的地址,指令執行過程訪存一次。缺點是A的位數限制瞭操作數的尋址范圍,必須修改A,才能修改操作數地址。
隱含尋址 尋址標志位隱含表示操作數在某個寄存器中。
間接尋址 形式地址指向的存儲單元中存儲的是有效地址,即EA=(A)
。擴大瞭尋址范圍;便於編制程序,例如用間接尋址很容易實現子程序的返回,在主程序中多次調用自程序時,不需要修改子程序指令,而是修改(A)
即可。
間接尋址缺點是需要訪存多次。 多次間接尋址,可用存儲字的首位來標志間接尋址是否結束。
寄存器尋址 地址碼部分給出的是寄存器的編號,即EA=Ri
。無須訪存,減少執行時間;寄存器數量有限,縮短瞭指令字長。在計算機中應用廣泛。
寄存器間接尋址 寄存器中保存的是有效地址,即EA=(Ri)
。需要訪存一次。
基址尋址 設有基址寄存器BR
,EA=A+(BR)
。
基址寄存器有隱式和顯式兩種:
BR
,用戶不必明顯指出該基址寄存器,隻需有指令的尋址特征反映。基址尋址可以擴大操作數尋址范圍;在多道程序中很有用(操作系統的地址空間分段)。
變址尋址 和基址尋址類似,EA=A+(IX)
,但是不同的是,基址尋址中,基址不變,形式地址改變,而在變址尋址中,形式地址不變,基址改變。 變址尋址主要用於處理數組問題,在數組處理過程中,將形式地址A
設置為數組首地址,通過在變址存儲器中存放不同偏移量來訪問數組元素,使用編制循環程序。 變址尋址還可以與其他尋址方式結合使用,如EA=A+(IX)+(BR)
。
相對尋址 有效地址由PC的值和形式地址相加得出,EA=A+(PC)
。
特點在於轉移地址不固定,無論程序在主存哪個區域,都可以正確運行,對於編寫浮動程序有利;廣泛用於轉移指令。需要註意形式地址的設置問題,執行當前指令時,PC的值已經加一。
堆棧尋址 要求計算機中設有堆棧。堆棧中數據先進後出,棧頂為低地址,棧底為高地址,用堆棧指針SP
Stack Point指出棧頂地址。
進棧則(SP)+1——>SP
,出棧則(SP)-1——>SP
。進出棧不一定是加一減一,取決於主存編制方式。
IBM 360 **R**
表示存儲器,X
表示由變址寄存器指出的內存地址,S
表示內存,I
表示立即數。 結果存儲在左邊的符號表示的位置,如RR
結果存儲在寄存器,SI
結果存儲在內存中。
Intel 8086 指令字長不定長,為1-6個字節。
地址格式如下:
早期為瞭簡化編譯器的任務,縮小機器指令和高級語言之間的差距,產生瞭增加復雜指令的辦法;後來發現,如果編譯器過多依賴復雜指令,對減少機器代碼、降低指令執行數和提高流水性能不利。 由於典型程序中 80% 的語句僅僅使用處理機中 20% 的指令,RISC的產生就是用 20% 的簡單指令組合不常用的80% 的指令功能。
LOAD
和STORE
指令訪存,其他指令都在寄存器完成。商品化的RISC機器通常不會是純RISC機器,以上特點並不是所有RISC機器都具備。
CPU實質包含運算器和控制器兩大部分,運算器在第6章已經提及,這裡側重於控制器的功能。 CPU的功能有:取指令、分析指令、執行指令、控制程序輸入及結果輸出、總線管理、處理異常。這些功能可以劃分為五類:
分析實現CPU五大類功能各自所需的結構:
用戶可見寄存器
控制和狀態寄存器
CU形成操作命令序列,有兩種形成方式:
中斷系統和CU在後面章節再具體介紹。
指令周期——CPU取出一條指令並完成執行所需的全部時間,可大致分為兩個階段:
不同指令的指令周期是不同的,如下圖:
8dc2fa3f2705a3dbd0f23416a2ddd81f
采用間接尋址或執行中斷的指令還有間址周期和中斷周期: 例如,當CPU采用中斷方式和IO交換信息時,在每條指令執行階段結束之前需要發出中斷查詢指令,當有中斷請求時,就進入中斷周期以響應中斷。
取值周期 根據PC中的地址,從內存取出指令送到IR,最後要將PC增加一。
間址周期 將MDR中形式地址部分送到MAR進行處理。
執行周期 不同指令執行周期數據流不同,不用統一數據流圖表示。
中斷周期
為瞭提高計算機速度,一方面可以提期間的性能;另一方面可以改進系統的結構,開發系統的並行性。 並行包含兩重含義:
並行的等級:
指令的流水作業就是一種指令級的並行。
先把指令周期分為取指和執行階段,執行的串行執行流程如下:
可以看出在任一時刻總是有取值部件或指令執行部件空閑,為瞭提高效率,可以讓兩條指令重疊,即指令的二級流水:
如果取值階段和執行階段時間相同,取值和執行階段可以完美重疊,那麼速度可以提升一倍,實際上很難達到提升一倍的效果,原因有:
為瞭進一步提高處理速度,可以將指令的處理過程劃分為更細的六個階段:
指令可以形成六級流水:
結構相關 不同指令爭奪同一功能部件產生的資源沖突。例如,FI、FO、WO都需要訪存,可能會發生發出沖突,如下:
解決方法:
數據相關 各條指令因為重疊操作,可能改變瞭對操作數的執行結果,導致數據相關沖突。
解決方法:
控制相關 由轉移指令引起,統計表示轉移指令約占總指令1//4,會使流水線喪失很多性能。
解決方法:
吞吐率 單位時間內完成指令的數量
加速比 $m$段流水線和等功能非流水線的速度之比。 $S_p=frac{nmvarDelta t}{mvarDelta t+left( n-1 right) varDelta t}=frac{m}{1+frac{m-1}{n}}$ 當$n>>m$時,加速比趨近於$m$。
效率 流水線中各功能段的利用率。 $E=frac{nmvarDelta t}{mvarDelta t+left( n-1 right) varDelta t}=frac{n}{m+n-1}=frac{S_p}{m}=T_pvarDelta t$ 當$n>>m$時,效率趨近於1。
超標量技術 超標量(superscalar)技術是指每個時鐘周期內可同時並發多條獨立指令,要求配置多個功能部件和指令譯碼電路、多個寄存器端口和總線。
超標量計算機不能挑戰指令執行順序,但是可以通過編譯優化技術,並能並行的指令搭配起來。
超流水技術 超流水技術(superpipeline)是將一些流水線寄存器插入流水線段中,將流水線再分段。在一個時鐘周期內將一個功能部件使用多次。 同樣不能改變指令執行順序,通過編譯進行優化。
超長指令字技術 超長指令字技術(VLIW)和超標量技術都是采用多條指令能在多個處理部件中並行處理的結構。超標量的指令來自標準的指令流,VLIW是在編譯時挖掘出指令之間的並行性後,把能並行的指令合並為一條具有多個操作碼字段的超長指令。
指令流水線結構
在流水線每個操作部件的後面,都要有一個緩沖寄存器(鎖存器),稱為流水寄存器,這個緩沖寄存器用於保存本階段的執行結果,以保證各個部件之間的速度是匹配。
運算流水線 流水線技術還可以用於部件級別,例如浮點數的加法運算也可以進行流水線工作:
分段的原則是保證每段操作時間盡量一致。
引起中斷的因素
引起中斷的因素稱為中斷源。中斷源可以分為不可屏蔽中斷,如電源掉電,和可屏蔽中斷。
中斷系統解決的問題
中斷請求標記 中斷請求觸發器INTR為1表示有中斷請求,多個觸發器集成在CPU內部形成中斷請求標記寄存器,如下:
中斷請求觸發器即可以集成在CPU內部的中斷系統,也可以分散在各個中斷源。
中斷判優邏輯
一種為鏈式排隊器,對應INTR分散在各個中斷源的情況,參考IO程序中斷方式。另一種排隊器設在CPU內部,結構如下:
通過編寫查詢程序實現。
硬件向量法 利用硬件產生向量地址,再由向量地址找到中斷服務程序的入口地址。向量地址可以利用排隊器的輸出通過一個編碼電路形成。 通常有兩種方式,向量地址內存單元放置的是:無條件轉移指令,或者設置向量表,存儲單元內容為入口地址。 硬件向量法尋找入口地址速度快,在現代計算機被普遍采用。
軟件查詢法 不涉及硬件方法,查詢時間較長。
響應中斷的條件 CPU能夠響應中斷的條件是 允許中斷觸發器EINT
為1。
響應中斷的時間 CPU總是在指令執行周期結束後,響應中斷。在一個指令的執行周期結束後,統一向中斷源發送查詢信號,如果有中斷就進行響應。 某些計算機中有些指令的執行時間很長,可在指令執行周期過程中設置若幹個查詢端點。
中斷隱指令 中斷隱指令是機器指令系統中沒有的指令,在中斷周期中硬件自動完成的一條指令。具體操作如下:
將當前程序計數器PC
的內容保存到存儲器。可以存入在存儲器的特定單元(0號地址)或者存入堆棧。
使用硬件向量法或者軟件查詢法。
單重中斷開始響應中斷時就關中斷,避免受到其他中斷源的影響。以下為硬件關中斷的示意圖:
保護現場
恢復現場 將寄存器的內容恢復到中斷處理前的狀態,由中斷服務程序完成。
中斷屏蔽技術主要用於多重中斷。 實現多重中斷的條件
屏蔽技術 排隊器分散在接口上時,單個中斷請求接口電路如下,隻有屏蔽觸發器為MASK
為0時才能發出中斷請求。
排隊器集成在CPU內部時,加上屏蔽條件,組成具有屏蔽功能的排隊器:
將所有屏蔽觸發器組合在一起,構成一個屏蔽寄存器,屏蔽寄存器的內容稱為屏蔽字。屏蔽字和中斷源的優先級是一一對應的,如下圖:
屏蔽技術改變優先級 優先級分為相應優先級和處理優先級。
假設現在有4個中斷源,響應優先級為$Arightarrow Brightarrow Crightarrow D$,CPU執行中斷程序過程如下圖:
對中斷源的屏蔽字進行修改:
此時CPU執行過程如下:
可以看到,CPU依然按照響應優先級進行響應,但是在開中斷之後,會被處理優先級更高的中斷源打斷。
多重中斷的斷點保護 中斷系統對斷點的保護是在中斷周期有中斷隱指令實現的,對用戶透明。程序斷點可以保存在以下位置:
控制單元具有發出各種微操作命令(控制信號)序列的功能。
取指令的過程可以歸納為以下操作:
不同指令的執行周期的微操作是不同的,下面分情況進行討論: 非訪存指令
CLA
,$0longrightarrow ACC$。COM
,$overline{ACC}longrightarrow ACC$。SHR
,$L(ACC)longrightarrow R(ACC),ACC_0longrightarrow ACC_0$。CSL
,$R(ACC)longrightarrow L(ACC),ACC_0longrightarrow ACC_n$。STP
。訪存指令 這類指令在執行階段需要訪問存儲器。
轉移類指令
JMP X
,$Ad(IR)longrightarrow PC$。BAN X
為例,若上一條指令運行結果為負則轉到X
,否則繼續執行,記作$A_0cdot Adleft( IR right) +overline{A_0}cdot left( PC right) longrightarrow PC$,其中$A_0$為上一條指令運行結果的最高位。中斷周期要使用中斷隱指令保存斷點、尋找中斷服務程序入口地址、硬件關中斷。假設斷電保存在主存0號地址,采用硬件向量法尋找入口地址。
以下為控制單元的外特性框圖:
輸入信號
輸出信號
不采用CPU內部總線的方式 按一定時序控制門電路的開關,如下:
采用CPU內部總線方式 也是按一定時序打開對總線和部件之間的線路進行開關控制,如下:
機器周期 機器周期是指令執行過程中的一個基準時間。確定機器周期需要指令執行的步驟和每一步驟所需時間,有以下策略:
時鐘周期 一個機器周期裡可完成若幹微操作,每個時鐘周期(節拍)完成一個或幾個需要同時執行的操作。時鐘周期是計算機操作的最小時間單位。
多級時序系統 每個指令周期內的機器周期數可以相等也可以不等,每個機器周期內的節拍數可以等也可以不等:
一般而言CPU主頻越高,機器的運行速度越快,但也和機器周期中含時鐘周期數和指令周期含機器周期數有關: $MIPS=frac{CPUtext{主頻}}{text{平均每條指令所含時鐘周期數量}times 1,000,000}$
同步控制
采用最長的微操作序列和最繁的微操作作為標準,采用完全統一的,具有時間間隔和相同數目節拍的機器周期運行不同指令。對於較簡單指令,造成時間上的浪費。
每個機器周期內的節拍數可以不等,可解決微操作執行時間不一的問題。通常把大多數微操作安排在一個較短的機器周期內完成,對於復雜的微操作,采用延長機器周期或增加節拍的方法。
大部分指令安排在統一的、較短的機器周期內完成。少數操作復雜的指令中的某些操作(如乘除法和浮點運算)采用局部控制方式完成。
局部節拍的每一個節拍寬度和中央控制節拍的寬度相同。局部控制的節拍要和作為中央控制節拍的延續,保證局部控制和中央控制的同步。
異步控制 采用應答方式。可以使得CPU沒有空閑狀態,結構比同步控制復雜。
聯合控制方式 同步控制和異步控制相結合。大部分統一、小部分區別對待。
人工控制方式 為瞭調機和軟件開發的需要,在機器面板或內部設置一些開關或按鍵。
Reset
鍵:使計算機處於初始狀態。本章主要介紹控制單元的兩種設計方法——組合邏輯設計和微程序設計。
指令的操作碼是決定控制單元發出不同控制信號的關鍵。為瞭簡化控制單元的邏輯,假設IR
中的$n$位操作碼經過譯碼產生$2^n$個輸出信號,每一個輸出信號對應一個微操作。
安排微操作的節拍應該註意以下:
列出微操作命令的操作時間表 寫出每一個節拍內要進行的微操作。
寫出微操作命令的最簡邏輯表達式 列出微操作命令的邏輯表達式,表明控制該微操作的的信號在哪些指令的哪些階段哪些節拍會有效。要求能夠利用現有的電路實現邏輯表達式。
畫出微操作命令的邏輯圖 根據邏輯表達式畫出邏輯圖。實際上需要考慮門的扇入系數。
為瞭克服組合邏輯控制單元線路龐雜的缺點,采用與存儲程序類似的思想來解決微操作命令序列的形成。 微程序設計省去瞭組合邏輯設計過程中對邏輯表達式的化簡,控制信號以二進制代碼存儲,可以通過修改微指令代碼,改變操作內容,便於調試、修改,有利於計算仿真。
一條機器指令對應一個微程序,一個微程序包含多個微指令,微指令存儲在ROM
中,一個微指令一般對應多個能夠並行執行的微操作命令。
機器指令對應的微程序 微程序設計方法設計控制單元的過程:根據機器指令所需的微操作命令的先後順序,編寫每一條機器指令對應的微程序。 可以將一些機器指令共有的操作統一編成同一個微程序,如取值周期微程序、間址周期微程序、中斷周期微程序。
微程序控制單元基本框圖 微指令存儲在控制存儲器中,通過順序邏輯部件產生下一條微指令的地址。
微指令的格式如下,包括操作控制部分和順序控制部分。操作控制部分指令要進行的微操作,順序控制指明下條微指令的地址。
直接編碼方式 指令的操作控制部分的每一個“1”直接對應一個微操作。這種方式含義清晰,微指令從控存中讀出就能發出控制命令,速度快。但是由於$n$個位隻能對應$n$個操作命令,需要的控存的容量很大。
字段直接編碼方式 將不能同時執行的(互斥)微操作放在同一個字段中(一個字段的譯碼輸出隻有一個位有效,對應一個微操作),一個$n$位字段通過譯碼電路譯碼產生$2^n$種輸出,對應不同的微操作。這種方式縮短瞭微指令長度,但是增加瞭譯碼電路,使得微程序執行速度稍微減慢。
字段間接編碼方式 一個字段的某些為命令還需要另一個字段中某些微命令來解釋。進一步縮短微指令字長,但是削弱瞭微指令的並行控制能力,通常作為字段直接編碼的一種富足手段。
混合編碼 把直接編碼和字段編碼混合使用,綜合考慮微指令字長、靈活性和執行速度等方面。
由於微指令的下地址指出 顧名思義,這種方法又稱為斷定方式。
根據機器指令的操作碼形成 當機器指令放入IR
之後,微指令的地址根據機器指令的操作碼經過位地址形成部件給出。
增量計數法 在很多情況下,後續微指令的地址是連續的,對於順序地址可以采用增量計數法。$left( CMAR right) +1longrightarrow CMAR$。
分支轉移 條件轉移指令,需要根據標志來決定下一條微指令的地址。微指令格式如下:
轉移方式指明判別條件,轉移地址指明轉移成功後的去向。
測試網絡 將順序控制的地址的部分字段設置為測試地址,進過測試網絡之後和非測試地址組成形成新地址。
硬件產生微程序入口地址 當電源加電後,第一條微指令的地址可由專門的硬件電路產生,也可以由外部直接向CMAR
中輸入微指令的地址。該地址其實是取值周期的微程序的入口地址。
水平型微指令 一次能夠定義並執行多個並行操作的微命令。如之前談到的指令編碼格式的所有指令。
垂直型微指令 采用類似機器指令操作碼的方式。設置微操作碼字段,微操作碼規定微指令功能,通常一條微指令控制1-2種微操作,並不強調並行控制能力。
兩種微指令對比
靜態微程序設計 微程序無需改變,控制存儲器采用ROM。
動態微程序設計 通過改變微指令和微程序來改變機器指令,有利於仿真,采用EPROM。
機器指令用微程序解釋,微程序又可以用毫微程序解釋,也就是微指令可以用毫微指令解釋。采用毫微程序設計的計算機優點是使用少量的控制存儲器空間來達到高度並行。
毫微程序設計采用兩級微程序的設計方法:
兩級微程序分別存放在兩級控制存儲器中。水平型微指令和垂直型微指令並不是一一對應的關系,而是由水平型為指令(毫微指令)組成的毫微程序去執行垂直型微指令的操作。
完成一條微指令也分為兩個階段:取微階段和執行階段。兩個階段的的操作是在不同的部件中完成的,可以並行執行,形成二級流水。
下一篇
經常看到網上很多宣傳,馬來西亞留學消費水平,相當於國內三線城市,普通傢庭依舊可以承擔,首先,個人觀點:傢庭收入十幾萬...
SDK即Software Development Kit,软件开发工具包,辅助开发应用软件的相关二进制文件、文档、范例和工具的集合。本文不展开 ...