徐愛萍, 張玉萍, 涂國慶
(武漢大學計算機學院,湖北武漢 430072)
基于VHDL之CPU設計與實踐
徐愛萍, 張玉萍, 涂國慶
(武漢大學計算機學院,湖北武漢 430072)
隨著大規(guī)??删幊踢壿嬈骷陌l(fā)展,EDA技術已成為硬件系統(tǒng)電路設計的重要手段?;贓DA技術的計算機組成原理整機實習通常在Quartus II仿真平臺上實現(xiàn)。早期均采用Block Diagram的設計方式,雖然設計過程直觀,但仿真調(diào)試困難,難以完全調(diào)試成功。本文研究了基于VHDL的靈活方便的CPU設計過程,該設計由取指、指令譯碼、指令執(zhí)行、存儲器接口、通用寄存器組和寄存器輸出六個組成部分,最后通過調(diào)試軟件直接觀察寄存器的值來驗證了設計的準確性。本研究方法對改革該課程的整機實習,發(fā)揮學生的主動能動性,提高學生的自主創(chuàng)造能力具有很好的指導意義和實際參考價值。
計算機組成原理;CPU設計;整機實習;VHDL
計算機組成原理課程是計算機專業(yè)的一門重要專業(yè)基礎課程,它在計算機類專業(yè)的課程中起著承上啟下、軟硬件兼容的重要作用[1]。本課程的基礎課程是“數(shù)字邏輯電路”,在該課程實驗中學生受到過器件測試、單元電路設計,分析等方面的訓練,在本實驗課的后續(xù)課程“微機系統(tǒng)與接口技術”中,學生將進一步學習一些外圍電路芯片的開發(fā)應用。因此,計算機組成原理課程主要著眼于計算機硬件系統(tǒng)的設計方法,介紹計算機的基本組織以及內(nèi)部各組成部件如何協(xié)調(diào)工作。為了加強該課程的實踐性教學環(huán)節(jié),培養(yǎng)和訓練學生在硬件方面的設計和動手能力,本課程結(jié)束后為學生開設整機實驗,要求設計一個能執(zhí)行一個指令系統(tǒng)的CPU,讓學生在理論與實踐相結(jié)合的基礎上,加深對整機概念的了解[2],掌握控制器設計的方法與技術,從而提高學生自行設計、調(diào)試分析的獨立工作能力。隨著大規(guī)??删幊踢壿嬈骷陌l(fā)展,EDA技術已成為硬件系統(tǒng)電路設計的重要手段[3-8]?;贓DA技術的計算機組成原理整機實習通常在Quartus II仿真平臺上實現(xiàn)[9]。早期均采用Block Diagram的設計方式,雖然設計過程直觀,但CPU仿真調(diào)試困難。本文研究了一個8位CPU設計實例,揭示了基于VHDL的CPU設計的方法與技術并調(diào)試成功,對學生自主完成基于VHDL的CPU設計具有很好的指導意義。
中央處理器由控制器、運算器和總線組成。運算器由算術邏輯單元ALU、通用寄存器GR、程序狀態(tài)字寄存器PSW和ALU輸入端的選擇器組成??刂破魇侨珯C的指揮中心,由程序計數(shù)器PC、指令寄存器IR、地址寄存器MAR、數(shù)據(jù)寄存器MDR、指令譯碼器、時序系統(tǒng)和組合邏輯信號發(fā)生器組成。程序計數(shù)器PC用以指出下條指令在主存中的存放地址,每取一個指令字PC增1;指令寄存器IR用來保存當前正在執(zhí)行的一條指令的代碼;地址寄存器MAR用來存放當前CPU訪問內(nèi)存單元的地址;數(shù)據(jù)寄存器MDR用來暫存由內(nèi)存儲器中讀出或?qū)懭雰?nèi)存的指令或數(shù)據(jù);指令譯碼器分別對操作碼字段、尋址方式字段、地址碼字段進行譯碼,向控制器提供操作的特定信號;時序部件用來產(chǎn)生各種時序信號節(jié)拍周期信號,它由統(tǒng)一時鐘CLK分頻得到;組合邏輯控制器根據(jù)IR的指令、PSW中的狀態(tài)信息以及節(jié)拍,產(chǎn)生控制整個計算機系統(tǒng)所需的各種控制信號。它接收從控制器送來的命令并執(zhí)行響應的動作,負責對數(shù)據(jù)的加工和處理。系統(tǒng)總線是CPU與主存儲器MEM相聯(lián)的總線,它包括地址總線AB、數(shù)據(jù)總線DB和控制總線CB。本研究擬設計的CPU結(jié)構(gòu)圖如圖1所示[10]。
本研究設計的指令系統(tǒng)包含傳送類指令、算術運算類指令、邏輯運算類指令和轉(zhuǎn)移指令。本指令系統(tǒng)優(yōu)先選取使用頻率最高的一些簡單指令,安排大多數(shù)指令在一個機器周期內(nèi)完成;采用LDRR/STRR結(jié)構(gòu),即:只有LDRR(取數(shù))和STRR(存數(shù))兩種指令可以訪存,其余指令只能對存放在寄存器中的操作數(shù)進行處理;采用較少的尋址方式和單、雙字長指令格式;控制部件采用可使速度提高的組合邏輯來實現(xiàn)。指令系統(tǒng)格式如表1所示,基本CPU指令集如表2所示。
圖1 RISC CPU結(jié)構(gòu)圖
表1 指令格式
表2 基本CPU指令集
實驗CPU中控制器的時序設計為3個節(jié)拍t1、t2和t3,供實驗CPU各部分使用。對單字長指令,t1節(jié)拍取指,對雙字長指令,通過做標記在第二個t1節(jié)拍取指令的第2個字;t2節(jié)拍的上升沿將從存儲器取出的指令寫入指令寄存器IR中并根據(jù)指令寄存器IR的內(nèi)容進行指令譯碼,然后根據(jù)譯碼得到的控制信號進行運算和其他操作;t3節(jié)拍對存儲器進行讀、寫操作,在t3的下降沿將運算結(jié)果寫入目的寄存器、改變標志位并改變PC的值并為取下條指令做準備。由于取指和存儲器讀寫階段都要訪問存儲器,速度較慢;而指令譯碼和運算都由CPU本身完成,因此取指階段和存儲器讀寫階段各占一拍時間,指令譯碼和運算共占一拍時間。
本研究的CPU由取指部分instru_fetch、指令譯碼部分 decoder_unit、執(zhí)行部分 exe_unil、存儲器部分memory_unit、通用寄存器組 regfile和寄存器輸出regout 6個部分組成。程序包exe_cpu_components將各低層設計實體作為元件存儲,供各設計實體使用。頂層設計實體exe_cpu完成6個組成部分的連接[11]。
(1)通用寄存器組(regfile)。通用寄存器組內(nèi)包含4個8位寄存器,它是一個具有1個寫入端口、2個讀出端口的通用寄存器組。寫入端口將指令執(zhí)行后得到的目的寄存器的值在t3下降沿寫入目的寄存器中。只有具有寫目的寄存器功能的指令執(zhí)行結(jié)束時才寫目的寄存器。通用寄存器組的兩個讀出端,一個是目的寄存器讀出端口,一個是源寄存器讀出端口,從這兩個端口讀出的內(nèi)容供執(zhí)行部分exe_unit和存儲器部分memory_unit使用。
(2)取指部分(instru_fetch)。取指部分首先在復位信號reset為低時將PC復位為0,在一條指令執(zhí)行結(jié)束后,根據(jù)指令執(zhí)行的結(jié)果在t3的下降沿改變PC的值;然后將從存儲器讀出的指令的第一個字在t2的上升沿送至指令寄存器IR;最后計算PC+1的值,為雙字指令取第二個指令字做準備。
(3)指令譯碼部分(decoder_unit)。指令譯碼部分根據(jù)指令寄存器IR的值產(chǎn)生實驗CPU所需要的各種控制信號,其中規(guī)定:SR[1..0]為源寄存器號;DR[1..0]為目的寄存器號;op_code[2..0]為控制 ALU進行8種運算操作的3位編碼;zj_instruct為l表示本條指令是條“JZ ADR”指令;cj_instruct為1表示本條指令是條“JC ADR”指令;lj_instruct為1表示本條指令是條“JMP ADR”指令;DRWr為1表示在t3的下降沿將本條指令的執(zhí)行結(jié)果寫入目的寄存器;Mem_Write為l表示本條指令有存儲器寫操作,存儲器的地址是源寄存器的內(nèi)容;DW_instruct為1表示本條指令是雙字指令;change_z為1表示本條指令可能改變Z標志;change_c為l表示本條指令可能改變C標志;sel_memdata為1表示本條指令寫入目的寄存器的值來讀自存儲器;r_simp_addr為計算條件轉(zhuǎn)移指令轉(zhuǎn)移地址所需要的8位相對地址。它是從第2個指令字中讀出的轉(zhuǎn)移指令中的8位絕對或相對地址,在基于VHDL所設計的組臺邏輯型CPU中指令譯碼器主要由邏輯判斷語句來實現(xiàn)。
(4)執(zhí)行部分(exe_unit)。執(zhí)行部分完成:① 加法、減法、帶進位加、帶進位減、與、或、異或和數(shù)據(jù)傳送這8種算術邏輯運算并臨時將運算結(jié)果存放在result中;根據(jù)運算結(jié)果產(chǎn)生進位標志,臨時存放在c_tmp中;根據(jù)運算結(jié)果產(chǎn)生結(jié)果為0的標志,臨時存放在z_tmp中。② 產(chǎn)生存儲器讀寫所需要的存儲器地址Mem_Addr,該存儲器地址在tl節(jié)拍時選擇pc,在雙字指令時選擇pc_inc,在LDRR指令時選擇SR內(nèi)容,在STRR指令時選擇DR內(nèi)容。③ 產(chǎn)生條件轉(zhuǎn)移指令(JC和JZ)所需要的轉(zhuǎn)移標志c_z_j_flag(為l表示轉(zhuǎn)移)和轉(zhuǎn)移地址r_simp_addr。
(5)存儲器部分(memory_unit)。存儲器部分主要完成對存儲器的讀寫,它是CPU和TEC_CA實驗臺上存儲器的接口部分,該部分向?qū)嶒炁_上的存儲器送出8位存儲器地址總線ar、8位雙向數(shù)據(jù)總線ob、讀寫信號rw,當rw為l時對實驗臺上的存儲器進行讀操作;當rw信號為0時對實驗臺上的存儲器進行寫操作。試驗臺上的存儲器由兩片靜態(tài)存儲器6116和少量附加電路構(gòu)成。在TEC_CA實驗臺上,兩片6116并聯(lián)構(gòu)成8位字長的存儲器,6116所需的片選信號cs為低信號,讀信號oe由rw反相產(chǎn)生,寫信號we直接選用rw。存儲器地址ar來自執(zhí)行部分,寫信號Mem_Write由指令譯碼部分產(chǎn)生,當Mem_Write為1時在t3節(jié)拍完成寫操作,其余情況下均進行讀操作。對于單或雙字長指令在t1節(jié)拍完成讀指令的第1個字;對于雙字指令,在t3節(jié)拍完成讀指令的第2個字;對于JMP指令,在t3節(jié)拍讀出轉(zhuǎn)移地址放在data_read中;對于MVRD指令,在t3節(jié)拍讀出立即數(shù)DATA放在data_read中;對于LDR指令在t3節(jié)拍讀出存儲器的值,放在data_read中;對于STRR指令,在t3節(jié)拍將源寄存器的值寫入存儲器中;在t3下降沿寫入目的寄存器時,若是LDRR指令寫入的數(shù)據(jù)來自存儲器,其他指令寫入的數(shù)據(jù)則來自執(zhí)行部分送來的運算結(jié)果result。
(6)程序包(exp cpu compenents)。程序包exp_cpu_components把實驗CPU中除頂層設計實體exp_cpu以外的設計實體作為元件(component)予以說明,供實驗CPU中的其他設計實體作為元件予以引用。
(7)頂層設計實體(exe_cpu)。頂層設計實體exe_cpu把6個二級設計實體memory_unit、instru_fetch、decoder_unit、exe_unit、regfile 和 regout作為元件引用,每個例化一次,用信號把它們連接起來,構(gòu)成實驗CPU。exp_cpu所定義的clk為外部輸入的時鐘、reset為外部輸入的CPU復位信號(低電平有效)、ar為向外部輸出的8 b存儲器地址總線;ob為8 b雙向存儲器數(shù)據(jù)總線;rw為向外部輸出的存儲器讀寫信號,當為高電平時對存儲器進行讀操作,當為低電平時對存儲器進行寫操作。
在一個工程中,較低層的設計實體相當于元件,與一塊印制板上的電路差不多,頂層設計實體對較低層設計實體每例化一次,相當于在印制板上安放一個元件,而頂層設計實體中的信號相當于印制板上的連線[12]。因此,在一個工程中,如果有一個非頂層設計實體從來沒有被其他設計實體例化過,那么這個設計實體在這個工程中就是多余的。頂層設計實體中除了包括由較低層設計實體構(gòu)成的元件外,通常還有一些由process語句、信號賦值語句等構(gòu)成的其他獨立電路塊,通過信號把元件和獨立電路塊連接起來,最后形成如圖2所示的CPU完整設計圖。
圖2 CPU完整設計圖
設計好 CPU工程并編譯成功后,直接點擊Quartus II工具欄的Programmer按鈕,在Mode框中選擇默認的 JTAG下載方式,確保下載硬件為ByteBlasterII[LPT1],如果不是的話,就點擊Hardware Setup按鈕來設置,完成上述過程后,選中需要下載的sof文件,點擊Start開始下載到“WT-1型計算機系統(tǒng)硬件綜合實驗平臺”,下載后打開調(diào)試軟件,然后分別加載測試程序和規(guī)則文件,與表2所定義的指令系統(tǒng)對應的規(guī)則文件[13]如下:
在調(diào)試軟件中編譯成功后再下載到內(nèi)存,最后開始調(diào)試,通過查看寄存器的值來檢測指令的功能是否成功,測試界面如圖3所示,左邊為測試程序在內(nèi)存中的編碼,中間是調(diào)試程序,右邊是每條指令執(zhí)行后的結(jié)果?!癕VRD R1,0x80”指令執(zhí)行完后,R1寄存器的內(nèi)容為“0080”;“MVRD R2,0xa5”指令執(zhí)行完后,R2 寄存器的內(nèi)容為“00a5”;測試程序正執(zhí)行到“ADD R1,R2”指令(見中間的綠色箭頭),相加結(jié)果在指令執(zhí)行完后將存入R1寄存器。
本文研究了一個開放式CPU的設計過程,研究結(jié)果表明基于VHDL的計算機組成原理的整機實習為學生提供了一個靈活方便的計算機系統(tǒng)CPU設計的平臺[14],優(yōu)化了計算機整機實習設計,本文所設計的CPU結(jié)構(gòu)、指令系統(tǒng)和指令格式都可以由學生進行個性化定義[15],而在實現(xiàn)技術方面學生可以利用HardCopy技術來實現(xiàn),這一切在傳統(tǒng)的教學內(nèi)容、實驗模式和實驗手段上是沒有的,是對傳統(tǒng)計算機組成原理整機實習的徹底改革,使學生在了解計算機組成原理和軟件設計技術的同時,學會了計算機硬件設計技術,這是一個合格的計算機專業(yè)學生本應具備的基本知識,離開了硬件設計,自主創(chuàng)新能力的培養(yǎng)便無從談起,本設計方法充分提高了學生自行設計、調(diào)試和分析解決的能力,實現(xiàn)了計算機組成原理課程整機實習的全新改革。
圖3 CPU測試界面
[1] 張 磊,鄭 榕,田軍峰.計算機組成原理理論實驗教學無縫結(jié)合的新方法[J].實驗室研究與探索,2013,32(5):168-171.
ZHANG Lei,ZHENG Rong,TIAN Jun-feng.Seamless Combination of Theoretical and Experimental Teaching for Computer Organization[J].Research and Exploration in Laboratory,2013,32(5):168-171.
[2] 馬漢達,趙 蕙.計算機組成原理實驗教學改革[J].計算機教育,2010,9(10):30-33.
MA Han-da, ZHAO Hui.Reform on Experiments Teaching of Computer Organization Principles[J].Computer Education,2010,9(10):30-33.
[3] 戚 梅,張 鵬.EDA技術在《計算機組成原理》實驗教學中的應用[J].電子設計工程,2011,19(17):1-3.
QI Mei,ZHANG Peng.The Application of EDA Technology in Computer Principles Experiment Teaching[J].Electronic Design Engineering,2011,19(17):1-3.
[4] 李麗萍,盛琳陽.基于EDA技術的計算機組成原理實驗課開放性教學模式研究[J].計算機教育,2010.5(10):55-57.
LI Li-ping,SHENG Lin-yang.Research on Open Educational Model of Technology Computer Composition Principle Experiment Class Based on EDA[J].Computer Education,2010.5(10):55-57.
[5] 陳 媛,黃賢英.基于EDA技術的計算機組成原理實驗教學探索,重慶工學院學報[J].2007,21(2):136-138.
CHEN Yuan, HUANG Xian-ying. Exploration on Experimental Teaching of“Principle of Computer Organization”Based on EDA Technology[J].Journal of Chongqing Institute of Technology,2007,21(2):136-138.
[6] 翟文正,管功湖.EDA在《計算機組成與結(jié)構(gòu)》課程設計中的實踐與探索[J].微型電腦應用,2009,25(12):10-13.
ZHAI Wen-Zheng,GUANG Gong-hu.The Practice and Exploration of EDA in Curriculum Design of《Computer Organization &Architecture》[J].Microcomputer Applications,2009,25(12):10-13.
[7] 譚小蘭,莫海燕,陳 多.基于EDA的計算機組成原理實驗教學方案[J].湖南工程學院學報,2011,21(3):93-96.
TAN Xiao-lan,MO Hai-yan,CHEN Duo.Teaching Scheme of the Experiment on Principles of Computer Organization Based on EDA[J].Journal of Hu Nan Institute of Engineering,2011,21(3):93-96.
[8] 張 亮.應用EDA技術改革“計算機組成原理”課程設計[J].計算機教育,2009(9):40-42.
ZHANG Liang.Applying EDA Technology to Reform Curriculum Design of“Principle of Computer Organization”[J].Computer Education,2009(9):40-42.
[9] 陸明洲.基于Quartus II的計算機組成原理實驗改革探索[J].高校實驗室工作研究,2010,12(4):16-17.
LU Ming-zhou.The Reform and Exploration of the Experiment on Principles of Computer Organization Based on Quartus II[J].GAO XIAO SHI YAN SHI GONG ZUO YAN JIU,2010,12(4):16-17.
[10] 王愛英.計算機組成與結(jié)構(gòu)[M].北京:清華大學出版社 2007:176-184.
[11] 潘 松,潘 明.現(xiàn)代計算機組成原理[M].北京:科學出版社,2007:112-138.
[12] 王艷萍,吳 兵.基于VHDL語言的CISC-CPU系統(tǒng)設計[J].山東理工大學學報,2009,23(4):79-81.
WANG Yan-ping,WU Bing.Design for CISC-CPU based on VHDL[J].Journal of Shandong University of Technology(Natural Science Edition),2009,23(4):79-81.
[13] 湯志忠,楊春武.開放式實驗CPU設計[M].北京:清華大學出版社,2006:1-63.
[14] 湯書森,馬義德.現(xiàn)代計算機組成原理課程特點與實驗教學新模式探索[J].高等理科教育,2012:146-149.
TANG Shu-sen,MA Yi-de.On the Characteristics of Curriculum of Modern Computer Organization Principle and its New Model of Experimental Teaching[J].Higher Education of Sciences,2012:146-149.
[15] 方愷晴,張洪杰,方 紅.關于提升“計算機組成原理實驗"課程教學質(zhì)量的探討[J].實驗室研究與探索,2008,27(3):97-100.
FANG Kai-qing,ZHANG Hong-jie,F(xiàn)ANG Hong.Discussion on Enhancing the Teaching Quality aboutComputerComposition Principle Experiment[J].Research and Exploration in Laboratory,2008,27(3):97-100.
The CPU Design and Practice Based on VHDL
XU Aiping,ZHANG Yuping,TU Guoqing
(School of Computer,Wuhan University,Wuhan 430072,China)
With the development of Large large scale programmable logic devices,the EDA technology has became the an important means of the design on hardware system circuit.In general,the whole internship of the computer composition principle based on EDA is realized on by the simulation platform of Quartus II.In the early,the design approach of Block block Diagram diagram was used in practice.The design process is intuitive,but the simulation and debugging is are difficult and can't succeed completely.In this paper,the a flexible and convenient design process on CPU is researched.The design is composed of six parts that are instruction fetch,instruction decode,instruction execution,memory interface,general register and register output.At last,the accuracy of design is validated through register observed directly by debug software.It possess very good guiding significance and actual reference value to reform the whole internship of this course,plays aan active initiative androle for improve improving the independent creative ability of students.
computer principle;central processing unit design;whole internship;VHDL(Vhsic Hardware Description Language )
TP 332
A
1006-7167(2014)05-0120-05
2013-07-26
武漢大學計算機學院教學實踐改革項目
徐愛萍(1962-),女,湖北武漢人,博士,教授,研究方向:組成原理課程教學與實踐、Web服務、時空統(tǒng)計。
Tel.:13971471468;E-mail:xap1464@126.com