郭 勇 羅 樂(lè) 劉森態(tài) 付 強(qiáng) 馬 超 劉娟秀 賴(lài)祥軍
1.成都工業(yè)學(xué)院電子工程學(xué)院 四川 成都 611730
2.重慶郵電大學(xué)光電工程學(xué)院 重慶 400065
集成電路是一個(gè)國(guó)家安全大門(mén)的鑰匙,是整個(gè)電子信息產(chǎn)業(yè)皇冠上的寶石[1-2]。中央處理器(CPU)代表了集成電路的核心技術(shù),我國(guó)在集成電路上的進(jìn)口總金額已超過(guò)石油進(jìn)口的總金額,近年我國(guó)已將發(fā)展集成電路產(chǎn)業(yè),尤其是發(fā)展擁有自主知識(shí)產(chǎn)權(quán)的通用CPU芯片產(chǎn)業(yè)上升到國(guó)家戰(zhàn)略高度,促使龐大的資本和人力涌入到集成電路設(shè)計(jì)領(lǐng)域。國(guó)內(nèi)缺乏通用處理器的根本原因主要是指令集架構(gòu)(ISA)的缺乏,目前廣泛使用的x86架構(gòu)、ARM架構(gòu)、MIPS架構(gòu)和PowerPC架構(gòu)都被國(guó)外公司所壟斷,需要支付高昂的授權(quán)使用費(fèi),而RISC-V架構(gòu)對(duì)指令集完全開(kāi)源,RISC-V基金會(huì)僅收取少量的授權(quán)費(fèi),使得RISC-V處理器越來(lái)越受到研究機(jī)構(gòu)、學(xué)者和芯片設(shè)計(jì)領(lǐng)域的重視[3-6]。
本論文使用Verilog HDL語(yǔ)言實(shí)現(xiàn)了一個(gè)常用的47條指令二級(jí)可變流水線RV32I、重點(diǎn)分析了取值模塊IFU、執(zhí)行模塊EXU,簡(jiǎn)要分析了異常和中斷以及調(diào)試模塊的E203 CPU系統(tǒng)。
RV32I指令集是RISC-V指令集架構(gòu)下的基本的32位指令集,它規(guī)定了47條基本指令,包括了32位地址空間與整數(shù)指令,定義了32個(gè)32位通用整數(shù)寄存器。RV32I支持4種基本類(lèi)型指令,格式非常規(guī)范,所有的指令都是固定32位,并且在存儲(chǔ)器中以4字節(jié)對(duì)齊[7-8]。
本課題基于RISC-V指令集設(shè)計(jì)了蜂鳥(niǎo)E203 CPU,其具體設(shè)計(jì)內(nèi)容主要包括:(1)E203頂層設(shè)計(jì)。采用典型的Top-Down設(shè)計(jì)方法將CPU劃分成多個(gè)模塊,包括時(shí)鐘門(mén)控(CLK_CTRL)、中斷控制(IRQ_CTRL)、復(fù)位控制(RESET_CTRL)、ITCM訪問(wèn)控制(ITCM_CTRL)、DTCM訪問(wèn)控制(DTCR_CTRL)、取指單元(IFU)、執(zhí)行單元(EXU)、存儲(chǔ)器訪問(wèn)(LSU)、總線接口(BIU)。其頂層結(jié)構(gòu)如圖1所示。
圖1 模塊頂層設(shè)計(jì)結(jié)構(gòu)圖
圖2 IFU微架構(gòu)圖
(2)取值單元微架構(gòu)。取指是流水線第一步,它要求以最快的速度且連續(xù)不斷地從存儲(chǔ)器取出指令供處理器核執(zhí)行。在E203 CPU中利用Mini-Decode模塊對(duì)取回的地址進(jìn)行簡(jiǎn)單譯碼,使用Simple-BPU進(jìn)行簡(jiǎn)單的分支預(yù)測(cè),利用PC生成模塊產(chǎn)生新取值PC地址,借助地址判斷和ICB總線控制模塊來(lái)訪問(wèn)PC地址所對(duì)應(yīng)的ITCM或BIU。其微架構(gòu)如圖2所示。
(3)執(zhí)行單元微架構(gòu)。蜂鳥(niǎo)E203 CPU的譯碼、執(zhí)行、交付和寫(xiě)回均在EXU模塊中運(yùn)行。從IFU模塊取出指令后,執(zhí)行單元首先通過(guò)譯碼和派遣模塊完成指令譯碼和派遣,接著將譯碼出的操作數(shù),借助RD-Regfile模塊讀取Regfile,同時(shí)將指令派遣給不同的運(yùn)算單元,例如算術(shù)模塊ALU、長(zhǎng)指令模塊Long-Pipes、寄存器訪問(wèn)模塊LSU、以及擴(kuò)展協(xié)處理器EAI。如果在程序執(zhí)行過(guò)程中有中斷、異常以及帶條件跳轉(zhuǎn)指令,則通過(guò)交付模塊判斷是否進(jìn)行流水線沖刷。在長(zhǎng)指令執(zhí)行過(guò)程中,使用OITF模塊維護(hù)長(zhǎng)指令的數(shù)據(jù)相關(guān)性。最后,通過(guò)WB-Regfile模塊完成指令運(yùn)算結(jié)果的寫(xiě)回。EXU微架構(gòu)如圖3所示。
圖3 EXU微架構(gòu)圖
(4)總線接口單元微架構(gòu)。BIU使用標(biāo)準(zhǔn)的ICB總線接口,主要負(fù)責(zé)接收IFU和LSU單元的存儲(chǔ)器訪問(wèn)請(qǐng)求并判斷出訪問(wèn)地址區(qū)間從而訪問(wèn)不同的外部接口。BIU有兩組輸入ICB總線接口,兩組輸入ICB總線經(jīng)過(guò)ICB匯合模塊仲裁優(yōu)先級(jí)匯合成一組。通過(guò)使用Ping-Pong Buffer模塊解決流水線反壓時(shí)序問(wèn)題。接著通過(guò)地址判斷模塊來(lái)產(chǎn)生分發(fā)信息,訪問(wèn)不同的模塊,例如私有外設(shè)、系統(tǒng)存儲(chǔ)等。BIU微架構(gòu)如圖4所示。
圖4 SoC總線微架構(gòu)圖
圖5 串口打印“CDTU”字符串
圖6 流水燈程序控制
本課題最終設(shè)計(jì)的蜂鳥(niǎo)E203 CPU在Xilinx XC7A100T芯 片F(xiàn)PGA開(kāi)發(fā)平臺(tái)上完成了驗(yàn)證工作,驗(yàn)證的結(jié)果分別如圖5和圖6所示。圖5是將E203內(nèi)核配置在FPGA上,利用編譯器完成串口的調(diào)試,打印出成都工業(yè)學(xué)院簡(jiǎn)稱(chēng)“CDTU”;圖6是在E203片上系統(tǒng)中燒寫(xiě)流水燈程序,每個(gè)0.5秒循環(huán)點(diǎn)亮一個(gè)LED;上述實(shí)驗(yàn)結(jié)果驗(yàn)證了設(shè)計(jì)的正確性。
本論文設(shè)計(jì)實(shí)現(xiàn)了RISC-V32位流水線架構(gòu)E203 CPU,限于文章篇幅還是盡可能完整地展現(xiàn)了該CPU的整體結(jié)構(gòu)和模塊功能,著重分析了頂層架構(gòu)、IFU微架構(gòu)、EXU微架構(gòu)以及BIU微架構(gòu),編寫(xiě)了可運(yùn)行于RISCV架構(gòu)CPU的應(yīng)用程序,并最終在Xilinx Artix-7FPGA開(kāi)發(fā)板上驗(yàn)證了設(shè)計(jì)的正確性。