宋沛 羅瓊
(廣州大學(xué)物理與電子工程學(xué)院,廣州番禺510006)
現(xiàn)代電子設(shè)計(jì)技術(shù)的核心是EDA(Electronic Design Automation)技術(shù)。EDA技術(shù)是依賴(lài)計(jì)算機(jī)作為硬件平臺(tái),以大規(guī)??删幊踢壿嬈骷凹呻娐窞樵O(shè)計(jì)載體,設(shè)計(jì)者在EDA軟件平臺(tái)上,使用以描述硬件電路的功能、信號(hào)連接關(guān)系及定時(shí)關(guān)系的語(yǔ)言HDL(即硬件描述語(yǔ)言)完成文件設(shè)計(jì),再經(jīng)由計(jì)算機(jī)自動(dòng)地完成邏輯編譯、邏輯化簡(jiǎn)、邏輯分割、邏輯綜合、優(yōu)化、布局布線、以及邏輯優(yōu)化和仿真測(cè)試,直至完成對(duì)特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作,最終形成集成電子系統(tǒng)或?qū)S眉尚酒囊婚T(mén)技術(shù)[1]。
本文采用EDA技術(shù),以VHDL為硬件描述語(yǔ)言,以QuartusII6.0[2]為開(kāi)發(fā)環(huán)境,采用“自頂向下”[3]的設(shè)計(jì)方法,選用Altera公司CYCLONE[4]系列的EP1C6Q240C8N芯片作為目標(biāo)芯片,設(shè)計(jì)實(shí)現(xiàn)了一個(gè)簡(jiǎn)易微處理器。在使更多人理解并接觸微處理器的同時(shí),為設(shè)計(jì)和使用IP核打下基礎(chǔ)。此簡(jiǎn)易微處理器,雖在性能上不能與商用CPU相提并論,但“麻雀雖小,五臟俱全”。
此簡(jiǎn)易微處理器的結(jié)構(gòu)特點(diǎn)是:功能簡(jiǎn)單,只能做兩個(gè)數(shù)的加減法;內(nèi)存量小,只有一個(gè)16×8ROM;字長(zhǎng)為8位,輸出用二進(jìn)制8位顯示。簡(jiǎn)易微處理器的總體結(jié)構(gòu)如圖1所示。簡(jiǎn)易微處理器共分十個(gè)部分。PC是程序計(jì)數(shù)器,每次運(yùn)行之前,先復(fù)位至0000,當(dāng)取出一條指令后,PC加1,為了簡(jiǎn)化,將其計(jì)數(shù)范圍設(shè)定為0000~1111。也就是說(shuō),存儲(chǔ)指令和數(shù)據(jù)的PROM的地址范圍為0000~1111,共16個(gè)存儲(chǔ)單元,每個(gè)存儲(chǔ)單元是8位。MAR是存儲(chǔ)地址寄存器,接收來(lái)自PC的二進(jìn)制程序號(hào),作為地址碼送至PROM去。IR是指令寄存器,從ROM接收到指令字,同時(shí)將指令字分送到控制部件CON_MODEL(高4位)和W總線(低4位)上去。CON是控制部件,主要負(fù)責(zé)將指令寄存器IR送來(lái)的高4位譯成12位的控制信號(hào),由此控制信號(hào)指揮其它功能部件的運(yùn)作。A為累加器,用以?xún)?chǔ)存計(jì)算機(jī)運(yùn)行期間的中間結(jié)果,它能接收W總線送來(lái)的數(shù)據(jù),也能將數(shù)據(jù)送到W總線上去。它還有一個(gè)數(shù)據(jù)輸出端,將數(shù)據(jù)送至ALU去進(jìn)行算術(shù)運(yùn)算。ALU為算術(shù)邏輯部件,將其簡(jiǎn)化為一個(gè)二進(jìn)制補(bǔ)碼加法器/減法器。寄存器B,將要與A相加減的數(shù)據(jù)暫存于此寄存器。輸出寄存器O,計(jì)算機(jī)運(yùn)行結(jié)束時(shí),累加器A中存有答案。如要輸出此答案,就得送入O。D為二進(jìn)制顯示器,這是用發(fā)光二極管(LED)組成的顯示器。每一個(gè)LED接到寄存器O的一位上去。當(dāng)某位為高電位時(shí),則該LED發(fā)光[5]。
圖1 簡(jiǎn)易微處理器結(jié)構(gòu)[6]
用VHDL分別實(shí)現(xiàn)圖1中的所有部件,其中最重要的是控制部件CON和總線部件W的設(shè)計(jì)和實(shí)現(xiàn),其它部件實(shí)現(xiàn)較簡(jiǎn)單(其它部件多為在時(shí)鐘下降沿觸發(fā)的異步清零同步使能的寄存器或計(jì)數(shù)器),這里不做詳細(xì)介紹。
控制部件CON的功能如下:
每次運(yùn)行之前,發(fā)出CLR=1,使有關(guān)的部件清0。此時(shí):PC=0000 IR=0000 0000
能根據(jù)IR送來(lái)的指令發(fā)出12位的控制字:
根據(jù)控制字中各位的置1或置0情況,計(jì)算機(jī)就能自動(dòng)地按指令程序有秩序地運(yùn)行。
3.1.1 簡(jiǎn)易CPU的指令系統(tǒng)
為了簡(jiǎn)化系統(tǒng)我們將此微處理器的指令精簡(jiǎn)為5條,都采用直接尋址的方式。具體指令見(jiàn)表1。
表1 簡(jiǎn)易微處理器的指令系統(tǒng)
3.1.2 每個(gè)指令在6個(gè)節(jié)拍中的控制字
執(zhí)行一條指令的時(shí)間為一個(gè)機(jī)器周期。機(jī)器周期又可分為取指周期和執(zhí)行周期。取指周期的過(guò)程需要3個(gè)機(jī)器節(jié)拍,每個(gè)指令的取指周期都是相同的,其每個(gè)節(jié)拍的控制字如表2。
表2 取指周期3個(gè)節(jié)拍的控制字(CON=CPEPLMER LIEILAEA SUEULBLO)
(1)地址節(jié)拍T0:控制部件發(fā)出的控制字為CON=CPEPLMERLIEILAEASUEULBLO=0110 0000 0000,即Ep為高電平,Lm為高電平,其它與總線W相連的輸入為高阻狀態(tài),從而將PC的內(nèi)容送入MAR(并通過(guò)MAR到達(dá)PROM)。
(2)存儲(chǔ)節(jié)拍T1:從表2可知ER為高電平,LI為高電平,將ROM中由PC送來(lái)的地址碼所指定的存儲(chǔ)單元中的內(nèi)容送到IR,同時(shí)IR立即將其高4位送至控制部件。
(3)增量節(jié)拍T2:從表2可知Cp為高電平,使PC加1,做好下一條指令的取指準(zhǔn)備。
緊接著就進(jìn)入執(zhí)行周期,不同的指令執(zhí)行周期都是3個(gè)節(jié)拍,但是發(fā)出的控制字不盡相同。表3針對(duì)五個(gè)指令分別列出執(zhí)行周期中3個(gè)節(jié)拍所對(duì)應(yīng)的控制字。
下面以ADD指令為例,說(shuō)明執(zhí)行周期的控制字的設(shè)置。ADD指令的執(zhí)行周期的第1個(gè)節(jié)拍T3,從表3中可以看出發(fā)出的控制信號(hào)CON中,LM=1,EI=1。將IR的低4位數(shù)作為地址并立即送至MAR(PROM分為指令區(qū)和數(shù)據(jù)區(qū),在取指周期中,訪問(wèn)的是指令區(qū);在執(zhí)行周期中,訪問(wèn)的是數(shù)據(jù)區(qū))。ADD指令的執(zhí)行周期的第2個(gè)節(jié)拍T4,發(fā)出的控制信號(hào)使ER=1,LA=1。將PROM數(shù)據(jù)區(qū)的存儲(chǔ)單元的內(nèi)容送入累加器A。ADD指令的執(zhí)行周期的第3個(gè)節(jié)拍T5,發(fā)出的控制信號(hào)使LA=1,EU=1,將算術(shù)邏輯部件的計(jì)算結(jié)果存入累加器A中。
表3 執(zhí)行周期3個(gè)節(jié)拍每個(gè)指令所對(duì)應(yīng)的控制字(CON=CPEPLM ER LIEILAEA SUEULBLO)
3.1.3 控制器部件的VHDL實(shí)現(xiàn)
采用有限狀態(tài)機(jī)實(shí)現(xiàn)上面的控制功能。由于無(wú)論什么指令都需要6個(gè)節(jié)拍(最后的3個(gè)節(jié)拍根據(jù)具體的操作不同而輸出不同的控制信號(hào)),因此對(duì)應(yīng)地設(shè)計(jì)有限狀態(tài)機(jī)共有6種狀態(tài),狀態(tài)之間的轉(zhuǎn)換由時(shí)鐘控制(如圖2所示),在每個(gè)狀態(tài)下發(fā)出相應(yīng)的控制字,從而實(shí)現(xiàn)根據(jù)指令進(jìn)行控制各部件完成指令所要求的操作??刂撇考妮斎霐?shù)據(jù)來(lái)自指令寄存器IR的高四位INST_H[3..0]。同樣具有異步清零信號(hào)CLR,可以使整個(gè)系統(tǒng)復(fù)位。控制部件根據(jù)指令的高4位決定其他部件的使能信號(hào)和鎖存信號(hào)共12個(gè)信號(hào),從而控制整個(gè)系統(tǒng)的運(yùn)行情況。
在CON_MODEL的結(jié)構(gòu)體的說(shuō)明部分定義數(shù)據(jù)類(lèi)型,使?fàn)顟B(tài)符號(hào)化:
總線可以使多個(gè)模塊之間溝通信息,為了避免信息在公共總線W中亂竄,必須規(guī)定在某一時(shí)鐘節(jié)拍,只有一個(gè)寄存器L門(mén)為高電平,和另一個(gè)寄存器的E門(mén)為高電平。其余各門(mén)的L和E控制信號(hào)必須為低電平。這樣,E門(mén)為高電位的寄存器的數(shù)據(jù)就可以流入到L門(mén)為高電平的寄存器中去。實(shí)現(xiàn)總線結(jié)構(gòu)的主要VHDL代碼如下:
為了對(duì)整體進(jìn)行測(cè)試,我們需在ROM中放入要執(zhí)行的程序段和要處理的數(shù)據(jù)。由于整個(gè)系統(tǒng)只支持5種指令,而且尋址空間只能是0~f,因此我們僅設(shè)計(jì)了一段程序計(jì)算16+20+24+28-32,并將相應(yīng)的二進(jìn)制代碼(此段代碼可參照參考文獻(xiàn)[4])存入PROM中。由于PROM是由LP_ROM產(chǎn)生,要存儲(chǔ)內(nèi)容,只需設(shè)定它的存儲(chǔ)內(nèi)容的文件rom.m if即可。下面是rom.m if文件的內(nèi)容如下:
圖3 頂層文件仿真與分析
圖4 第一個(gè)指令的仿真分析
圖3為使用QuartusII6.0進(jìn)行仿真分析的結(jié)果。由圖3可知,輸出結(jié)果為56,是正確的。圖4加入了中間信號(hào)的輸出,便于分析第一個(gè)指令周期。從圖4可看出,CLR信號(hào)使當(dāng)前狀態(tài)為T(mén)0,第一個(gè)CLK上升沿到,發(fā)出EP=’1’和LM=‘1’控制信號(hào),程序計(jì)數(shù)器PC發(fā)出了數(shù)據(jù)并且存入地址寄存器MAR,這時(shí)數(shù)據(jù)線上的數(shù)據(jù)是PC的“0000”,因此W出現(xiàn)“00000000”;第二個(gè)CLK上升沿到,進(jìn)入狀態(tài)T1,于是ER=‘1’和LI=‘1’,于是ROM發(fā)送地址為“0000”單元存儲(chǔ)的指令到總線,并且存入指令寄存器IR,此時(shí)的總線W是ROM發(fā)出的數(shù)據(jù)“00001001”(即LDA 9H指令對(duì)應(yīng)的二進(jìn)制代碼);當(dāng)?shù)谌齻€(gè)CLK上升沿到,進(jìn)入狀態(tài)T2,出現(xiàn)CP=‘1’,此時(shí)的計(jì)數(shù)器PC加1,這時(shí)的總線變?yōu)楦咦锠顟B(tài);當(dāng)?shù)谒膫€(gè)CLK上升沿到,進(jìn)入狀態(tài)T3,EI=‘1’和LM=‘1’,IR送低4位到總線,MAR接收此低4位數(shù),此時(shí)的數(shù)據(jù)總線為“00001001”;當(dāng)?shù)谖鍌€(gè)CLK上升沿到,進(jìn)入狀態(tài)T4,ER=‘1’且LA=‘1’,因此ROM將數(shù)據(jù)送到總線,然后在時(shí)鐘下降沿存到寄存器A中;當(dāng)?shù)诹鶄€(gè)CLK上升沿到,進(jìn)入狀態(tài)T5,E和L端全部為低電平,即是一個(gè)空節(jié)拍(為的是使每條指令的機(jī)器周期都一樣長(zhǎng)),此時(shí)的總線的數(shù)據(jù)是高阻狀態(tài)。自此,完成了第一個(gè)指令LDA 9H,即將ROM中數(shù)據(jù)區(qū)的地址為9H的存儲(chǔ)單元中的數(shù)據(jù)放存入A累加器中。之后由進(jìn)入下一個(gè)機(jī)器周期,依次類(lèi)推。由時(shí)序仿真可知設(shè)計(jì)正確。最后使用EDA工具和軟件QuartusII6.0,將設(shè)計(jì)配置到A ltera公司的CYCLONE系列的EP1C6Q240C8N芯片,運(yùn)行正確。
本文使用VHDL語(yǔ)言,采用“自頂向下”設(shè)計(jì)方法,實(shí)現(xiàn)了一個(gè)簡(jiǎn)易微處理器。并以EP1C6Q240C8N芯片為目標(biāo)芯片,用QuartusII6.0產(chǎn)生的配置文件配置目標(biāo)芯片,運(yùn)行正確。此簡(jiǎn)易微處理器的設(shè)計(jì)和實(shí)現(xiàn)可以起到拋磚引玉的作用,為進(jìn)一步擴(kuò)展CPU,實(shí)現(xiàn)更多更復(fù)雜的指令,擴(kuò)大存儲(chǔ)器容量,實(shí)現(xiàn)中斷等深入設(shè)計(jì)打下基礎(chǔ)。
[1] 潘松,黃繼業(yè).EDA技術(shù)實(shí)用教程[M].第三版,北京:科學(xué)出版社,2006.
[2] Introduction to the Quartus II Software Version 10.0[EB/OL].http://www.altera.com.cn/literature/manual/intro_to_quartus2.pdf
[3] Cyclone Device Handbook,Volume 1[EB/OL].http://www.altera.com.cn/literature/lit-cyc.jsp
[4] 鄭學(xué)堅(jiān),周斌.微型計(jì)算機(jī)原理及應(yīng)用[M].第三版,北京:清華大學(xué)出版社,2001.
[5] IEEE Standard VHDL Language Reference Manual,IEEE Standard 1076-1987,New York,1988.
[6] Altera Quartus II 6.0 reference manual,A ltera Corporation,San Jose CA,1992.