何芳成+韓曉彤+張珊+時(shí)浩然+周曉軍
摘 要:基于EDA技術(shù)設(shè)計(jì)的一種五級流水線CPU,它將指令分解為取指令、指令譯碼、指令執(zhí)行、訪問存儲器、數(shù)據(jù)寫回五階段流水處理。首先進(jìn)行結(jié)構(gòu)設(shè)計(jì),然后解決流水線CPU的各項(xiàng)相關(guān)問題,再進(jìn)行各模塊設(shè)計(jì)。最后基于CycloneⅢ系列FPGA硬件平臺和QuartusⅡ工具開發(fā)平臺,利用EP3C40Q240C8型FPGA芯片進(jìn)行設(shè)計(jì)與調(diào)試。
關(guān)鍵詞:EDA;流水線;CPU
引言
CPU是由基本的功能模塊和與之相連的數(shù)據(jù)通路組成,對于CPU的設(shè)計(jì),首先必須了解其結(jié)構(gòu)的細(xì)節(jié)和功能模塊的內(nèi)容。然后對各模塊電路進(jìn)行編輯設(shè)計(jì)、邏輯綜合、時(shí)序仿真和硬件設(shè)計(jì),最后組裝完成整個(gè)硬件系統(tǒng)。在這個(gè)過程中還包括指令系統(tǒng)的設(shè)計(jì)和軟件程序調(diào)試等步驟。在流水線CPU設(shè)計(jì)過程中重點(diǎn)解決結(jié)構(gòu)沖突、數(shù)據(jù)沖突、控制沖突三大問題。
1 流水線CPU工作原理
1.1 流水線原理
對于一條具體的指令執(zhí)行過程,通常可以分成五個(gè)部分:取指令,指令譯碼,取操作數(shù),運(yùn)算,寫結(jié)果。其中前面三個(gè)步驟一般由指令控制器完成,后面兩步則由運(yùn)算器完成。指令控制器完成了對第一條指令的處理后,不等待運(yùn)算器完成后續(xù)的處理直接開始對第二條指令的處理。
1.2 CPU的結(jié)構(gòu)與功能
CPU是負(fù)責(zé)執(zhí)行指令的,圖1為一個(gè)簡單指令的CPU結(jié)構(gòu)圖。
對于馮·諾依曼結(jié)構(gòu)的計(jì)算機(jī)來說,一旦程序進(jìn)入存儲器后,就可由計(jì)算機(jī)自動完成取指令和執(zhí)行指令的任務(wù),控制器就是專門用于完成此項(xiàng)工作的,它負(fù)責(zé)協(xié)調(diào)并控制計(jì)算機(jī)各個(gè)部件執(zhí)行程序的指令序列,其基本功能是取指令,分析指令和執(zhí)行指令。
1.3 流水線CPU工作原理
流水線是一個(gè)可以提高CPU運(yùn)行效率的技術(shù),它的核心思想是把多條指令的不同執(zhí)行階段重疊,讓CPU同時(shí)處理多條指令。在流水線CPU中,每條指令的執(zhí)行過程被分成多個(gè)執(zhí)行階段。只有當(dāng)某指令的執(zhí)行階段都完成后,該指令才算執(zhí)行完畢。在每一個(gè)指令執(zhí)行階段中,當(dāng)一條指令在該階段中完成執(zhí)行后,下一條指令將立即進(jìn)入到該執(zhí)行階段來執(zhí)行。當(dāng)流水線處于飽和狀態(tài)時(shí),將同時(shí)有流水線級數(shù)的指令在同時(shí)運(yùn)行。如圖2所示。
1.4 指令集
指令集是指CPU指令系統(tǒng)所能識別執(zhí)行的全部指令的集合。處理器要完成計(jì)算任務(wù),需要具備運(yùn)算、控制、傳送等指令。運(yùn)算指令是由運(yùn)算器單元(ALU)實(shí)現(xiàn),包括算術(shù)運(yùn)算指令、邏輯指令和位移指令??刂浦噶钍怯沙俗鲞\(yùn)算外的其他操作指令,如循環(huán)、跳轉(zhuǎn)、CPU控制等指令構(gòu)成,由CPU控制器單元實(shí)現(xiàn)。數(shù)據(jù)傳送指令是完成數(shù)據(jù)傳送的任務(wù),如寄存器、存儲器交換數(shù)據(jù)及自身交換數(shù)據(jù)的指令等。
2 流水線CPU創(chuàng)新設(shè)計(jì)
2.1 流水線工作的五個(gè)階段
取指令階段(IF),從指令存儲器中獲取指令存入IR寄存器,并更新PC寄存器的值。該階段完成計(jì)算下一條指令的地址(+1)以及取指操作,加法器完成加1操作,Lpm_Instrom完成取指操作。指令譯碼階段(ID),由IR寄存器中的指令的op和func字段譯碼出各個(gè)階段需要的控制信號,同時(shí)從寄存器組RegSet中獲取EXE階段所需要的操作數(shù)并將指令的立即數(shù)進(jìn)行擴(kuò)展。指令執(zhí)行階段(EXE),根據(jù)操作數(shù)計(jì)算出結(jié)果,算數(shù)運(yùn)算由ALU完成,移位運(yùn)算由移位器完成,通過控制信號Resultop選擇執(zhí)行結(jié)果。訪問存儲器階段(MEM),把EXE階段計(jì)算的結(jié)果作為數(shù)據(jù)存儲器的地址輸入端讀取數(shù)據(jù),若數(shù)據(jù)存儲器寫使能信號DMwen為高電平,那么需要把rt寄存器的數(shù)據(jù)寫入數(shù)據(jù)存儲器的對應(yīng)存儲單元。數(shù)據(jù)寫回階段(WB),選擇寫回寄存器組RegSet的數(shù)據(jù),根據(jù)前面的流水段傳遞的控制信號REwen和目的寄存器RegDest將數(shù)據(jù)寫回。
在每一個(gè)階段完成一條指令在該階段的執(zhí)行任務(wù)之后,將進(jìn)下一條指令的執(zhí)行。這樣,每兩個(gè)階段之間都需要有一組寄存器來保存剛剛執(zhí)行完成的指令的執(zhí)行結(jié)果。該執(zhí)行結(jié)果將交給下一個(gè)執(zhí)行階段,進(jìn)行下一個(gè)階段的處理任務(wù)。
2.2 流水線CPU頂層設(shè)計(jì)
CPU主要由以ALU為核心的運(yùn)算器模塊、以程序計(jì)數(shù)器PC和地址寄存器AR為核心的數(shù)據(jù)通路模塊、以微指令控制器為核心的控制器模塊、以程序控制器和數(shù)據(jù)RAM為核心的存儲模塊四個(gè)模塊構(gòu)成。
算數(shù)邏輯單元模塊主要有ALU運(yùn)算器,數(shù)據(jù)寄存器DR等部件,ALU運(yùn)算器是CPU的核心,它可以執(zhí)行算數(shù)運(yùn)算,也可以執(zhí)行邏輯運(yùn)算。數(shù)據(jù)緩沖寄存器DR為ALU提供一個(gè)或兩個(gè)參與運(yùn)算的操作數(shù),同時(shí)作為CPU、外部設(shè)備、主存之間的信息中轉(zhuǎn)站,對數(shù)據(jù)起暫存作用。數(shù)據(jù)通路模塊主要由程序計(jì)數(shù)器PC,地址寄存器AR,指令寄存器IR組成。程序計(jì)數(shù)器PC的功能是給出在主存中的下一條指令的地址。PC值的變化分為兩種情況,一是指令順序執(zhí)行的情況,二是跳轉(zhuǎn)指令的情況。地址寄存器AR用來保存當(dāng)前CPU所要訪問的主存單元或I/O端口的地址。指令寄存器IR用來保存當(dāng)前CPU正在執(zhí)行的一條指令。微程序控制器主要由控制存儲器、微指令寄存器和微指令地址形成部件三部分組成。控制存儲器用以存放指令系統(tǒng)所對應(yīng)的全部微程序。微程序控制器主要由微指令控制電路、微地址寄存器和微指令存儲器三個(gè)模塊組成。微地址分支轉(zhuǎn)移控制電路根據(jù)來自指令寄存器IR的指令操作碼生成一個(gè)微地址的控制信號,控制微程序按正確順序執(zhí)行微程序和實(shí)現(xiàn)分支轉(zhuǎn)移。微地址寄存器是用來存放從微指令存儲器中讀出的一條微指令信息,由控制字段和下地址字段組成。微指令存儲器是存取微程序的原件,其原件的生成可直接調(diào)用LPM宏模塊。組成的流水線CPU頂層結(jié)構(gòu)圖如圖3所示。
3 結(jié)束語
流水線CPU是現(xiàn)代CPU非常流行的設(shè)計(jì)方式,它在只需要添加少數(shù)硬件的條件下大大提高了CPU的性能。本設(shè)計(jì)從了解并研究CPU工作原理開始,到熟悉并運(yùn)用EDA技術(shù),再到流水線CPU局部器件設(shè)計(jì)、模塊設(shè)計(jì)、整體設(shè)計(jì),最后在FPGA硬件平臺和QuartusⅡ工具開發(fā)平臺進(jìn)行模擬調(diào)試驗(yàn)證了本設(shè)計(jì)符合設(shè)計(jì)要求。但本設(shè)計(jì)的CPU與實(shí)際應(yīng)用中的CPU還存在較大的差距,在接下來的研究中小組成員仍將不斷豐富流水線CPU的知識,將本設(shè)計(jì)的流水線CPU升級至應(yīng)用級別。
參考文獻(xiàn)
[1]史展,李占宣.基于FPGA的嵌入式CPU的VHDL設(shè)計(jì)[J].科技創(chuàng)新與應(yīng)用,2013(9).
[2]潘松,黃繼業(yè).EDA技術(shù)與VHDL[M].北京:清華大學(xué)出版社,2013(4).
[3]潘松,潘明,黃繼業(yè).現(xiàn)代計(jì)算機(jī)組成原理[M].北京:科學(xué)出版社,2013.