999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于FPGA的RISC的設(shè)計(jì)和仿真

2012-05-12 02:48:00徐正安
關(guān)鍵詞:指令程序設(shè)計(jì)

汪 濤,徐正安

(重慶大學(xué) 物理學(xué)院,重慶 401331)

精簡指令集計(jì)算機(jī)RISC (Reduced Instruction Set Computer)是一種執(zhí)行較少類型計(jì)算機(jī)指令的微處理器,起源于上世紀(jì)80年代的 MIPS主機(jī) (即 RISC機(jī)),RISC機(jī)中采用的微處理器統(tǒng)稱RISC處理器。與一般的CPU相比,其不僅簡化了指令系統(tǒng),而且還通過簡化指令系統(tǒng)使計(jì)算機(jī)的結(jié)構(gòu)更加簡單合理,從而提高了計(jì)算機(jī)的運(yùn)算速度。從實(shí)現(xiàn)的途徑看,RISC_CPU與一般的CPU的不同之處在于,它的時(shí)序控制信號形成部件是用硬布線邏輯實(shí)現(xiàn)的而不是采用微程序的控制方式,因此,與一般CPU相比它省去了讀取微指令的時(shí)間。

RISC_CPU與生活密切相關(guān),它已經(jīng)進(jìn)入消費(fèi)電子的各個領(lǐng)域,ARM、MIPS、PowerPC和51單片機(jī)等處理器都屬于RISC家族的一部分,在國際市場上RISC處理器占有巨大的市場份額,RISC的研發(fā)也是一個非常熱門的領(lǐng)域,只有認(rèn)真理解RISC的原理才能更好地認(rèn)識和掌握已有的RISC架構(gòu)的處理器。

利用現(xiàn)場可編程門陣列FPGA (Field Progamable Gate Array)的靈活性可以很方便地設(shè)計(jì)出RISC,利用Altera公司的EDA工具QuartusⅡ和Mentor公司的ModelSim可以設(shè)計(jì)出RISC的RTL模型并對這個模型進(jìn)行仿真。本文介紹了一種8 bit簡單RISC的實(shí)現(xiàn)方法,在QuartusⅡ中搭建了模型,通過時(shí)序仿真對該模型進(jìn)行了功能驗(yàn)證。

1 RISC_CPU的實(shí)現(xiàn)原理

本文設(shè)計(jì)的RISC具有8條指令,一律采用直接尋址地方式,采用哈佛結(jié)構(gòu),指令和數(shù)據(jù)存儲分別放在定制的ROM和RAM中。RISC_CPU的基本結(jié)構(gòu)圖1所示。

圖1 RISC_CPU的基本結(jié)構(gòu)

該RISC_CPU可以綜合到FPGA的具體電路中,因此,在完善外部電路和接口的情況下完全可以當(dāng)做一臺真正的計(jì)算機(jī)來使用。該RISC_CPU的工作過程如下:首先,將預(yù)先編好的匯編指令代碼以11 bit二進(jìn)制的形式存放在定制的ROM中 (在QuartusⅡ的MegaWizard中完成定制),將要處理的數(shù)據(jù)按地址順序存放在定制的RAM中;然后,有限狀態(tài)機(jī)(FSM)開始以 8個指令周期的工作模式開始工作,在這8個指令周期中完成指令和數(shù)據(jù)的加載,F(xiàn)SM產(chǎn)生的 8組標(biāo)志信號(FLAG)完成對控制單元(CU)和算術(shù)邏輯單元(ALU)的控制;最后,由FSM產(chǎn)生的停止信號(HALT)終止程序的運(yùn)行,并將程序的運(yùn)行結(jié)果存儲在RAM的指定地址中。

這款 RISC的每條指令有 11 bit,高3 bit為操作碼,低8 bit為ROM和RAM地址,因此它的尋址空間為256 bit,對于簡單的匯編指令還是可以應(yīng)付的。

2 RISC_CPU的邏輯設(shè)計(jì)

2.1 指令系統(tǒng)的設(shè)計(jì)

本文設(shè)計(jì)的RISC主要由8條指令組成,它們的功能如下。

(1)HLT(opcode為 3’b000):停機(jī)操作。 該操作將空一個指令周期,即8個時(shí)鐘周期。

(2)SKZ(opcode 為 3’b001):為零跳過下一條語句。該操作先判斷當(dāng)前alu中的結(jié)果是否為零,若是零就跳過下一條語句,否則繼續(xù)執(zhí)行。

(3)ADD(opcode為 3’b010):相加。該操作將累加器中的值與地址所指的存儲器或端口的數(shù)據(jù)相加,結(jié)果仍送回累加器中。

(4)AND(opcode為 3’b011):相與。該操作將累加器的值與地址所指的存儲器或端口的數(shù)據(jù)相與,結(jié)果仍送回累加器中。

(5)XOR(opcode為 3’b100):異或。該操作將累加器的值與指令中給出地址的數(shù)據(jù)異或,結(jié)果仍送回累加器中。

(6)LDA(opcode為 3’b101):讀數(shù)據(jù)。該操作將指令中給出地址的數(shù)據(jù)放入累加器。

(7)STO(opcode為 3’b110):寫數(shù)據(jù)。 該操作將累加器的數(shù)據(jù)放入指令中給出的地址。

(8)JMP(opcode為 3’b111):無條件跳轉(zhuǎn)語句。 該操作將跳轉(zhuǎn)至指令給出的目的地址,繼續(xù)執(zhí)行。

2.2 指令寄存器的設(shè)計(jì)

指令寄存器主要完成對指令的解碼,由于ROM中存儲的是11 bit數(shù)據(jù),因此需要在一個指令周期中完成指令的獲取,同時(shí),指令寄存器由FSM輸出的控制標(biāo)志符get_ir完成指令的拆分,其中高3 bit為操作碼送往ALU中進(jìn)行操作,低8 bit送往RAM中完成數(shù)據(jù)的尋址操作。在QuartusⅡ中編寫Verilog HDL語言完成了指令寄存器的RTL模型的搭建,其在QuartusⅡ中的封裝模塊如圖2所示。

指令寄存器設(shè)計(jì)的難點(diǎn)是控制標(biāo)志符get_ir如何與ROM的讀指令標(biāo)志rd_rom配合完成指令的拆分。好的時(shí)序設(shè)計(jì)能避免產(chǎn)生雜亂無章的信號,使匯編程序能正確的被所設(shè)計(jì)的指令寄存器識別并被后面的模塊使用。

圖2 指令寄存器模塊

2.3 算術(shù)邏輯單元的設(shè)計(jì)

算術(shù)邏輯單元主要完成8種指令的運(yùn)算和邏輯操作,本設(shè)計(jì)的指令系統(tǒng)由 HLT、SKZ、ADD、AND、XORR、LDA、STO和JMP這8條指令組成。其中,SKZ是一種判斷指令,若累加器的結(jié)果為0,則跳過下一條語句繼續(xù)執(zhí)行;如果為1,就執(zhí)行下一條指令。這條指令的設(shè)計(jì)使得設(shè)計(jì)的程序變得多樣化,因此在ALU的設(shè)計(jì)中需要輸出1個零標(biāo)志信號zero來與狀態(tài)機(jī)輸出的9位標(biāo)志信號共同配合才能使RISC工作。邏輯單元在QuartusⅡ中封裝的模塊如圖3所示。

圖3 算術(shù)邏輯單元模塊

2.4 程序計(jì)數(shù)器的設(shè)計(jì)

程序計(jì)數(shù)器(PC)的出現(xiàn)是程序設(shè)計(jì)的必然,因?yàn)樵谠O(shè)計(jì)程序時(shí)不可能都是順序執(zhí)行的,如果只有順序執(zhí)行的情況那么實(shí)現(xiàn)一些稍微復(fù)雜一點(diǎn)的功能就很困難。計(jì)算器不同于計(jì)算機(jī)就是因?yàn)橛?jì)算機(jī)可以按照程序的要求改變程序的執(zhí)行順序,例如在執(zhí)行 JMP(跳轉(zhuǎn)指令)的時(shí)候,需要形成新的指令地址。程序計(jì)數(shù)器在 QuartusⅡ中封裝的模塊如圖4所示。

圖4 程序計(jì)數(shù)器模塊

2.5 狀態(tài)機(jī)的設(shè)計(jì)

狀態(tài)機(jī)是RISC設(shè)計(jì)的核心,每個指令要成功運(yùn)行都必須依靠狀態(tài)機(jī)產(chǎn)生的標(biāo)志信號,因此狀態(tài)機(jī)設(shè)計(jì)的核心又是標(biāo)志信號的設(shè)計(jì)。一個指令周期占8個時(shí)鐘,即在一個狀態(tài)機(jī)內(nèi)部有8個狀態(tài),這8個狀態(tài)依次為:0:裝載 ROM 中的 11 bit指令;1:程序計(jì)數(shù)器加 1;2:空操作;3: 程序計(jì)數(shù)器加1,同時(shí)判斷指令是否為HLT指令;4:判斷指令并讀取 RAM中的數(shù)據(jù);5:執(zhí)行相應(yīng)的指令;6:空操作 ;7: 判 斷 指 令 是 否 為SKZ指令,若是則程序計(jì)數(shù)器加1,若不是則不作任何處理。在QuartusⅡ中封裝的狀態(tài)機(jī)模塊如圖5所示。

圖5 狀態(tài)機(jī)模塊

2.6 ROM和RAM的設(shè)計(jì)

在RISC中,ROM用來存儲程序代碼,在每個指令周期結(jié)束后,ROM的地址增1,同時(shí)加載一條指令,因此,ROM的地址時(shí)鐘應(yīng)該是狀態(tài)機(jī)的輸出狀態(tài)標(biāo)志rd_rom,在每個rd_rom的上升沿ROM的讀地址加1。在調(diào)試RISC的時(shí)候事先將指令代碼用mif文件的格式存儲在ROM中,mif文件中存放的指令代碼如圖6所示。

圖6 mif文件中存放的程序

在QuartusII的MegaWizardsTI中定制了一個32×10 bit的ROM,然后加載 mif文件,但是這樣仍不夠,還需要編寫一個模塊完成ROM的地址生成,編寫的Verilog HDL代碼如下:

將這個rom_data_gen封裝為一個模塊放在主block diagram中,如圖7所示。

RAM的設(shè)計(jì)相對于ROM而言要復(fù)雜很多,因?yàn)镽AM既要讀又要寫,同時(shí)還要在一些時(shí)刻形成新的地址。例如要求出一個這樣的序列,已經(jīng)給出了1和2兩個數(shù),后面求出的每個數(shù)都是前面兩個數(shù)的和(這樣的序列稱為費(fèi)波納序列),這樣求出的序列為:3,5,8,13,21,34,55,89,144…。 用本文設(shè)計(jì)的指令集來編寫匯編程序如下:

LOOP:LDA 1

STO 2

ADD 0

STO 1

LDA 2

STO 0

圖7 ROM和rom_data_gen模塊

詳細(xì)的分析結(jié)果如圖8所示。

RAM設(shè)計(jì)的難點(diǎn)就是在每個指令周期要完成數(shù)據(jù)的讀操作,在下一個周期要完成數(shù)據(jù)的寫操作,RAM中初始化的數(shù)據(jù)在一個指令周期之后會發(fā)生變化,因此,如何初始化RAM中的數(shù)據(jù)是一個關(guān)鍵問題。

圖8 求解序列的匯編程序分析

在求解一個問題時(shí)一定是對內(nèi)存中的數(shù)據(jù)進(jìn)行操作(即RISC中RAM的數(shù)據(jù)),因此,在每個程序的開始階段一定要讀取RAM中初始化的數(shù)據(jù),讀取完之后釋放RAM中的數(shù)據(jù)的讀控制權(quán),開始由ALU單元進(jìn)行RAM的數(shù)據(jù)讀寫操作。只有這樣才能不與RAM中初始化的數(shù)據(jù)發(fā)生沖突,保證程序運(yùn)行的正確。

因此可以再定制一個ROM來完成RAM中數(shù)據(jù)的初始化,在任何一個要往RAM中寫數(shù)據(jù)的時(shí)刻釋放該ROM的讀控制權(quán),這個動作由data_choose模塊來完成。data_ram_wr_rd即本文所設(shè)計(jì)的RAM,圖9即為這3個模塊與ALU的關(guān)系示意圖。

圖9 數(shù)據(jù)讀寫操作示意圖

data_ram_wr_rd模塊的Verilog HDL代碼如下:

在 QuartusⅡ中封裝的 data_ram_wr_rd模塊和RAM_wr_rd模塊如圖10所示。

3 RISC的測試

編寫完RISC的每個模塊后,在Block Diagram中連接各個模塊。

要求出144以內(nèi)的費(fèi)波納序列,這樣的程序運(yùn)行之后的正確結(jié)果為:1,2,3,5,8,13,21,34,55,89,144。

本文所設(shè)計(jì)的RISC如果能成功運(yùn)行這個程序,則證明本設(shè)計(jì)是正確的,至于一些細(xì)節(jié)的東西(如中斷控制、流水線操作、超標(biāo)量和cache操作等)再做考慮。

圖10 data_ram_wr_rd模塊和RAM_wr_rd模塊

圖11 求解序列程序的時(shí)序仿真結(jié)果

在ROM中裝載好已經(jīng)編寫好的匯編語言(為11 bit二進(jìn)制數(shù)),同時(shí)在RAM中裝載初始化數(shù)據(jù) 1、2(1和2分別對應(yīng)RAM中的地址0和1)。然后在QuartusⅡ中進(jìn)行時(shí)序仿真,得到的結(jié)果如圖11所示。

從圖11可以看出,程序運(yùn)行的結(jié)果完全正確,求出了要找的費(fèi)波納序列。

本文介紹了基于FPGA的RISC的設(shè)計(jì)和仿真的方法,通過編寫Verilog HDL語言來完成整個RISC模塊的搭建。通過分析匯編程序在FPGA中的運(yùn)行原理,并在QuartusⅡ中進(jìn)行時(shí)序仿真,驗(yàn)證了用FPGA設(shè)計(jì)RISC的可行性。

[1]夏宇聞.數(shù)字系統(tǒng)設(shè)計(jì)——Verilog實(shí)現(xiàn)[M].北京:高等教育出版社,2007.

[2]湯志忠,楊春武.開放式實(shí)驗(yàn) CPU設(shè)計(jì)[M]北京:清華大學(xué)出版社,2007.

[3]姜詠江.基于 QuartusⅡ的計(jì)算機(jī)核心設(shè)計(jì)[M]北京:清華大學(xué)出版社,2007.

[4]楊天怡.計(jì)算機(jī)硬件技術(shù)基礎(chǔ)[M]重慶:重慶大學(xué)出版社,2002.

[5]伯杰.計(jì)算機(jī)硬件及組成原理[M]北京:機(jī)械工業(yè)出版社,2006.

猜你喜歡
指令程序設(shè)計(jì)
聽我指令:大催眠術(shù)
試論我國未決羈押程序的立法完善
ARINC661顯控指令快速驗(yàn)證方法
LED照明產(chǎn)品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
瞞天過?!律O(shè)計(jì)萌到家
“程序猿”的生活什么樣
設(shè)計(jì)秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設(shè)計(jì)叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
英國與歐盟正式啟動“離婚”程序程序
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
主站蜘蛛池模板: 日韩成人高清无码| 日本精品影院| 国产美女免费| 亚洲色中色| 无码内射中文字幕岛国片| 97国内精品久久久久不卡| 91精品视频在线播放| 国产成人免费观看在线视频| 国产色图在线观看| 国产免费久久精品99re丫丫一| 国产精品自拍合集| 亚洲综合亚洲国产尤物| 欧美中文字幕在线二区| 午夜激情福利视频| a毛片在线免费观看| 欧美影院久久| 九九线精品视频在线观看| 国产成人久视频免费| 99热这里只有精品在线观看| 欧美精品黑人粗大| 欧美色综合网站| 国产亚洲精品91| 国产午夜不卡| 国产一级精品毛片基地| 免费观看亚洲人成网站| 在线视频亚洲欧美| 亚洲中久无码永久在线观看软件| 无码专区在线观看| 40岁成熟女人牲交片免费| 在线视频亚洲色图| 国产乱子精品一区二区在线观看| 九月婷婷亚洲综合在线| 久久精品一品道久久精品| 粗大猛烈进出高潮视频无码| 亚洲最新在线| 成AV人片一区二区三区久久| 日韩 欧美 小说 综合网 另类| 久久99国产综合精品1| 国产亚洲精久久久久久久91| 亚洲日韩高清在线亚洲专区| 欲色天天综合网| 免费 国产 无码久久久| 免费三A级毛片视频| 伊人久久久久久久| 综合色亚洲| 91精品国产自产在线观看| 人人妻人人澡人人爽欧美一区 | 久久国产精品无码hdav| 日韩无码黄色| 亚洲资源站av无码网址| 日韩不卡高清视频| 一级在线毛片| 91色在线观看| aⅴ免费在线观看| 国产欧美专区在线观看| 精品视频一区在线观看| 中文无码精品a∨在线观看| aa级毛片毛片免费观看久| 成人精品免费视频| 国产综合另类小说色区色噜噜 | 欧美无专区| 日本精品影院| 国产手机在线观看| 无码中文字幕乱码免费2| 中国国产一级毛片| 97人妻精品专区久久久久| 老司国产精品视频91| 一本色道久久88亚洲综合| 欧美日韩亚洲综合在线观看| 综合社区亚洲熟妇p| 亚洲一级色| 综合久久久久久久综合网| 国产成人精品免费av| 国产成人精品优优av| 欧美亚洲欧美区| 天堂亚洲网| 亚洲国产综合精品中文第一| 91毛片网| 亚洲专区一区二区在线观看| 亚洲电影天堂在线国语对白| 一级毛片免费的| 国产福利在线观看精品|