《Verilog HDL數(shù)字系統(tǒng)設計-原理、實例及仿真》課件第11章_第1頁
《Verilog HDL數(shù)字系統(tǒng)設計-原理、實例及仿真》課件第11章_第2頁
《Verilog HDL數(shù)字系統(tǒng)設計-原理、實例及仿真》課件第11章_第3頁
《Verilog HDL數(shù)字系統(tǒng)設計-原理、實例及仿真》課件第11章_第4頁
《Verilog HDL數(shù)字系統(tǒng)設計-原理、實例及仿真》課件第11章_第5頁
已閱讀5頁,還剩148頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第11章模型機設計11.1模型機概述11.2RISCCPU簡介11.3RISCCPU指令系統(tǒng)設計11.4RISCCPU的數(shù)據(jù)通路圖11.5指令流程設計11.6CPU內(nèi)部各功能模塊的設計與實現(xiàn)11.7RISCCPU設計11.8模型機的組成

11.1模??型??機??概??述

CPU是計算機系統(tǒng)中最為重要的組成部分,它在計算機系統(tǒng)中負責信息的處理和控制,因而被人們稱為計算機的大腦。CPU和外圍設備構成計算機。模型機是一個簡單的計算機硬件系統(tǒng),可以實現(xiàn)計算機的基本功能。

計算機的體系結構可分為兩種類型:馮·諾依曼結構和哈佛結構。大多數(shù)CPU采用馮·諾依曼結構。馮·諾依曼結構的處理器使用同一個存儲器,經(jīng)由同一個總線傳輸,具有以下特點:

(1)結構上由運算器、控制器、存儲器和輸入/輸出設備組成。

(2)存儲器是按地址訪問的,每個地址是唯一的。

(3)指令和數(shù)據(jù)都是以二進制形式存儲的。

(4)指令按順序執(zhí)行,即一般按照指令在存儲器存放的順序執(zhí)行,程序的分支由轉移指令實現(xiàn)。

(5)以運算器為中心,在輸入輸出設備與存儲器之間的數(shù)據(jù)傳送都途經(jīng)運算器。運算器、存儲器、輸入輸出設備的操作以及它們之間的聯(lián)系都由控制器集中控制。哈佛結構使用兩個獨立的存儲器模塊,分別存儲指令和數(shù)據(jù),并具有一條獨立的地址總線和一條獨立的數(shù)據(jù)總線,具有以下特點:

(1)每個存儲模塊都不允許指令和數(shù)據(jù)并存,以便實現(xiàn)并行處理。

(2)利用公用地址總線訪問兩個存儲模塊(程序存儲模塊和數(shù)據(jù)存儲模塊),公用數(shù)據(jù)總線則被用來完成程序存儲模塊或數(shù)據(jù)存儲模塊與CPU之間的數(shù)據(jù)傳輸。

(3)地址總線和數(shù)據(jù)總線由程序存儲器和數(shù)據(jù)存儲器分時共用。

11.2RISCCPU簡介

11.2.1RISCCPU的基本特征

與RISCCPU(ReducedInstructionSetComputer?CPU,精簡指令系統(tǒng)計算機中央處理器)對應的是CISCCPU(ComplexInstructionSetComputerCPU,復雜指令系統(tǒng)計算機中央處理器),RISCCPU主要具有以下特點:

(1)選取一些使用頻度較高的簡單指令,并用這些簡單指令的有效組合來實現(xiàn)較復雜指令的功能。

(2)指令長度固定,指令格式、尋址方式類型相比CISCCPU要少。

(3)一般只有取數(shù)、存數(shù)指令訪問存儲器,其余類型指令的操作都是在寄存器之間完成的。

(4)?CPU中設計有多個通用的寄存器,指令執(zhí)行過程中所需要的數(shù)據(jù)一般暫時存放于寄存器中,這樣有利于提高指令的執(zhí)行速度。

(5)?RISCCPU常采用流水線技術,這樣大部分指令可在一個時鐘周期內(nèi)完成。若采用超標量和超流水線技術,可使每條指令的平均執(zhí)行時間小于一個時鐘周期。

(6)控制器采用組合邏輯控制方式,不用微程序控制方式。

(7)一般采用優(yōu)化的譯碼程序。

CPU(CentralProcessingUnit,中央處理單元)是計算機的核心部件。計算機進行信息處理可分為兩個步驟:

(1)將數(shù)據(jù)和程序(即指令序列)輸入到計算機的存儲器中。

(2)從第一條指令地址開始執(zhí)行該程序,得到所需結果,結束運行。

CPU的作用是協(xié)調并控制計算機的各個部件執(zhí)行程序的指令序列,使其有條不紊地進行,因此它必須具有以下基本功能:

(1)取指令。當程序已在存儲器中時,首先根據(jù)程序入口地址取出一條程序,為此要發(fā)出指令地址及控制信號。

(2)分析指令。分析指令即指令譯碼,是對當前取得的指令進行分析,指出它要做何種操作,并產(chǎn)生相應的操作控制命令。

(3)執(zhí)行指令。根據(jù)分析指令產(chǎn)生“操作命令”形成相應的操作控制信號序列,控制運算器、存儲器及輸入輸出設備的動作,實現(xiàn)每條指令的功能,其中包括對運算結果的處理以及下一條指令地址的形成。11.2.2RISCCPU的基本構成

RISCCPU主要包括三部分功能:數(shù)據(jù)存儲、數(shù)據(jù)運算、時序控制。與此對應的硬件也有三大部分:各種寄存器、運算器及控制器。其基本結構如圖11.1所示。圖11.1RISCCPU的基本結構

11.3RISCCPU指令系統(tǒng)設計

這里設計的是指令字長固定為16位的RISCCPU。該指令系統(tǒng)由32條指令組成,包含了常用各種類型的簡單指令,如表11.1所示。該模型機的數(shù)據(jù)存儲字長也為16位。指令格式固定,操作數(shù)尋址方式僅為三種,即大部分指令采用寄存器尋址,僅有訪存指令(LOAD/STORE)是采用存儲器尋址,另有三條指令涉及到立即數(shù)尋址。指令格式類型如圖11.2所示。其中OP表示操作碼,DR表示目的寄存器地址,SR表示源寄存器地址,IMM表示立即數(shù),OFFSET表示偏移地址。下面分別介紹各類指令的主要功能。圖11.2指令格式類型

1.算術邏輯類指令

(1)帶進位加法指令(ADCDR,SR)。它的功能是將取自數(shù)據(jù)寄存器組的兩個數(shù)據(jù)[DR]和[SR]相加后再加上進位標志位,將計算結果寫回目的寄存器DR中,并根據(jù)計算結果設置標志位CF、ZF、OF和SF。

(2)帶進位減法指令(SBBDR,SR)。此指令與帶進位的加法指令類似,它是將目的寄存器DR的值減去源寄存器SR的值,然后再減去進位標志位,將結果寫回目的寄存器DR中,并根據(jù)計算結果設置標志位。

(3)無符號定點乘法指令(MULDR,SR)。此指令是將目的寄存器DR的值乘以源寄存器SR的值,將結果的高16位寫回目的寄存器DR中,低16位寫回源寄存器SR中,并根據(jù)計算結果設置標志位。

(4)無符號定點除法指令(DIVDR,SR)。此指令是將目的寄存器DR的值除以源寄存器SR的值,將結果寫回目的寄存器DR中,并根據(jù)計算結果設置標志位。

(5)立即數(shù)加法指令(ADDIDR,IMM)。此指令是將目的寄存器DR的值加上指令字中的8位立即數(shù)IMM,再加上進位標志位,將計算結果寫回目的寄存器DR中,并根據(jù)計算結果設置標志位CF、ZF、OF和SF。

(6)比較指令(CMPDR,SR)。此指令是將目的寄存器DR的值與源寄存器SR的值進行比較,然后根據(jù)比較結果設置標志位。若兩數(shù)相等,則置零標志位為1;若目的寄存器DR的值比源寄存器SR的值大,則置符號位SF為1;若目的寄存器DR的值比源寄存器SR的值小,則置符號位SF為0。

(7)邏輯與指令(ANDDR,SR)。此指令是將目的寄存器DR的值與源寄存器SR的值進行與運算,將結果寫回目的寄存器DR中,并不影響標志位。

(8)邏輯或指令(ORDR,SR)。此指令是將目的寄存器DR的值與源寄存器SR的值進行或運算,將結果寫回目的寄存器DR中,并不影響標志位。

(9)邏輯非指令(NOTDR)。此指令是將目的寄存器DR的值進行邏輯非運算,將結果寫回目的寄存器DR中,并不影響標志位。

(10)邏輯異或指令(XORDR,SR)。此指令是將目的寄存器DR的值與源寄存器SR的

值進行異或運算,將結果寫回目的寄存器DR中,并不影響標志位。

(11)位測試指令(TESTDR,SR)。此指令是將目的寄存器DR的值與源寄存器SR的值進行與運算,結果不寫回目的寄存器DR,只根據(jù)運算結果設置標志位。若與運算的結果為0XFFFF,則設置零標志位ZF為0,否則置為1。

(12)邏輯左移位指令(SHLDR)。此指令是將目的寄存器DR的值進行左移一位運算,將結果寫回目的寄存器DR中,將移出的位寫入進位標志位中。

(13)邏輯右移位指令(SHRDR)。此指令是將目的寄存器DR的值進行右移一位運算,將結果寫回目的寄存器DR中,將移出的位寫入進位標志位中。

(14)算術右移位指令(SARDR)。此指令是將目的寄存器DR的值進行算術右移一位運算。

2.I/O類指令

(1)讀I/O端口指令(INDR,PORT)。此指令是從I/O端口讀取數(shù)據(jù),并將數(shù)據(jù)寫入寄存器中。

(2)寫I/O端口指令(OUTSR,PORT)。此指令是將源寄存器SR中的數(shù)據(jù)寫入I/O端口PORT。

3.數(shù)據(jù)傳送類指令

(1)寄存器間數(shù)據(jù)傳送指令(MOVDR,SR)。此指令是將源寄存器SR的值傳送至目的寄存器DR中。

(2)寄存器低位加載指令(MOVILDR,IMM)。此指令是將指令字中的立即數(shù)IMM(8位)傳入目的寄存器DR的低字節(jié)中。

(3)寄存器高位加載指令(MOVIHDR,IMM)。此指令是將指令字中的立即數(shù)IMM(8位)傳入目的寄存器DR的高字節(jié)中。

4.訪存類指令

(1)取數(shù)指令(LOADDR,SR)。該指令的功能是將源寄存器SR的值作為地址所指的存儲器中的數(shù)據(jù)讀出,并存入目的寄存器DR中。

(2)存數(shù)指令(STOREDR,SR)。該指令的功能是將源寄存器SR中的數(shù)據(jù)存入到以目的寄存器DR的值為地址所指的存儲器單元中。

5.堆棧操作指令

(1)出棧指令(POPDR)。該指令的功能是將堆棧棧頂指針SP所指的數(shù)據(jù)讀出并存入目的寄存器DR中。

(2)入棧指令(PUSHSR)。該指令的功能是將源寄存器SR中的數(shù)據(jù)存入堆棧棧頂指針SP所指的存儲單元中。

6.控制轉移類指令

(1)無條件轉移指令(JRADR)。此指令無條件跳轉至當前PC值+ADR處。

(2)條件跳轉指令(JRCADR)。此指令在進位標志位為1的情況下跳轉至當前PC值?+ADR處,否則不跳轉。

(3)條件跳轉指令(JRNCADR)。此指令在進位標志位為0的情況下跳轉至當前PC值?+ADR處,否則不跳轉。

(4)條件跳轉指令(JRZADR)。此指令在零標志位為1的情況下跳轉至當前PC值?+?ADR處,否則不跳轉。

(5)條件跳轉指令(JRNZADR)。此指令在零標志位為0的情況下跳轉至當前PC值?+ADR處,否則不跳轉。

7.標志位處理類指令

(1)進位位清0指令(CLC)。該指令的功能是將進位標志位清0。

(2)進位位置1指令(STC)。該指令的功能是將進位標志位置1。

8.處理器控制類指令

(1)空操作指令(NOP)。此指令執(zhí)行時,不進行任何具體功能,也不影響標志位,只占用一個指令周期的時間。

(2)停機指令(HLT)。該指令使CPU進入停機狀態(tài),除非有復位信號出現(xiàn),CPU才會解除此狀態(tài)。

11.4RISCCPU的數(shù)據(jù)通路圖

RISCCPU的數(shù)據(jù)通路圖如圖11.3所示。圖11.3RISCCPU的數(shù)據(jù)通路圖該CPU中有8個16位的可按字雙端口讀寫的通用數(shù)據(jù)寄存器組(REG_BANK),此外還涉及指令寄存器(IR)、地址寄存器(MAR)、數(shù)據(jù)寄存器(MDR)、堆棧指針寄存器(SP)以及標志寄存器(FLAG)、算術邏輯運算單元(ALU)、程序計數(shù)器等。算術邏輯運算單元的主要功能是對操作數(shù)進行運算。時序發(fā)生和控制部分主要由時鐘發(fā)生器(CLOCK)、控制器(CU)組成。按功能可將整個CPU劃分為以下11個功能模塊。

(1)時鐘發(fā)生器(CLOCK)。時鐘發(fā)生器的功能是使用外來時鐘信號生成一系列的時鐘信號并送往CPU的其他部件。

(2)控制器(CU)??刂破魇荂PU中的核心部件,CPU通過它來產(chǎn)生控制時序和控制信號,用以控制CPU中各個功能部件按一定的時序關系工作。此次設計的控制器由兩部分組成,即狀態(tài)機(CU)和狀態(tài)機控制器(CU_CONTRL)。

(3)指令寄存器(IR)。指令寄存器用于寄存當前執(zhí)行的指令。

(4)通用數(shù)據(jù)寄存器組(REG_BANK)。數(shù)據(jù)寄存器組由8個16位的通用寄存器組成。它是一個雙端口讀出、雙端口寫入的部件。此數(shù)據(jù)寄存器組用于存儲指令執(zhí)行過程中需要的數(shù)據(jù)以及指令執(zhí)行結果,且只允許按字訪問,即一次性讀取16位數(shù)據(jù)。

(5)程序計數(shù)器(PC)。程序計數(shù)器用于存儲程序的下一條指令在存儲器中的地址,CPU根據(jù)它來取指令。

(6)算術邏輯運算器(ALU)。算術邏輯運算器是一個16位的定點運算器,共支持14種邏輯、算術運算。

(7)運算器輸入控制部件。該部件用于控制運算器的輸入數(shù)據(jù)。送往運算器的數(shù)據(jù)有兩類:來自寄存器組的16位數(shù)據(jù)和來自指令字中的立即數(shù)。

(8)標志位寄存器(FLAG)。標志位寄存器是一個8位的寄存器,用于寄存程序執(zhí)行產(chǎn)生的標志位。其高4位沒有使用,低4位從低位到高位依次表示符號標志位、溢出標志位、零標志位和進位標志位。

(9)地址寄存器(MAR)。地址寄存器是用于存儲向地址總線輸出訪存地址的器件。訪存時的地址來自于它。

(10)數(shù)據(jù)寄存器(MDR)。數(shù)據(jù)寄存器是用于存儲要向地址總線輸出數(shù)據(jù),或者存放從數(shù)據(jù)總線上讀取到的數(shù)據(jù)的部件。它是雙向輸入輸出的。

(11)堆棧指針寄存器(SP)。堆棧指針寄存器用于存儲堆棧段當前的棧頂?shù)刂?16位)。每次出?;蜻M棧后都要更新它的值。各模塊的實現(xiàn)在11.6節(jié)中介紹。

11.5指令流程設計

要實現(xiàn)各指令,必須清楚每條指令的執(zhí)行過程,以及在此過程中涉及的各個部件及其動作控制信號的先后關系,因此首先需要分析指令系統(tǒng)中所有指令的流程。

(1)算術、邏輯運算類指令都是先把數(shù)據(jù)從寄存器中取出,然后經(jīng)運算器處理后再將結果寫回寄存器或者置標志位。以帶進位加法指令ADC為例,此指令執(zhí)行的流程如圖11.4所示。與ADC指令執(zhí)行流程基本一樣的還有SBB、DIV、MUL、AND、NOT、OR、XOR、SHL、SHR、SAR、CMP、TEST和ADDI等指令。圖11.4加法指令ADC的執(zhí)行流程

(2)數(shù)據(jù)傳送類指令包括寄存器間的數(shù)據(jù)傳送指令(MOVDR,SR)、寄存器低位加載指令(MOVILDR,?IMM)和寄存器高位加載指令(MOVIHDR,?IMM)。以寄存器間的數(shù)據(jù)傳送指令為例,該類指令的執(zhí)行流程如圖11.5所示。圖11.5寄存器間數(shù)據(jù)傳送指令MOV的執(zhí)行流程

(3)?I/O類指令包含寫I/O端口指令(OUTSR,PORT)和讀I/O端口指令(INDR,PORT)。寫I/O端口指令(OUTSR,PORT)的執(zhí)行流程如圖11.6所示。圖11.6寫I/O端口指令(OUTSR,PORT)的執(zhí)行流程

(4)控制轉移類指令可以分為無條件轉移指令和條件跳轉指令兩大類。現(xiàn)以條件轉移類指令JRC為例,其具體執(zhí)行流程如圖11.7所示。圖11.7條件轉移類指令JRC的執(zhí)行流程

(5)堆棧操作指令包括入棧指令和出棧指令?,F(xiàn)以出棧指令POP為例說明其具體執(zhí)行流程,如圖11.8所示。圖11.8出棧指令POP的執(zhí)行流程

(6)訪存類指令包括取數(shù)指令LOAD和存數(shù)指令STORE。取數(shù)指令LOAD的功能是將源寄存器SR的值作為地址所指的存儲器中的數(shù)據(jù)讀出并存入目的寄存器DR中,其執(zhí)行流程如圖11.9所示。圖11.9取數(shù)指令LOAD的執(zhí)行流程

(7)存數(shù)指令STORE的功能是將源寄存器SR中的數(shù)據(jù)存入到以目的寄存器DR的值為地址所指的存儲器單元中,其執(zhí)行流程如圖11.10所示。

(8)空操作指令NOP的執(zhí)行流程如圖11.11所示。

(9)停機指令(HLT)的執(zhí)行流程如圖11.12所示。圖11.10存數(shù)指令STORE的執(zhí)行流程圖11.11空操作指令NOP的執(zhí)行流程圖11.12停機指令HLT的執(zhí)行流程

11.6CPU內(nèi)部各功能模塊的設計與實現(xiàn)

本節(jié)介紹圖11.3中各功能模塊的設計、實現(xiàn)和仿真結果。

11.6.1時鐘發(fā)生器

時鐘發(fā)生器(CLOCK)利用外來時鐘信號clk來生成一系列時鐘信號clk1、fetch送往CPU的其他部件,其實現(xiàn)見代碼11.1。輸出fetch是輸入時鐘信號clk的八分頻信號,利用fetch的上升沿來觸發(fā)CPU控制器開始執(zhí)行一條指令。其各端口信號說明如下:

輸入信號:

clk——時鐘信號;

reset——復位信號。

輸出信號:

clk1——clk的反相信號;

fetch——clk的八分頻信號。

【代碼11.1】時鐘發(fā)生器模塊。圖11.13是時鐘發(fā)生器的模塊符號,圖11.14是其模塊的功能仿真結果。其中,reset為復位信號;clk為輸入時鐘信號;clk1為輸入時鐘信號的反相輸出時鐘信號;fetch為輸出信號,是輸入時鐘信號clk的八分頻信號。在構成模型機時,clk采用50?MHz的時鐘信號。圖11.13時鐘發(fā)生器的模塊符號圖11.14時鐘發(fā)生器的功能仿真結果11.6.2程序計數(shù)器

程序計數(shù)器(PC)用于提供執(zhí)行指令的地址。指令是按地址順序存放在存儲器中的,在控制器的控制下按順序讀取指令并執(zhí)行指令。CPU中有兩種途徑形成指令地址:其一是順序執(zhí)行的情況,這時PC的值根據(jù)當前指令的長度自動進行加法運算;其二是當遇到需要改變順序的指令時根據(jù)需要改變PC的值,例如執(zhí)行跳轉指令時,需要形成新的指令地址。程序計數(shù)器模塊的實現(xiàn)見代碼11.2,其各端口信號的說明如下:

輸入信號:

clk——時鐘信號;

rst——復位信號;

offset——轉移時的偏移量;

pc_inc——自加1控制信號(低電平加1);

pc_ena——PC更新使能控制信號。

輸出信號:

pc_value——PC當前值。復位后,PC=0x0000,即每次CPU重新啟動時將從存存器的零地址開始讀取指令并執(zhí)行。在指令的執(zhí)行過程中于指令譯碼之后對程序計數(shù)器進行更新,這樣可根據(jù)當前執(zhí)行指令的操作碼及狀態(tài)位來決定PC的更新值。如果正在執(zhí)行的指令是跳轉指令,則根據(jù)程序狀態(tài)寄存器(FLAG)中的相關狀態(tài)位來判斷是否發(fā)生跳轉,具體操作如表11.2所示。如果應發(fā)生跳轉的條件滿足,狀態(tài)控制器(CU)會將pc_ena、pc_inc信號輸出為高電位,PC的值更新為原PC值加上指令字中的OFFSET的值;如果不發(fā)生跳轉,狀態(tài)控制器(CU)會將pc_ena信號為高電位,pc_inc信號為低電位,此時PC值自加1。

【代碼11.2】程序計數(shù)器模塊。程序計數(shù)器的模塊符號如圖11.15所示,其功能仿真結果如圖11.16所示。圖11.15程序計數(shù)器的模塊符號圖11.16程序計數(shù)器的功能仿真結果11.6.3指令寄存器

指令寄存器(IR)用于暫存當前正在執(zhí)行的指令。指令寄存器的時鐘信號是clk,在clk的上升沿觸發(fā)。指令寄存器將數(shù)據(jù)總線送來的指令存入16位的寄存器中,但并不是每次數(shù)據(jù)總線上的數(shù)據(jù)都需要寄存,因為數(shù)據(jù)總線上有時傳輸指令,有時傳輸數(shù)據(jù)。由CPU狀態(tài)控制器的ir_ena信號控制數(shù)據(jù)是否需要寄存。復位時,指令寄存器被清零。由于每條指令為2個字節(jié),即16位,高5位是操作碼,低11位是偏移地址或者是目的寄存器和源寄存器(CPU的地址總線為16位,尋址空間為64?K字),因此設計中采用的數(shù)據(jù)總線為16位,每取出一條指令便要訪存一次。指令寄存器模塊的實現(xiàn)見代碼11.3,其各端口信號的說明如下:

輸入信號:

clk——時鐘信號;

rst——復位信號;

data——數(shù)據(jù)總線輸入;

ir_ena——IR更新使能控制。

輸出信號:

ir_out——IR當前值。

【代碼11.3】指令寄存器模塊。指令寄存器的模塊符號如圖11.17所示。圖11.17指令寄存器的模塊符號指令寄存器的功能仿真結果如圖11.18所示。從圖中可以看出,在rst無效的情況下,在時鐘信號clk的上升沿若ir_ena=1,則IR的數(shù)據(jù)ir_out會鎖存data此時的數(shù)據(jù)。圖11.18指令寄存器IR的功能仿真結果11.6.4地址寄存器

地址寄存器(MAR)是CPU與存儲器的一個接口,用于存放待訪問的存儲器單元的地址。其輸入、輸出邏輯關系如表11.3所示。地址寄存器模塊的實現(xiàn)見代碼11.4,其各端口信號的說明如下:

輸入信號:

clk——時鐘信號;

rst——復位信號;

mar_ena——鎖存使能信號;

mar_sel[1:0]——mar輸入選擇信號,用來選擇地址輸入源;

ir_addr1、ir_addr2——來自寄存器的地址;

pc_addr——pc數(shù)據(jù);

sp_addr——sp數(shù)據(jù)。

輸出信號:

mar_addr——地址寄存器的輸出。

【代碼11.4】地址寄存器模塊。地址寄存器的模塊符號如圖11.19所示。圖11.19地址寄存器的模塊符號地址寄存器的功能仿真結果如圖11.20所示,圖中的數(shù)據(jù)均為十六進制數(shù)據(jù)顯示。從圖中可以看出,MAR實際上是一個四路選擇器,在rst=1、mar_ena=1時,根據(jù)mar_sel信號的狀態(tài)從四個輸入數(shù)據(jù)(pc_addr、ir_addr1、ir_addr2和sp_addr)中選擇一路數(shù)據(jù)在clk上升沿對其鎖存。圖11.20地址寄存器的功能仿真結果11.6.5數(shù)據(jù)寄存器

數(shù)據(jù)寄存器(MDR)用于寄存將要被輸出到數(shù)據(jù)總線或送往運算器的數(shù)據(jù)。數(shù)據(jù)寄存器模塊的實現(xiàn)見代碼11.5,其各端口的信號說明如下:

輸入信號:

clk——時鐘信號;

rst——復位信號;

mdr_ena——mdr輸入使能信號;

mdr_sel[1:0]——數(shù)據(jù)寄存器輸入選擇信號,用來選擇輸入的數(shù)據(jù);

reg_in1、reg_in2——來自寄存器的輸入信號;

mem_in——來自存儲器的輸入信號。輸出信號:

mem_out——向數(shù)據(jù)總線的數(shù)據(jù)輸出;

reg_out——向指令寄存器(IR)的輸出。

數(shù)據(jù)寄存器輸入與輸出之間的邏輯關系如表11.4所示。

【代碼11.5】數(shù)據(jù)寄存器模塊。數(shù)據(jù)寄存器的模塊符號如圖11.21所示。圖11.21數(shù)據(jù)寄存器的模塊符號數(shù)據(jù)寄存器的功能仿真結果如圖11.22所示,圖中數(shù)據(jù)均為十六進制顯示。數(shù)據(jù)選擇器可以看做一個具有兩個輸出的三路數(shù)據(jù)選擇器。由mdr_ena和clk控制鎖存操作的時間,由mdr_sel控制輸出端口reg_out和mem_out的輸出結果。在第三個clk信號的上升沿,mdr_ena=1,mdr_sel=2,完成將reg_in2的數(shù)據(jù)鎖存到reg_out端口、mem_out為高阻狀態(tài)的功能。其他情況請讀者自己分析。圖11.22數(shù)據(jù)寄存器的功能仿真結果11.6.6寄存器組

寄存器組(RegisterArray)用于存儲指令執(zhí)行過程中需要的數(shù)據(jù)以及指令的執(zhí)行結果。這里設計的寄存器組由8個16位的通用寄存器組成,它是一個雙端口讀出、雙端口寫入的部件,只能按字訪問,即一次性讀取16位數(shù)據(jù)。寄存器組模塊的實現(xiàn)見代碼11.6,其各端口信號的說明如下:

輸入信號:

clk——時鐘信號;

rst——復位信號;

reg_read1——讀端口1讀控制信號(高有效);

reg_read2——讀端口2讀控制信號(高有效);

addr1——端口1地址信號;

addr2——端口2地址信號;

reg_write1、reg_write2——寫端口控制標志;

data_in1——輸入數(shù)據(jù)1;

data_in2——輸入數(shù)據(jù)2;

data_in3——輸入數(shù)據(jù)3。輸出信號:

reg_out1——讀端口1輸出數(shù)據(jù);

reg_out2——讀端口2輸出數(shù)據(jù)。

【代碼11.6】寄存器組模塊。寄存器組的模塊符號如圖11.23所示。圖11.23寄存器組的模塊符號寄存器組的功能仿真結果如圖11.24所示,在信號reg_write1和reg_write2的控制下先將數(shù)據(jù)分別寫入1、2、3、4寄存器,然后在信號reg_read1和reg_read2的控制下讀出數(shù)據(jù)。圖11.24寄存器組的功能仿真結果11.6.7堆棧指針寄存器

堆棧指針寄存器(SP)是用于存儲堆棧棧頂?shù)刂返?。入?PUSH)和出棧(POP)指令訪問的存儲單元地址是由SP指出的。這里設計的CPU采用默認的堆棧起始地址(0x0200),初始化時SP的值為0x0200。當執(zhí)行入棧(PUSH)指令時,控制信號sp_push有效,則SP的值加1;執(zhí)行出棧(POP)指令時,控制信號sp_pop有效,則SP的值減1。堆棧寄存器模塊的實現(xiàn)見代碼11.7,其各端口信號的說明如下:

輸入信號:

clk——時鐘信號;

rst——復位信號;

sp_pop——出棧控制信號;

sp_push——進??刂菩盘枴?/p>

輸出信號:

sp_value——棧頂指針。

【代碼11.7】堆棧指針寄存器模塊。堆棧指針寄存器的模塊符號如圖11.25所示,其功能仿真結果如圖11.26所示。圖11.26示出了在sp_pop和sp_push信號的控制下棧頂指針sp_value的變化過程。圖11.25堆棧指針寄存器的模塊符號圖11.26堆棧指針寄存器的功能仿真結果11.6.8控制器

1)狀態(tài)機控制器

狀態(tài)機控制器(cu_contrl)用于控制狀態(tài)機(cu)的啟停,復位信號有效后如果在clk上升沿檢測到fetch信號為高電平,則設置cu_ena為有效(高電平),標志一條新指令又從取指開始了。狀態(tài)機控制器模塊的實現(xiàn)見代碼11.8,其各端信號的說明如下:

輸入信號:

clk——來自時鐘發(fā)生器的時鐘信號;

rst——復位信號;

fetch——來自時鐘發(fā)生器的工作控制信號。

輸出信號:

cu_ena——用于控制狀態(tài)機工作的信號。

2)狀態(tài)機

狀態(tài)機(cu)是控制器的核心部件,它通過分析指令的操作碼(來自指令寄存器IR的op)和狀態(tài)位(來自狀態(tài)位寄存器FLAG)產(chǎn)生一系列按一定時序關系排列的控制信號,通過這些控制信號來控制整個CPU中各功能部件的運行。狀態(tài)機的具體工作過程是:在cu_ena信號高電平有效的情況下狀態(tài)機開始工作。每一個指令周期由9個時鐘周期組成,前4個時鐘周期對于所有的指令來說執(zhí)行的操作都一樣,即取指令,并將指令的操作碼送往控制器,指令字中的寄存器地址或立即數(shù)送往寄存器組或運算器數(shù)據(jù)輸入端;后5個時鐘周期則根據(jù)指令的不同而產(chǎn)生不同的操作時序控制信號。

【代碼11.9】控制器模塊??刂破鞯哪K符號如圖11.27所示。圖11.27控制器的模塊符號

cu模塊執(zhí)行ADC和HLT指令的功能仿真結果如圖11.28和圖11.29所示。圖11.28控制器的功能仿真結果(加法指令ADC)圖11.29控制器的功能仿真結果(停機指令HLT)比較圖11.29與圖11.28可以發(fā)現(xiàn),在圖11.29中,op=11111,表明該指令為停機指令HLT,停機指令前4個clk時鐘信號執(zhí)行取指令階段的操作,因此產(chǎn)生的控制信號與adc是完全一樣的,只是HLT指令在第六個時鐘信號產(chǎn)生hlt=1的停機信號。11.6.9算術邏輯運算單元

算術邏輯運算單元(ALU)可以執(zhí)行兩種運算:算術運算和邏輯運算。這里設計的算術邏輯運算器是一個16位的定點運算器,此運算器可執(zhí)行的算術運算有帶進位加法(ADC)、帶進位減法(SBB)、無符號除法(DIV)、無符號乘法(MUL)和立即數(shù)加(ADDI);可執(zhí)行的邏輯運算有邏輯與(AND)、邏輯或(OR)、異或(XOR)、邏輯非(NOT)、邏輯左移(SHL)、邏輯右移(SHR)、算術右移(SAR)、比較(CMP)和測試(TEST)等總共14種運算。算術邏輯運算單元模塊的實現(xiàn)見代碼11.10,其各端口信號的說明如下:

輸入信號:

data_a、data_b——運算器的兩路16位的輸入數(shù)據(jù);

alu_ena——算術、邏輯運算器工作使能信號;

alu_opr——5位運算控制輸入;

clk——輸入時鐘信號;

flag_in——8位來自標志寄存器的狀態(tài)數(shù)據(jù)。

輸出信號:

flag_out——運算器的標志位輸出信號;

alu_out——運算器的低16位運算結果輸出;

hi——運算器的高16位輸出。

【代碼11.10】算術邏輯運算單元的VerilogHDL實現(xiàn)。算術邏輯運算單元的模塊符號如圖11.30所示。圖11.30算術邏輯運算單元的模塊符號算術邏輯運算單元的部分功能仿真結果如圖11.31所示。為了編譯觀察,圖中輸入數(shù)據(jù)data_a、data_b、運算的結果alu_out、hi為十進制數(shù),其他信號均為二進制數(shù)。請讀者根據(jù)alu_opr的狀態(tài)分析輸入數(shù)據(jù)data_a和data_b與輸出alu_out之間的關系。圖11.31算術邏輯運算單元的功能仿真結果11.6.10標志寄存器

標志寄存器(FLAGS)是一個8位的寄存器,用于寄存程序執(zhí)行產(chǎn)生的標志位,其高4位沒有使用,低4位從低到高依次表示符號標志位SF、溢出標志位OF、零標志位ZF和進位標志位CF。標志寄存器(FLAGS)的實現(xiàn)見代碼11.11,其各標志位含義說明如下:

(1)符號標志位SF(SignFlag)。該位用于標識運算結果的符號。SF為1表示正數(shù),為0表示負數(shù)。

(2)溢出標志位OF(OverflowFlag)。該位用于標識運算結果是否溢出。當運算結果溢出時,OF置1;否則置0。

(3)零標志位ZF(ZeroFlag)。若指令運算結果為0,則置ZF為1,否則置0。

(4)進位標志位CF(CarryFlag)。算術指令執(zhí)行后,若運算結果最高位產(chǎn)生進位或錯位,則CF置1;否則置0。標志寄存器各端口信號的說明如下。

輸入端口:

clk——輸入時鐘信號;

rst——復位信號;

flag_set——標志寄存器更新信號;

flag_in——8位的輸入數(shù)據(jù)。

輸出端口:

flag_value——標志位數(shù)據(jù)輸出。

【代碼11.11】標志寄存器模塊的實現(xiàn)。標志寄存器的模塊符號如圖11.32所示,其功能仿真結果見圖11.33。圖11.33中,在clk的上升沿時刻,若flag_set=1,則falg_value鎖存此時的flag_in數(shù)據(jù)。圖11.32標志寄存器的模塊符號圖11.33標志寄存器的功能仿真結果

11.7RISCCPU設計

將前面設計實現(xiàn)的各功能模塊的端口進行連接就構成一個RISCCPU,并且可以對其進行功能測試。在綜合測試中為了能夠跟蹤指令在整個CPU中的執(zhí)行情況,特意將有些功能模塊之間傳遞的信號留有對外的接口,在測試成功通過后再將這些接口信號從CPU上刪除,這樣最后就可得到代碼11.12所示的完整的RISCCPU。

【代碼11.12】RISCCPU頂層模塊的實現(xiàn)。

RISCCPU的模塊符號如圖11.34所示。圖11.34RISCCPU的模塊符號

11.8模型機的組成

構建模型機的目的是在整機環(huán)境下對RISCCPU的功能進行測試。圖11.35所示的模型機是在RISCCPU模塊的基礎上增加了只讀存儲器ROM、隨機存儲器RAM和總線控制部件ADDR_DECODE而構成的模型機系統(tǒng)。圖11.35模型機結構框圖11.8.1總線控制

總線控制器用來產(chǎn)生存儲器的選通信號,根據(jù)地址總線上的輸出地址的大小來選通

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論