《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 16位嵌入式RISC微處理器設(shè)計
16位嵌入式RISC微處理器設(shè)計
來源:微型機與應(yīng)用2013年第7期
雷少波,黃 民
(北京信息科技大學(xué) 機電工程學(xué)院,北京 100192)
摘要: 設(shè)計了一款具有4級流水線結(jié)構(gòu)的16位RISC嵌入式微處理器。針對轉(zhuǎn)移指令,未采用慣用的延遲轉(zhuǎn)移技術(shù),而是通過在取指階段增加相應(yīng)的硬件結(jié)構(gòu)實現(xiàn)了無延遲轉(zhuǎn)移。采用內(nèi)部前推技術(shù)解決了指令執(zhí)行過程中的數(shù)據(jù)相關(guān)。同時通過設(shè)置相應(yīng)的硬件堆棧實現(xiàn)了對中斷嵌套和調(diào)用嵌套的支持。整體系統(tǒng)結(jié)構(gòu)采用Verilog HDL語言設(shè)計,指令系統(tǒng)較完善。在軟件平臺上的仿真驗證初步表明了本設(shè)計的正確性。
Abstract:
Key words :

摘  要: 設(shè)計了一款具有4級流水線結(jié)構(gòu)的16位RISC嵌入式微處理器。針對轉(zhuǎn)移指令,未采用慣用的延遲轉(zhuǎn)移技術(shù),而是通過在取指階段增加相應(yīng)的硬件結(jié)構(gòu)實現(xiàn)了無延遲轉(zhuǎn)移。采用內(nèi)部前推技術(shù)解決了指令執(zhí)行過程中的數(shù)據(jù)相關(guān)。同時通過設(shè)置相應(yīng)的硬件堆棧實現(xiàn)了對中斷嵌套和調(diào)用嵌套的支持。整體系統(tǒng)結(jié)構(gòu)采用Verilog HDL語言設(shè)計,指令系統(tǒng)較完善。在軟件平臺上的仿真驗證初步表明了本設(shè)計的正確性。
關(guān)鍵詞: 微處理器;流水線;精簡指令集現(xiàn)場可編程門陣列;嵌入式系統(tǒng)

 隨著微電子及EDA技術(shù)的高速發(fā)展,可編程邏輯器件的研發(fā)與應(yīng)用也取得了長足的進(jìn)步。其中,基于現(xiàn)場可編程門陣列(FPGA)的片上系統(tǒng)(System on Chip)在嵌入式系統(tǒng)中得到了廣泛的應(yīng)用。與傳統(tǒng)的專用集成電路(ASIC)相比,其具有開發(fā)周期短、設(shè)計簡單靈活等特點。
 本文描述了基于FPGA的16 bit嵌入式微處理器的結(jié)構(gòu)設(shè)計。該處理器采用程序存儲器與數(shù)據(jù)存儲器分離的哈佛型結(jié)構(gòu),采用精簡指令集(RISC),指令面向寄存器操作,加快了運行速度,簡化了控制邏輯。
1 系統(tǒng)結(jié)構(gòu)設(shè)計
 該處理器執(zhí)行指令時按照取指(IF)、譯碼(ID)、執(zhí)行(EX)和結(jié)果保存(WR)4個階段依次進(jìn)行。由于采用4級流水線結(jié)構(gòu),每個時鐘周期能完成一條指令的執(zhí)行。
1.1 指令系統(tǒng)
 該處理器采用RISC型指令,設(shè)置了數(shù)據(jù)傳送、算術(shù)邏輯運算和程序控制3大類共21條指令,指令格式固定,每條指令長度為32 bit。
1.2 硬件結(jié)構(gòu)
 該處理器共有4級流水線,因此可將硬件基本劃分為取指、譯碼、執(zhí)行和結(jié)果保存4部分。
1.2.1 取指
 取指部分結(jié)構(gòu)如圖1所示。與參考文獻(xiàn)[1]中提及的處理器取指部分相比,其增加了PC選擇生成器G_PC,通過它實現(xiàn)了無延遲的程序轉(zhuǎn)移指令。

 G_PC是本部分的核心,其部分Verilog HDL實現(xiàn)代碼如下:
……
 input inta,z;//inta為中斷請求信號
 //z為譯碼部分回送的信號,用于jz、jnz指令
 input[4:0]p_op_code;//指令操作碼,即inst[28:24]
 output status_up,status_down,epc_up,epc_down;
 //對status和EPC進(jìn)行出入棧控制
 output s2;//對將要壓入EPC中的返回地址進(jìn)行選擇
 output cover;//控制EPC頂部單元數(shù)據(jù)是否被mux2送來的數(shù)據(jù)覆蓋
 output[1:0]s1;//s1對下條指令的取指地址進(jìn)行選擇
 reg status_up,status_down,epc_up,epc_down,s2;
 reg[1:0] s1;
 always begin
 case(p_op_code)
 //根據(jù)指令的操作碼來產(chǎn)生信號的輸出
      5′b00000:begin//此操作碼對應(yīng)add ra,rb,rc指令
     if(inta)begin
 //如果有符合優(yōu)先級條件的中斷請求則inta為1
            status_down=1;
 //控制status在下個時鐘沿將s0壓棧
            status_up=0;
            epc_down=1;
 //控制EPC下個時鐘沿將相應(yīng)的返回地址壓棧
            epc_up=0;
            s1=3;
 //選擇中斷入口地址add_int作下條指令地址
            s2=0;
 //選擇當(dāng)前指令地址加4作為返回地址壓入EPC
 cover=0;//EPC頂部數(shù)據(jù)不被覆蓋
   end
     else begin//無符合優(yōu)先級條件的中斷請求
            status_down=0;
            status_up=0;
            epc_down=0;
            epc_up=0;
            s1=0;//下條指令地址為當(dāng)前指令地址加4
            s2=1′bx;//s2為無關(guān)信號,0或1均可
            cover=0;
   end
      end
……
 //其他指令類似,根據(jù)操作碼及是否有中斷請求來生成相應(yīng)的輸出信號
 endcase
 end
 優(yōu)先編碼器coder則從硬件電路上實現(xiàn)了中斷源的優(yōu)先級,即3號中斷優(yōu)先級最高,然后依次遞減(3號中斷的優(yōu)先級值為4,2號中斷的優(yōu)先級值為3,1號中斷為2,0號中斷為1)。coder的輸出信號s0既代表了中斷的優(yōu)先級,又起到了選擇中斷入口地址的作用。
 取指部分的具體工作流程如下。
 (1)假設(shè)此時指令地址add_pc在ROM中對應(yīng)的指令inst為sub r0,r1,r2,此類語句不會使下一條指令地址發(fā)生轉(zhuǎn)移。同時假設(shè)沒有中斷信號產(chǎn)生,于是當(dāng)下一個時鐘上升沿到達(dá)時,由G_PC生成的控制信號s1將add_pc+4選通送入PC寄存器中,即取出物理地址相鄰的下一條指令(加4是因為一條指令有32 bit,共4 B)。
 假設(shè)add_pc在ROM中對應(yīng)的指令inst為sub r0,r1,r2,且中斷狀態(tài)棧status頂部單元數(shù)據(jù)為0。此時有中斷信號0和中斷信號2產(chǎn)生,優(yōu)先編碼器coder生成的s0為2號中斷的優(yōu)先級3(大于status頂部數(shù)據(jù)0),于是中斷請求信號inta有效。當(dāng)下一個時鐘上升沿到達(dá)時,G_PC生成的s2信號和epc_down信號將add_pc+4壓入返回地址棧EPC中,s0和由G_PC產(chǎn)生的信號s1將2號中斷的入口地址v2送入PC寄存器中(0號中斷被忽略掉),同時將s0的值3(即2號中斷的優(yōu)先級)壓入中斷狀態(tài)棧status頂部。
 (2)假設(shè)此時add_pc在ROM中對應(yīng)的指令inst為絕對跳轉(zhuǎn)jump 100,即程序轉(zhuǎn)移到地址100處開始執(zhí)行,且沒有中斷信號產(chǎn)生。則當(dāng)下一個時鐘上升沿來臨時,由G_PC產(chǎn)生的s1等控制信號將inst[23:16](此時為100)送入PC寄存器中開始執(zhí)行。
 假設(shè)此時add_pc在ROM中對應(yīng)的指令inst為絕對跳轉(zhuǎn)jump 100,但此時有中斷信號1產(chǎn)生(且假設(shè)此時status頂部值小于2),則inta為1。于是G_PC產(chǎn)生的控制信號將inst[23:16](即100)壓入EPC頂,將中斷1的優(yōu)先級(即s0的值2)壓入status頂部,將中斷1的入口地址送入PC寄存器中,開始響應(yīng)中斷。如果之后又產(chǎn)生優(yōu)先級大于2的中斷,則將相關(guān)數(shù)據(jù)壓棧后響應(yīng)中斷,若產(chǎn)生中斷的優(yōu)先級小于或等于2,則被忽略不執(zhí)行。
 條件轉(zhuǎn)移jz、jnz與jump指令類似,只是當(dāng)譯碼階段產(chǎn)生的Z信號為1時,jz跳轉(zhuǎn),Z為0時jnz跳轉(zhuǎn)。通常比較指令comp后面緊跟條件轉(zhuǎn)移指令來實現(xiàn)程序轉(zhuǎn)移控制。
(3)假設(shè)此時add_pc在ROM中對應(yīng)的指令inst為調(diào)用指令call 100,執(zhí)行此條指令時忽略所有中斷請求信號,將add_pc+4壓入EPC中后,將inst[23:16](即100)送入PC寄存器中開始執(zhí)行調(diào)用程序。
(4)假設(shè)此時add_pc在ROM中對應(yīng)的指令inst為中斷返回指令int_ret,且沒有高優(yōu)先級的中斷產(chǎn)生,則EPC頂部的數(shù)據(jù)add_ret送入PC寄存器中,同時,EPC和status中的頂部數(shù)據(jù)彈出,其余數(shù)據(jù)依次上移一位。
 假設(shè)此時add_pc在ROM中對應(yīng)的指令inst為中斷返回指令int_ret,但有優(yōu)先級比status頂部單元數(shù)據(jù)高的中斷信號產(chǎn)生,則G_PC產(chǎn)生的cover信號有效,status頂部數(shù)據(jù)被新的中斷優(yōu)先級值所覆蓋,EPC維持不變,同時響應(yīng)新中斷。
(5)調(diào)用返回指令call_ret與中斷返回指令int_ret類似,不過執(zhí)行時status中的數(shù)據(jù)不彈出。
1.2.2 譯碼
 譯碼部分結(jié)構(gòu)如圖2所示。

 譯碼部分核心是控制單元ctrl。為了解決流水線的數(shù)據(jù)相關(guān),采用了內(nèi)部前推的方法,將執(zhí)行部分產(chǎn)生的數(shù)據(jù)result回送至本部分。將比較單元comp產(chǎn)生的信號Z送至譯碼部分,使得條件跳轉(zhuǎn)指令(jz、jnz)在取指階段就能實現(xiàn),從而實現(xiàn)無延遲跳轉(zhuǎn)。
 本部分中的寄存器堆reg_file在時鐘下降沿且寫信號l_e_w_reg有效時執(zhí)行寫數(shù)據(jù)操作(實現(xiàn)結(jié)果保存WR這一部分的功能)。ctrl產(chǎn)生的一部分控制信號通過執(zhí)行控制寄存器EXR送至下一級使用。
1.2.3 執(zhí)行
 執(zhí)行部分的結(jié)構(gòu)如圖3所示。此部分核心是算術(shù)邏輯運算單元ALU,前面譯碼部分的ctrl產(chǎn)生的運算控制碼alu_code指定運算操作,運算結(jié)果c_out送入5/1選擇器mux6。關(guān)于mux6的其余4路數(shù)據(jù)對應(yīng)的指令為:dout對應(yīng)load ra,imme即將數(shù)據(jù)存儲器中指定地址單元M[imme]的數(shù)據(jù)送入ra號寄存器中;ds對應(yīng)pop ra,即將數(shù)據(jù)堆棧stake棧頂?shù)臄?shù)據(jù)彈入ra號寄存器中;e_imme對應(yīng)指令val ra,imme送立即數(shù)imme入ra號寄存器;e_db對應(yīng)mov ra,rb即將rb號寄存器中的數(shù)據(jù)送入ra號寄存器中。

1.2.4 結(jié)果保存
 這里的結(jié)果保存是針對目的地址為寄存器的指令,如算術(shù)邏輯運算指令、寄存器之間的數(shù)據(jù)傳輸指令等。工作流程即將圖3中RSR的l_e_ra、l_e_w_reg、l_result信號送入圖2中的reg_file。當(dāng)時鐘下降沿到達(dá)且l_e_w_reg有效時,數(shù)據(jù)l_result被寫入l_e_ra號寄存器中。
2 仿真驗證
 為了驗證該設(shè)計,利用Altera公司的Quartus II軟件進(jìn)行仿真驗證。仿真時設(shè)計在取地址為32的指令時出現(xiàn)0號中斷,在取地址為52的指令時出現(xiàn)1號中斷。實際執(zhí)行時,1號中斷嵌套在0號中斷之中。對應(yīng)中斷的入口地址分別為48、68。仿真結(jié)果如圖4所示。

 圖4中a0~a6分別顯示的是r0~r6號寄存器中的數(shù)據(jù);v0、v1分別是0號中斷、1號中斷的入口地址;pc_num是處在取指階段的指令的地址;ints是中斷輸入信號,ints=1、ints=2分別表示外設(shè)請求1號中斷、外設(shè)請求2號中斷。從圖4中可以看出:
 (1)幾乎每條處在取指階段的指令都要經(jīng)過3個時鐘上升沿和一個時鐘下降沿后才執(zhí)行完畢。這是因為指令取指完成后,還要經(jīng)過譯碼、執(zhí)行和結(jié)果保存3個階段,并且結(jié)果保存是在時鐘下降沿完成的。但由于是流水線結(jié)構(gòu),故等效于每一個時鐘執(zhí)行一條指令。
 (2)當(dāng)取到地址為pc_num=32的指令時,中斷信號1產(chǎn)生,于是下條指令的取指地址為1號中斷入口地址48。執(zhí)行1號中斷的子程序到52時,中斷信號2產(chǎn)生,于是響應(yīng)2號中斷,下條指令地址為2號中斷入口地址68(2號中斷子程序就一條返回指令)。
 (3)當(dāng)執(zhí)行地址為24的jump 0指令時,下條指令地址為0,實現(xiàn)了無延遲轉(zhuǎn)移。
 綜上所述,經(jīng)初步驗證,該設(shè)計能實現(xiàn)4級流水線結(jié)構(gòu),并具備中斷及其嵌套、無延遲轉(zhuǎn)移等功能。
本文設(shè)計了一種基于FPGA的16 bit嵌入式RISC微處理器。該處理器主要特點是通過增加硬件結(jié)構(gòu)實現(xiàn)了對轉(zhuǎn)移指令的無延遲實現(xiàn)以及對中斷及調(diào)用指令的支持。在下一步工作中將優(yōu)化結(jié)構(gòu)設(shè)計,增加外圍設(shè)備,逐步構(gòu)成一個高性能的單片系統(tǒng)。
參考文獻(xiàn)
[1] 李亞民.計算機原理與設(shè)計[M].北京:清華大學(xué)出版社,2011.
[2] 鄭緯民,湯志忠.計算機系統(tǒng)結(jié)構(gòu)[M].北京:清華大學(xué)出版社,1998.
[3] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計教程[M].北京:北京航空航天大學(xué)出版社,2008.
[4] 于洋,肖鐵軍,丁偉.面向教學(xué)的16位CISC微處理器的設(shè)計[J].計算機工程與設(shè)計,2010,31(16):3584-3587.
[5] 張英武,袁國順.32位嵌入式RISC處理器的設(shè)計與實現(xiàn)[J].微電子學(xué)與計算機,2008,25(6):14-17.
[6] 曾舒婷,楊志家.高性能PLC專用指令集處理器設(shè)計與仿真[J].微電子學(xué)與計算機,2011,28(7):76-81.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美国产三区| 激情欧美亚洲| 麻豆av一区二区三区| 欧美亚洲免费| 亚洲午夜精品一区二区| 久久精品人人做人人爽| 欧美亚洲免费高清在线观看| 亚洲天天影视| 国产精品99久久久久久久久久久久| 亚洲日本成人网| 亚洲电影免费观看高清完整版在线观看 | 久久国产一区二区三区| 亚洲欧美日韩精品久久奇米色影视 | 国产精品99久久99久久久二8| 亚洲免费观看视频| 99日韩精品| 亚洲天堂av在线免费| 亚洲香蕉在线观看| 亚洲欧美日韩区| 欧美亚洲在线观看| 久久狠狠一本精品综合网| 久久国产精品久久久| 久久精品国产精品亚洲精品| 久久久99精品免费观看不卡| 久久人人爽人人| 免费一级欧美片在线播放| 免费一区视频| 欧美色网在线| 国产精品揄拍500视频| 国产欧美一级| 一区二区在线看| 亚洲美女精品成人在线视频| 夜夜爽夜夜爽精品视频| 亚洲视频每日更新| 亚洲一区二区日本| 午夜精品久久| 性欧美video另类hd性玩具| 夜夜爽99久久国产综合精品女不卡 | 亚洲一区三区视频在线观看| 亚洲一区精品电影| 亚洲在线观看| 性欧美videos另类喷潮| 久久成人综合视频| 久久精品视频在线观看| 亚洲国产精品第一区二区| 久久精品日韩欧美| 亚洲国内精品| 99精品国产在热久久婷婷| 亚洲精品三级| 99re在线精品| 性色av一区二区三区| 久久精品中文| 猛男gaygay欧美视频| 欧美精品97| 欧美视频一区二区三区…| 欧美三日本三级少妇三99| 国产精品啊v在线| 国产精品视频久久一区| 国产婷婷97碰碰久久人人蜜臀| 国产一区视频在线看| 在线成人免费观看| 亚洲福利视频三区| 亚洲精品一品区二品区三品区| 在线一区免费观看| 欧美一区二视频| 亚洲精品国产视频| 一区二区三区国产精品| 欧美在线一二三四区| 久久xxxx| 久久久亚洲精品一区二区三区| 快播亚洲色图| 欧美视频免费看| 国产亚洲欧美aaaa| 亚洲日本在线观看| 亚洲女同精品视频| 亚洲国产精品美女| 亚洲天堂av图片| 久久国产精品久久w女人spa| 欧美高清在线精品一区| 国产精品igao视频网网址不卡日韩| 国产精品亚洲综合天堂夜夜| 影音先锋日韩资源| 在线视频欧美一区| 久久精品99无色码中文字幕| 亚洲午夜电影在线观看| 久久久久久免费| 欧美日韩视频专区在线播放 | 欧美在线视频观看| 欧美韩日高清| 国产精品伊人日日| 亚洲精品久久久久久久久久久久久| 亚洲一区二区三区在线看| 最新日韩在线| 亚洲一区二区三区四区五区午夜| 麻豆久久久9性大片| 欧美天堂亚洲电影院在线播放| 国产一区二区三区的电影| 99re热这里只有精品免费视频| 欧美一区二区女人| 一区二区三区|亚洲午夜| 久久人人97超碰精品888| 国产精品久久久一区二区三区| 在线观看免费视频综合| 亚洲一区三区电影在线观看| 日韩一区二区精品葵司在线| 久久久久国内| 欧美日韩在线视频一区二区| 国产一区二区三区精品欧美日韩一区二区三区 | 国产在线观看91精品一区| 一区二区三区欧美成人| 亚洲精品久久久久中文字幕欢迎你| 欧美中在线观看| 欧美性感一类影片在线播放| 在线观看欧美日韩| 午夜亚洲一区| 欧美一区二区三区日韩视频| 欧美日韩色一区| 亚洲激精日韩激精欧美精品| 久久国产毛片| 久久av免费一区| 国产精品女人久久久久久| 日韩亚洲综合在线| 亚洲国产女人aaa毛片在线| 久久成人免费| 国产精品―色哟哟| 99国产一区二区三精品乱码| 久久精品一区二区三区四区| 亚洲免费网站| 国产精品成人在线| 91久久精品国产91性色| 亚洲国产综合视频在线观看| 久久免费视频网站| 国产日韩成人精品| 亚洲欧美综合v| 性欧美超级视频| 国产精品白丝av嫩草影院| 亚洲精品中文字幕在线观看| 亚洲高清影视| 欧美成人免费全部| 亚洲成色精品| 亚洲欧洲日韩综合二区| 免费日韩av| 亚洲第一在线综合网站| 亚洲国产婷婷香蕉久久久久久99| 久久综合久久综合这里只有精品| 激情久久影院| 久久精品一级爱片| 欧美裸体一区二区三区| 亚洲精品一区二| 亚洲视频在线看| 国产精品成人在线| 亚洲婷婷综合久久一本伊一区| 亚洲专区一区二区三区| 国产精品日韩一区二区| 宅男噜噜噜66一区二区| 亚洲伊人久久综合| 国产精品视频网址| 亚洲欧美日韩天堂| 久久国产直播| 伊人久久大香线蕉av超碰演员| 亚洲国产精品久久人人爱蜜臀| 欧美不卡福利| 日韩亚洲欧美综合| 亚洲一区欧美一区| 国内精品久久久久久久果冻传媒| 久久福利精品| 欧美福利电影在线观看| 亚洲精品一区二区三区四区高清 | 午夜一级在线看亚洲| 久久久久久电影| 亚洲激情精品| 亚洲专区国产精品| 国产一区二区高清| 亚洲激情视频网站| 欧美日韩岛国| 亚洲在线播放电影| 玖玖综合伊人| 亚洲美女少妇无套啪啪呻吟| 亚洲一二三区在线观看| 国产精品一区毛片| 亚洲国产美女久久久久| 欧美日韩在线直播| 新狼窝色av性久久久久久| 免费在线亚洲| 一区二区三区高清| 久久久亚洲高清| 91久久精品一区二区别| 久久国产乱子精品免费女| 在线国产日韩| 亚洲淫片在线视频| 国产一区自拍视频| 日韩视频不卡中文| 国产毛片久久| 亚洲精选一区| 国产精品在线看| 一区二区久久久久| 国产一区二区三区精品欧美日韩一区二区三区 | 性xx色xx综合久久久xx| 亚洲二区免费| 欧美亚洲一区三区|