張小軍 郭華 張德學
摘要:本文主要是處理器實驗課程改革,從實驗改革的內容、實驗條件、實驗效果等方面進行研究。整個實驗基于Modelsim和FPGA平臺進行設計,以計算機組成原理課程為主要內容,與MIPS處理器設計相結合,是課本內容與EDA技術的一個很好結合。通過實驗改革可以很好地促進學生對處理器內部的工作原理的了解,是對課堂知識的進一步深入。
關鍵詞:MIPS;EDA;處理器
中圖分類號:G642.0 文獻標志碼:A 文章編號:1674-9324(2016)28-0266-02
一、前言
處理器原理實驗是計算機組成原理課程教學的一個重要環節。傳統的實驗主要采用集成芯片搭建的電路模擬計算機的工作原理,這種實驗與課本知識的結合不是很密切,反而有些實驗為了達到模擬的目的,設置了很多額外的電路,加深了學生對內容的理解難度,模擬處理器的實驗已經不能適應現代實驗教學的需求。隨著EDA技術的發展,硬件描述語言Verilog或者VHDL在學生課程中逐漸普及,處理器實驗變被動的驗證性實驗為主動的設計性實驗[1],通過處理器的設計實驗,一方面可以加深學生對課程內容的理解,另一方面可以增強學生的動手能力。本文結合筆者在教學中的一些經驗就處理器實驗方面的改革進行闡述。
二、基本內容
課堂內容的教學主要采用唐朔飛老師主編的《計算機組成原理》(第二版)[2],作為一本經典的計算機教材在各個大學中被廣泛采用。經典的計算機結構分為五個部分:存儲器、控制器、輸入輸出系統和控制器。在授課計劃中,存儲器具體可分為主存儲器、高速緩沖存儲器和輔助存儲器;控制單元的功能和設計主要包括時序系統以及采用組合邏輯和微程序設計控制單元的設計思想與實現措施。CPU的特性包括計算機的算術邏輯單元、指令系統、指令流水、處理器架構及中斷系統。輸入輸出系統是計算機的重要組成部分,是溝通計算機與外部世界的橋梁,主要講授各種各樣的外部設備同主機的交換信息方式。
MIPS處理器是一種精簡指令集(RISC,Reduced Instruction Set Computer)架構的處理器,它是由斯坦福大學Hennessy教授研究團隊發明[3]。MIPS的意思是“無內部互鎖流水級的微處理器”(Microprocessor without Interlocked Pipe Stages),其機制是盡量利用軟件辦法避免流水線中的數據相關問題,它和英特爾所采用的復雜指令系統計算結構(CISC,Complex Instruction Set Computer)相比,RISC具有設計簡單、設計周期短等優點,并可以應用更多先進的技術,開發更快的下一代處理器。實驗中所采用的MIPS32架構基于一種固定長度的定期編碼指令集,只有Load/Store訪問數據存儲器;它還帶有32個32-bit的通用寄存器,讓編譯器能夠通過保持對寄存器內數據的頻繁存取進一步優化代碼的生成性能[4,5]。
三、課本內容與MIPS架構的映射
由于課本知識重點在通用的處理器架構上,與MIPS處理器架構的具體內容不是直接對應,本節將從二者的內容映射方面進行闡述,將MIPS中的架構與課堂知識相對應,使學生在做實驗的過程中與所學知識有結合點。
存儲器主要從容量、類型、控制線和地址線方面進行授課,在MIPS設計中將考慮指令存儲器(ROM)、數據存儲器(RAM)、寄存器文件(regfile)這些存儲器模塊,從架構和功能方面進行對應。
IO模塊是人機交互的重要單元,可將端口、接口的內容融合進去,同時IO端口的尋址方式、存儲方式指令集中主要把指令的分類、指令集的基本構成,每條指令中各個位數的對應關系與MIPS指令集無縫銜接起來。指令集是處理器性能的一個重要指標,而且指令集的特點也決定處理器的硬件架構。整個實驗體系從學生熟悉指令集和編寫二進制代碼開始,為了簡化實驗,實驗采用32位指令集進行設計。
控制單元是整個計算機系統的中樞系統,整體架構有RISC架構和CSIC架構之分,MIPS作為一種經典的RISC處理類型,在實驗過程中主要從RISC的架構進行設計。
在學生熟悉指令集的基礎上,對CPU的架構實現進行設計,將介紹頂層結構的連接方式以及各個重點模塊的功能,使學生能從整體與各個模塊對CPU架構有個清晰的認識,能將課本的知識映射到這個架構,使其理論與實踐能夠有機的結合起來。
總線具有復雜的結構和控制邏輯,從CPU設計的角度來看具有較大的復雜度,在學生實驗時具有較大的難度,放在后面的SoPC(System on Programmable Chip)實驗課程中,通過AVALON總線設計補充總線的內容。高速cache的內容設計較為復雜,在基礎實驗中不做考慮。
四、實驗內容
指令集編寫測試:本實驗主要是讓學生熟悉指令集的特點,精選20條指令,學生參照實際的MIPS指令集手工寫二進制代碼,可幫助學生熟悉指令的構成與功能,為后面的架構設計打下基礎。
ALU設計:ALU是處理器的核心部件,主要進行算數邏輯運算,通過控制信號可選擇不同的運算,如加、減、乘、除、移位等,可將課本繁雜的運算公式變為直觀的認識。
存儲器:存儲器分為程序存儲器、數據存儲器和寄存器文件,學生應首先從存儲器的物理特性,如只讀、可讀可寫和雙端口等進行分析,從地址線、數據線和控制線等信號進行研究,進而從功能特性分析其在整個處理器架構中的作用。
CU設計:控制單元是這個處理器系統的中樞神經系統,控制整個系統的高效有序地運行。通過對輸入的指令進行譯碼,產生不同的控制信號。該模塊的重點在于如何設計指令的譯碼單元,重點在于對指令的操作碼和地址碼的理解和處理。
IO單元設計:CPU對IO的訪問方式分為獨立編址和統一編址,本實驗主要把這兩種編址方式進行,從控制信號、地址的分配與選擇和數據輸入輸出控制方面進行。
中斷模塊設計:中斷模塊是對外部中斷和定時器中斷進行設計,中斷的發生設計現場保護、中斷處理和恢復現場操作,對寄存器的保護、進出棧的數據等。
CPU整體設計:此實驗重點是把前面的各個模塊綜合起來,即設計一個頂層模塊。各個模塊正確,但合起來必然會帶來其他的問題,在學生實驗中是看似簡單,但也最容易出錯的地方
FPGA測試實驗:在前面Modelsim仿真的基礎上,進一步在FPGA驗證,使其能夠在FPGA上運行,將需要綁定IO引腳、添加外部晶振,采用PLL實現,使全局時鐘更穩定,FPGA上的測試結果更能引起學生的實驗興趣。
五、實驗安排
從課程設置的角度,教授的內容應該從簡單到復雜,讓學生有個逐步接收和消化的過程,使其更容易理解課程的重點,跟上課程的進度。在學生學習微型計算機這門課程之前已經學過Verilog語言,按照先設計獨立模塊,后設計控制模塊,再設計頂層模塊的順序進行實驗安排。
六、實驗存在的問題
在兩個年級學生的實驗過程中,發現存在以下問題。
1.學生從基礎的Verilog學習到本實驗的設計需要一個過渡的階段,在實驗開始增加一些基本實驗,一是熟悉EDA設計的基本流程,二是起到過渡引導的作用。
2.由于講授的內容和實驗的內容雖本質是一樣的,但從經典理論到具體實踐環節上的不同使學生對實驗內容的理解有一定的難度。在教學環節可適當穿插一些實驗的內容。
七、結語
本文主要從課本知識與學生動手實踐相結合的角度進行設計,以加深理解處理器結構為目的,實現了MIPS-CPU的部分指令集。通過Modelsim實現對處理器的功能仿真,通過Quartus II軟件完成對設計的MIPS-CPU的編譯,最終把設計的MIPS-CPU下載到FPGA中完成了對指令的板級驗證,使學生對計算機的經典組成結構有了進一步的理解。實驗改革是一個不斷完善和發展的過程,在今后的實踐過程中,繼續擴展處理器的功能模塊,使其更加完善。
參考文獻:
[1]李亞民.計算機原理與設計——Verilog HDL版[M].北京:清華大學出版社,2011.
[2]唐朔飛.計算機組成原理[M].第2版.北京:高等教育出版社,2008.
[3]Hennessy J.,and Patterson D.,Computer Architecture:A Quantitative Approach,5th ed.[M].Morgan Kaufmann,2011.
[4]Dominic Sweetman. See MIPS Run. Second Edition[M].Burlington,Massachusetts:Morgan Kaufmann,2006:1-52.
[5]David Money Harris,and Sarah L. Harris.數字設計和計算機體系結構(英文版·第二版)[M].北京:機械工業出版社,2014.