16位微控制器的設(shè)計與實現(xiàn)
隨著信息技術(shù)的發(fā)展,網(wǎng)絡(luò)通信、信息安全和信息家電產(chǎn)品的普及,嵌入式MCU正是所有這些信息產(chǎn)品中必不可少的部件。目前國內(nèi)一些科研院校和半導(dǎo)體公司都在致力于研發(fā)自主設(shè)計的嵌入式微控制器,這對我國的半導(dǎo)體產(chǎn)業(yè)、電子產(chǎn)品產(chǎn)業(yè)的發(fā)展具有重要意義。
這里描述了一款自主研發(fā)的16位嵌入式微控制器(A8096)的設(shè)計與實現(xiàn),基于RTL級設(shè)計方法使用VerilogHDL進行設(shè)計描述,在設(shè)計中,采用硬布線控制方式,減少了面積和功耗,同時MCU兼容了MSC-96指令集,目標(biāo)是可以應(yīng)用于實際嵌入式系統(tǒng)項目中。
1 總體設(shè)計
1.1 MSC-96體系結(jié)構(gòu)
圖1所示為MSC-96體系結(jié)構(gòu)。Intel 8096微控制器是由通用寄存器陣列、算術(shù)邏輯單元(RALU)和微程序控制器等模塊組成。其采用的是微程序控制方式,需要使用一個片內(nèi)ROM存儲器,因而會造成面積和功耗都會較大。
MCU內(nèi)部的寄存器陣列通過一個控制器和2條總線與RALU相連。這兩條總線是8位的A-BUS和16位的D-BUS。DBUS只用于RALU與寄存器之間的數(shù)據(jù)傳輸,而A-BUS用作上述傳輸過程中的地址總線。當(dāng)MCU通過寄存器控制器訪問片內(nèi)外寄存器時,A-BUS可作為多路轉(zhuǎn)換的地址/數(shù)據(jù)總線。
1.2 A8096總體結(jié)構(gòu)
為了減少面積和功耗,A8096采用硬布線邏輯控制方式取代上述的微程序控制器。依據(jù)MSC-96的體系結(jié)構(gòu),A8096主要功能模塊包括:IPU(Instruction Pre-fetch Unit。指令預(yù)取單元)、CU(Control Unit,控制單元)、ALU(Arithmetic Logical Unit,算術(shù)邏輯單元)、MEM_C-TRL(MEM控制器)、RF_CTRL(寄存器堆控制器)、ISR(Interrupt Service Routine unit,中斷服務(wù)單元)、GPIO(General Purpose Input Out-put,通用輸入輸出單元)等主要功能部件。其結(jié)構(gòu)如圖2所示。
1.3 系統(tǒng)總線
A8096采用3條總線:一條是MEM總線,用于IPU和MEM CTRL對程序空間和數(shù)據(jù)空間的讀寫控制;16 bit的數(shù)據(jù)線,16 bit的地址線,讀寫信號memrd/memwr;一條是內(nèi)部寄存器陣列(Register File)總線,用于RF_CTRL對內(nèi)部寄存器陣列的讀寫訪問,地址線是8 bit的,數(shù)據(jù)線為16 bit,讀寫信號為rf_rd/rf_wr;一條是SFR總線,用于訪問數(shù)據(jù)空間地址在00H~19H的特殊定義的寄存器空間。8 bit的地址總線,16bit的數(shù)據(jù)總線,讀寫信號sfrrd/sfrwr。另外IPU和MEMCTR的數(shù)據(jù)交互是通過8 bit的數(shù)據(jù)線instr_bus完成的,其作用是從預(yù)取指令隊列中將指令傳給CU單元等。
2 MCU設(shè)計與實現(xiàn)
2.1 MCU工作原理
A8096通過IPU(指令預(yù)取單元)指令預(yù)取,并存放在預(yù)取指令隊列中,CU(控制單元)從IPU指令隊列中取指并進行譯碼,產(chǎn)生控制時序等信號。ALU單元、RAM控制器、MEM控制器等部件中均有譯碼模塊,依據(jù)當(dāng)前指令和當(dāng)前指令周期主動工作。如:RAM控制器在加法指令的相應(yīng)周期取操作數(shù)送往ALU單元,ALU在相應(yīng)周期接收數(shù)據(jù),然后進行運算并將結(jié)果輸出。
2.2 MCU啟動過程
在上電復(fù)位時,MCU處于復(fù)位態(tài)(rst信號有效)。復(fù)位時,IPU單元中的指令隊列清空(empty信號有效),總線處于空閑態(tài),IPU立刻進行指令預(yù)取動作,程序空間的首地址(2080H)指令即被取人指令隊列,隨后隊列空信號(empty)無效,同時指令被發(fā)送出去(instr_bus)。在復(fù)位同時,控制單元(CU)的取指信號(codefetche)即一直有效,在指令隊列空信號empty無效后(在empty無效之前CU一直等待),指令即通過instr_ bus進入了CU,指令操作碼被存入了指令寄存器,如圖3中instr寄存器更新為加法指令的操作碼74。至此,MCU完成了復(fù)位、自動取指操作,并開始往下執(zhí)行該指令,IPU單元也會繼續(xù)進行指令預(yù)取操作。
2.3 指令執(zhí)行過程
在A8096中,有兩級指令預(yù)取概念:一級是指令預(yù)單元IPU利用總線空閑從程序空間不斷預(yù)取指令存入指令隊列中;一級則是指令執(zhí)行過程中的指令預(yù)取,當(dāng)一條指令執(zhí)行到最后一個時鐘周期時,CU單元就會發(fā)送取指信號,進行指令執(zhí)行級的預(yù)取指動作,下一條指令的操作碼即被預(yù)取出來(指令隊列為空時需等待),并立刻進行譯碼確定指令的字節(jié)長度和指令執(zhí)行周期數(shù)。
評論