16位微控制器的設(shè)計與實現(xiàn)
電子設(shè)計工程 劉麗 劉第
摘要: 這里描述了一款自主研發(fā)的16位嵌入式微控制器(A8096)的設(shè)計與實現(xiàn),基于RTL級設(shè)計方法使用VerilogHDL進行設(shè)計描述,在設(shè)計中,,采用硬布線控制方式,,減少了面積和功耗,同時MCU兼容了MSC-96指令集,,目標(biāo)是可以應(yīng)用于實際嵌入式系統(tǒng)項目中,。
Abstract:
Key words :
隨著信息技術(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è)計方法使用Verilog HDL進行設(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ù),。
如圖4所示,在加法指令的最后一個周期(cycle=05),,CU單元取指信號codefetche有效,,則下一條指令的操作碼(6C,乘法操作碼)被預(yù)取出來,,同時進行查表譯碼確定其指令字節(jié)長度和指令周期數(shù),,隨后操作碼被存入指令寄存器instr中(此時,指令周期計數(shù)器cycle又從01開始計數(shù)),。后面乘法指令的操作數(shù)也會不斷被取進來執(zhí)行,,直到乘法指令最后一個周期時,又將下一條指令的操作碼預(yù)取進來,。

需要說明:codefetche為取操作碼信號,,datafetche為取操作數(shù)信號。在指令最后一個周期時若有中斷請求,,則插入LCALL指令進行中斷處理,,讀取下一條指令。其流程如圖5所示,。

2.4 指令譯碼過程
在MCU設(shè)計過程中,,首先完成對各條指令的指令分析工作,確定每個周期該做的動作,,然后各部件依據(jù)指令分析表進行相關(guān)的指令譯碼(RAM控制器只譯RAM要做的動作,,ALU只譯ALU要做的動作)。過程描述如下:在預(yù)取操作碼時,,CU單元對操作碼進行譯碼確定指令的字節(jié)長度(nr_bytes)和指令周期數(shù)(nr_cycles),。然后CU依據(jù)指令字節(jié)長度(nr_bytes)取操作數(shù),其他部件依據(jù)指令和當(dāng)前指令周期(curcycle)執(zhí)行相應(yīng)的指令操作,。表1為加法指令分析表,,下面以加法指令的譯碼過程來說明整個譯碼流程:
1)加法指令 ADD OPl OP2(將OPl+0P2結(jié)果寫入OPl中),;其目標(biāo)碼格式為:ADD OP2 OPl,其中OPl和OP2均為操作數(shù)地址,。
2)0周期 實際指上一條指令的最后一個時鐘周期,,此周期codefetche取指信號有效,IPU單元將指令送入CU單元確定了指令周期和指令長度,。
3)l周期 取操作數(shù)信號datafetche有效,,op2(地址)進來,被送入RAM地址線,,發(fā)讀信號(從RAM寄存器陣列取操作數(shù)2),。
4)2周期 操作數(shù)2被取入,并存入ALU中的a寄存器,;此周期取操作數(shù)信號datafetche有效,,opl(地址)進來,被送入RAM地址線,,發(fā)讀信號,。
5)3周期 操作數(shù)l被取入,并存入ALU中的b寄存器,;加法器立刻進行a+b運算,。
6)4周期 將加法結(jié)果放到RAM數(shù)據(jù)線上,地址線=opl,,發(fā)寫信號,。將加法結(jié)果寫回到opl中,并依據(jù)結(jié)果對PSW進行處理,。
7)5周期 無動作,,用于寫回操作的過程。
3 驗證結(jié)果
3.1 仿真驗證
芯片的功能與結(jié)構(gòu)設(shè)計,,只是設(shè)計流程的一部分,為保證最終設(shè)計成功,,必須對其全面仿真與功能驗證,。對MCU的測試方法如下:1)功能模塊的單元測試,驗證模塊的功能正確性,,包括接口時序等,。2)系統(tǒng)集成測試,首先編寫簡單的機器碼測試向量進行初步調(diào)試:然后使用編譯器寫匯編程序,,編譯成二進制機器碼進行程序功能測試,。在集成測試中,編寫匯編測試程序,,用編譯器編譯成機器碼,,在Cadenee NC下運行這些測試程序進行仿真測試,。對每條指令均測試了其各種尋址方式,且測試程序自動向DEBUG寄存器寫測試結(jié)果,,以方便調(diào)試,。經(jīng)過復(fù)雜的測試和不斷修正,驗證結(jié)果顯示MCU指令執(zhí)行的正確性,。
3.2 FPGA驗證
使用的FPGA器件是StraTIxⅡ型號為EP1S40F780C7,。綜合結(jié)果顯示:A8096使用3 565個LE(Logic Element)。時序分析結(jié)果:A8096可以運行在49.93 MHz的時鐘頻率下,。A8096占用FPGA資源分布情況如圖6所示,。

4 結(jié)論
本設(shè)計中,采用RISC技術(shù)中的硬布線控制邏輯,,有利于減少MCU面積,、降低功耗以及提高MCU執(zhí)行效率,F(xiàn)PGA實現(xiàn)表明其只占用了3 565個LE單元,,工作時鐘可達50 MHz,。同時該MCU具有很強的擴展性與實用性,應(yīng)用領(lǐng)域廣泛,,可方便與定時器,、串行通訊接口(I2C)、串行外圍接口(SPI),、模數(shù)(A/D)轉(zhuǎn)換器等外圍功能單元組成各種嵌入式系統(tǒng),,完全具備實際應(yīng)用價值。
此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。