基于FPGA的CPU設(shè)計(jì)_第1頁(yè)
基于FPGA的CPU設(shè)計(jì)_第2頁(yè)
基于FPGA的CPU設(shè)計(jì)_第3頁(yè)
基于FPGA的CPU設(shè)計(jì)_第4頁(yè)
基于FPGA的CPU設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、編號(hào) 畢業(yè)設(shè)計(jì)論文課題名稱 基于FPGA的CPU設(shè)計(jì) 期 別 05 級(jí)二零零九年六月摘要:從CPU的總體結(jié)構(gòu)到局部功能的實(shí)現(xiàn)采用了自頂向下的設(shè)計(jì)方法和模塊化的設(shè)計(jì)思想,利用Xilinx公司的Spartan II系列FPGA,設(shè)計(jì)實(shí)現(xiàn)了八位CPU軟核。在FPGA內(nèi)部不僅實(shí)現(xiàn)了CPU必需的算術(shù)邏輯器、寄存器堆、指令緩沖、跳轉(zhuǎn)計(jì)數(shù)、指令集,而且針對(duì)FPGA內(nèi)部的結(jié)構(gòu)特點(diǎn)對(duì)設(shè)計(jì)進(jìn)行了地址和數(shù)據(jù)的優(yōu)化。關(guān)鍵字:Verilog HDL RISC_CPU FPGA目 錄2 RISC_CPU的結(jié)構(gòu)52.1 引言52.2 RISC_CPU結(jié)構(gòu)52.2.1 時(shí)鐘發(fā)生器52.2.2 指令寄存器62.2.3 累加器7

2、2.2.4 算術(shù)運(yùn)算器72.2.5 數(shù)據(jù)控制器82.2.6 地址多路器82.2.7 程序計(jì)數(shù)器92.2.8 狀態(tài)控制器92.2.9 外圍模塊103 RISC_CPU操作和時(shí)序123.1 系統(tǒng)的復(fù)位和啟動(dòng)操作123.2 總線讀操作123.3 總線寫操作124 RISC_CPU尋址方式和指令系統(tǒng)135 微處理器指令146 匯 編157 RISC_CPU模塊的調(diào)試167.1 RISC_CPU模塊的前仿真167.2 RISC_CPU模塊的綜合177.3 RISC_CPU模塊的優(yōu)化和布局布線238 總 結(jié)25致 謝26參考資料271 引言隨著數(shù)字通信和工業(yè)控制領(lǐng)域的高速發(fā)展,要求專用集成電路ASIC(A

3、pplication Specific IC)的功能越來越強(qiáng),功耗越來越低,生產(chǎn)周期越來越短,這些都對(duì)芯片設(shè)計(jì)提出了巨大的挑戰(zhàn),傳統(tǒng)的芯片設(shè)計(jì)方法已經(jīng)不能適應(yīng)復(fù)雜的應(yīng)用需求了。簡(jiǎn)單來說,SoC是一種將多個(gè)獨(dú)立的VLSI(超大規(guī)模集成電路)設(shè)計(jì)拼合在一起,來成某一應(yīng)用所需的全部功能的集成電路。SoC(System on a Chip)以其高集成度,低功耗等優(yōu)點(diǎn)越來越受歡迎。開發(fā)人員不必從單個(gè)邏輯門開始去設(shè)計(jì)ASIC,而是應(yīng)用己有IC芯片的功能模塊,稱為核(core),或知識(shí)產(chǎn)權(quán)(IP)宏單元進(jìn)行快速設(shè)計(jì),效率大為提高。CPU 的IP核是SoC技術(shù)的核心,開發(fā)出具有自主知識(shí)產(chǎn)權(quán)的CPU IP核對(duì)我

4、國(guó)在電子技術(shù)方面跟上世界先進(jìn)的步伐,提高信息產(chǎn)業(yè)在世界上的核心竟?fàn)幜τ兄卮笠饬x。通常一個(gè)完整的SOC集成了中央處理器核(CPU Core)、數(shù)字信號(hào)處理器核(DSP Core)、存儲(chǔ)器核(Memory Core)、射頻處理器核(RF Processor)、數(shù)模轉(zhuǎn)換器(DAC)和模數(shù)轉(zhuǎn)換器(ADC)等部分。在這其中,中央處理器核即CPU是最重要的組成部分,由它來完成簡(jiǎn)單的數(shù)據(jù)處理,內(nèi)存的調(diào)度,中斷處理等操作。2 RISC_CPU的結(jié)構(gòu)2.1 引言RISC_CPU是一個(gè)復(fù)雜的數(shù)字邏輯電路,但是它的基本部件的邏輯并不復(fù)雜。從第四章我們知道可把它分成八個(gè)基本部件:1)時(shí)鐘發(fā)生器2)指令寄存器3)累加器

5、4)RISC_CPU算術(shù)邏輯運(yùn)算單元5)數(shù)據(jù)控制器6)狀態(tài)控制器7)程序計(jì)數(shù)器8)地址多路器其中時(shí)鐘發(fā)生器利用外來時(shí)鐘信號(hào)進(jìn)行分頻生成一系列時(shí)鐘信號(hào),送往其他部件用作時(shí)鐘信號(hào)。各部件之間的相互操作關(guān)系則由狀態(tài)控制器來控制。各部件的具體結(jié)構(gòu)和邏輯關(guān)系在下面的小節(jié)里逐一進(jìn)行介紹。2.2 RISC_CPU結(jié)構(gòu) 時(shí)鐘發(fā)生器時(shí)鐘發(fā)生器 clkgen 利用外來時(shí)鐘信號(hào)clk 來生成一系列時(shí)鐘信號(hào)clk1、fetch、alu_clk 送往CPU的其他部件。其中fetch是外來時(shí)鐘 clk 的八分頻信號(hào)。利用fetch的上升沿來觸發(fā)CPU控制器開始執(zhí)行一條指令,同時(shí)fetch信號(hào)還將控制地址多路器輸出指令地址

6、和數(shù)據(jù)地址。clk1信號(hào)用作指令寄存器、累加器、狀態(tài)控制器的時(shí)鐘信號(hào)。alu_clk 則用于觸發(fā)算術(shù)邏輯運(yùn)算單元。時(shí)鐘發(fā)生器clkgen的波形見下圖所示:其Verilog HDL程序見下面的模塊: clkclk1clk2clk4fetchalu_clk圖 時(shí)鐘發(fā)生器clkgen的波形 指令寄存器顧名思義,指令寄存器用于寄存指令。指令寄存器的觸發(fā)時(shí)鐘是clk1,在clk1的正沿觸發(fā)下,寄存器將數(shù)據(jù)總線送來的指令存入高8位或低8位寄存器中。但并不是每個(gè)clk1的上升沿都寄存數(shù)據(jù)總線的數(shù)據(jù),因?yàn)閿?shù)據(jù)總線上有時(shí)傳輸指令,有時(shí)傳輸數(shù)據(jù)。什么時(shí)候寄存,什么時(shí)候不寄存由CPU狀態(tài)控制器的load_ir信號(hào)控

7、制。load_ir信號(hào)通過ena 口輸入到指令寄存器。復(fù)位后,指令寄存器被清為零。每條指令為2個(gè)字節(jié),即16位。高3位是操作碼,低13位是地址。(CPU的地址總線為13位,尋址空間為8K字節(jié)。)本設(shè)計(jì)的數(shù)據(jù)總線為8位,所以每條指令需取兩次。先取高8位,后取低8位。而當(dāng)前取的是高8位還是低8位,由變量state記錄。state為零表示取的高8位,存入高8位寄存器,同時(shí)將變量state置為1。下次再寄存時(shí),由于state為1,可知取的是低8位,存入低8位寄存器中。 累加器累加器用于存放當(dāng)前的結(jié)果,它也是雙目運(yùn)算其中一個(gè)數(shù)據(jù)來源。復(fù)位后,累加器的值是零。當(dāng)累加器通過ena口收到來自CPU狀態(tài)控制器l

8、oad_acc信號(hào)時(shí),在clk1時(shí)鐘正跳沿時(shí)就收到來自于數(shù)據(jù)總線的數(shù)據(jù)。 算術(shù)運(yùn)算器算術(shù)邏輯運(yùn)算單元 根據(jù)輸入的8種不同操作碼分別實(shí)現(xiàn)相應(yīng)的加、與、異或、跳轉(zhuǎn)等8種基本操作運(yùn)算。利用這幾種基本運(yùn)算可以實(shí)現(xiàn)很多種其它運(yùn)算以及邏輯判斷等操作。 數(shù)據(jù)控制器數(shù)據(jù)控制器的作用是控制累加器數(shù)據(jù)輸出,由于數(shù)據(jù)總線是各種操作時(shí)傳送數(shù)據(jù)的公共通道,不同的情況下傳送不同的內(nèi)容。有時(shí)要傳輸指令,有時(shí)要傳送RAM區(qū)或接口的數(shù)據(jù)。累加器的數(shù)據(jù)只有在需要往RAM區(qū)或端口寫時(shí)才允許輸出,否則應(yīng)呈現(xiàn)高阻態(tài),以允許其它部件使用數(shù)據(jù)總線。 所以任何部件往總線上輸出數(shù)據(jù)時(shí),都需要一控制信號(hào)。而此控制信號(hào)的啟、停,則由CPU狀態(tài)控制

9、器輸出的各信號(hào)控制決定。數(shù)據(jù)控制器何時(shí)輸出累加器的數(shù)據(jù)則由狀態(tài)控制器輸出的控制信號(hào)datactl_ena決定。 地址多路器地址多路器用于選擇輸出的地址是PC(程序計(jì)數(shù))地址還是數(shù)據(jù)/端口地址。每個(gè)指令周期的前4個(gè)時(shí)鐘周期用于從ROM中讀取指令,輸出的應(yīng)是PC地址。后4個(gè)時(shí)鐘周期用于對(duì)RAM或端口的讀寫,該地址由指令中給出。地址的選擇輸出信號(hào)由時(shí)鐘信號(hào)的8分頻信號(hào)fetch提供。 程序計(jì)數(shù)器程序計(jì)數(shù)器用于提供指令地址。以便讀取指令,指令按地址順序存放在存儲(chǔ)器中。有兩種途徑可形成指令地址:其一是順序執(zhí)行的情況,其二是遇到要改變順序執(zhí)行程序的情況,例如執(zhí)行JMP指令后,需要形成新的指令地址。下面就來

10、詳細(xì)說明PC地址是如何建立的。復(fù)位后,指令指針為零,即每次CPU重新啟動(dòng)將從ROM的零地址開始讀取指令并執(zhí)行。每條指令執(zhí)行完需2個(gè)時(shí)鐘,這時(shí)pc_addr已被增2,指向下一條指令。(因?yàn)槊織l指令占兩個(gè)字節(jié)。)如果正執(zhí)行的指令是跳轉(zhuǎn)語(yǔ)句,這時(shí)CPU狀態(tài)控制器將會(huì)輸出load_pc信號(hào),通過load口進(jìn)入程序計(jì)數(shù)器。程序計(jì)數(shù)器(pc_addr)將裝入目標(biāo)地址(ir_addr),而不是增2。 狀態(tài)控制器狀態(tài)控制器由兩部分組成:狀態(tài)機(jī)(上圖中的MACHINE部分)狀態(tài)控制器(上圖中的MACHINECTL部分)狀態(tài)機(jī)控制器接受復(fù)位信號(hào)RST,當(dāng)RST有效時(shí)通過信號(hào)ena使其為0,輸入到狀態(tài)機(jī)中停止?fàn)顟B(tài)機(jī)

11、的工作。狀態(tài)控制器的VerilogHDL程序見下面模塊:/-/module machinectl( ena, fetch, rst);output ena;input fetch, rst;reg ena;always (posedge fetch or posedge rst)beginif(rst)ena<=0;elseena<=1;endendmodule/-/狀態(tài)機(jī)是CPU的控制核心,用于產(chǎn)生一系列的控制信號(hào),啟動(dòng)或停止某些部件。CPU何時(shí)進(jìn)行讀指令讀寫I/O端口,RAM區(qū)等操作,都是由狀態(tài)機(jī)來控制的。狀態(tài)機(jī)的當(dāng)前狀態(tài),由變量state記錄,state的值就是當(dāng)前這個(gè)指令周

12、期中已經(jīng)過的時(shí)鐘數(shù)(從零計(jì)起)。 指令周期是由8個(gè)時(shí)鐘周期組成,每個(gè)時(shí)鐘周期都要完成固定的操作。1) 第0個(gè)時(shí)鐘,因?yàn)镃PU狀態(tài)控制器的輸出:rd和load_ir為高電平,其余均為低電平。指令寄存器寄存由ROM送來的高8位指令代碼。2) 第1個(gè)時(shí)鐘,與上一時(shí)鐘相比只是inc_pc從0變?yōu)?故PC增1,ROM送來低8位指令代碼,指令寄存器寄存該8位代碼。3) 第2個(gè)時(shí)鐘,空操作。4) 第3個(gè)時(shí)鐘,PC增1,指向下一條指令。若操作符為HLT,則輸出信號(hào)HLT為高。如果操作符不為HLT,除了PC增一外(指向下一條指令),其它各控制線輸出為零。5) 第4個(gè)時(shí)鐘,若操作符為AND、ADD、XOR或LDA

13、,讀相應(yīng)地址的數(shù)據(jù);若為JMP,將目的地址送給程序計(jì)數(shù)器;若為STO,輸出累加器數(shù)據(jù)。6) 第5個(gè)時(shí)鐘,若操作符為ANDD、ADD或XORR,算術(shù)運(yùn)算器就進(jìn)行相應(yīng)的運(yùn)算;若為L(zhǎng)DA,就把數(shù)據(jù)通過算術(shù)運(yùn)算器送給累加器;若為SKZ,先判斷累加器的值是否為0,如果為0,PC就增1,否則保持原值;若為JMP,鎖存目的地址;若為STO,將數(shù)據(jù)寫入地址處。7) 第6個(gè)時(shí)鐘,空操作。8) 第7個(gè)時(shí)鐘,若操作符為SKZ且累加器值為0,則PC值再增1,跳過一條指令,否則PC無變化。 外圍模塊為了對(duì)RISC_CPU進(jìn)行測(cè)試,需要有存儲(chǔ)測(cè)試程序的ROM和裝載數(shù)據(jù)的RAM、地址譯碼器。下面來簡(jiǎn)單介紹一下:1.地址譯碼

14、器module addr_decode( addr, rom_sel, ram_sel);output rom_sel, ram_sel;input 12:0 addr;reg rom_sel, ram_sel;always ( addr )begincasex(addr)13'b1_1xxx_xxxx_xxxx:rom_sel,ram_sel<=2'b01;13'b0_xxxx_xxxx_xxxx:rom_sel,ram_sel<=2'b10;13'b1_0xxx_xxxx_xxxx:rom_sel,ram_sel<=2'b1

15、0;default:rom_sel,ram_sel<=2'b00;endcaseendendmodule地址譯碼器用于產(chǎn)生選通信號(hào),選通ROM或RAM。FFFFH-1800H RAM1800H-0000H ROM2.RAM和ROMmodule ram( data, addr, ena, read, write );inout 7:0 data;input 9:0 addr;input ena;input read, write;reg 7:0 ram 10'h3ff:0;assign data = ( read && ena )? ramaddr : 8&

16、#39;hzz;always (posedge write)beginramaddr<=data;endendmodulemodule rom( data, addr, read, ena );output 7:0 data;input 12:0 addr;input read, ena;reg 7:0 memory 13'h1fff:0;wire 7:0 data;assign data= ( read && ena )? memoryaddr : 8'bzzzzzzzz;endmoduleROM用于裝載測(cè)試程序,可讀不可寫。RAM用于存放數(shù)據(jù),可讀可寫

17、。3 RISC_CPU操作和時(shí)序一個(gè)微機(jī)系統(tǒng)為了完成自身的功能,需要CPU執(zhí)行許多操作。以下是RISC_CPU的主要操作:(1)系統(tǒng)的復(fù)位和啟動(dòng)操作;(2)總線讀操作;(3)總線寫操作。下面詳細(xì)介紹一下每個(gè)操作,即系統(tǒng)的復(fù)位和啟動(dòng),總線的讀與寫等操作。3.1 系統(tǒng)的復(fù)位和啟動(dòng)操作RISC_CPU的復(fù)位和啟動(dòng)操作是通過reset引腳的信號(hào)觸發(fā)執(zhí)行的。當(dāng)reset信號(hào)一進(jìn)入高電平,RISC_CPU就會(huì)結(jié)束現(xiàn)行操作,并且只要reset停留在高電平狀態(tài),CPU就維持在復(fù)位狀態(tài)。在復(fù)位狀態(tài),CPU各內(nèi)部寄存器都被設(shè)為初值,全部為零。數(shù)據(jù)總線為高阻態(tài),地址總線為0000H,所有控制信號(hào)均為無效狀態(tài)。res

18、et回到低電平后,接著到來的第一個(gè)fetch上升沿將啟動(dòng)RISC_CPU開始工作,從ROM的000處開始讀取指令并執(zhí)行相應(yīng)操作。3.2 總線讀操作每個(gè)指令周期的前0-3個(gè)時(shí)鐘周期用于讀指令,在狀態(tài)控制器一節(jié)中已詳細(xì)講述,這里就不再重復(fù)。第3.5個(gè)周期處,存儲(chǔ)器或端口地址就輸出到地址總線上,第4-6個(gè)時(shí)鐘周期,讀信號(hào)rd有效,數(shù)據(jù)送到數(shù)據(jù)總線上,以備累加器鎖存,或參與算術(shù)、邏輯運(yùn)算。第7個(gè)時(shí)鐘周期,讀信號(hào)無效,第7.5個(gè)周期,地址總線輸出PC地址,為下一個(gè)指令做好準(zhǔn)備。3.3 總線寫操作每個(gè)指令周期的第3.5個(gè)時(shí)鐘周期處,寫的地址就建立了,第4個(gè)時(shí)鐘周期輸出數(shù)據(jù),第5個(gè)時(shí)鐘周期輸出寫信號(hào)。至第6

19、個(gè)時(shí)鐘結(jié)束,數(shù)據(jù)無效,第7.5時(shí)鐘地址輸出為PC地址,為下一個(gè)指令周期做好準(zhǔn)備。4 RISC_CPU尋址方式和指令系統(tǒng)RISC_CPU的指令格式一律為:它的指令系統(tǒng)僅由8條指令組成。1) HLT停機(jī)操作。該操作將空一個(gè)指令周期,即8個(gè)時(shí)鐘周期。2) SKZ為零跳過下一條語(yǔ)句。該操作先判斷當(dāng)前alu中的結(jié)果是否為零,若是零就跳過下一條語(yǔ)句,否則繼續(xù)執(zhí)行。3) ADD相加。該操作將累加器中的值與地址所指的存儲(chǔ)器或端口的數(shù)據(jù)相加,結(jié)果仍送回累加器中。4) AND相與。該操作將累加器的值與地址所指的存儲(chǔ)器或端口的數(shù)據(jù)相與,結(jié)果仍送回累加器中。5) XOR異或。該操作將累加器的值與指令中給出地址的數(shù)據(jù)異

20、或,結(jié)果仍送回累加器中。6) LDA讀數(shù)據(jù)。該操作將指令中給出地址的數(shù)據(jù)放入累加器。7) STO寫數(shù)據(jù)。該操作將累加器的數(shù)據(jù)放入指令中給出的地址。8) JMP無條件跳轉(zhuǎn)語(yǔ)句。該操作將跳轉(zhuǎn)至指令給出的目的地址,繼續(xù)執(zhí)行。RISC_CPU是8位微處理器,一律采用直接尋址方式,即數(shù)據(jù)總是放在存儲(chǔ)器中,尋址單元的地址由指令直接給出。這是最簡(jiǎn)單的尋址方式。5 微處理器指令數(shù)據(jù)處理指令:數(shù)據(jù)處理指令完成寄存器中數(shù)據(jù)的算術(shù)和邏輯操作,其他指令只是傳送數(shù)據(jù)和控制程序執(zhí)行的順序因此,數(shù)據(jù)處理指令是唯一可以修改數(shù)據(jù)值的指令,數(shù)據(jù)處理指令一般需兩個(gè)源操作數(shù),產(chǎn)生單個(gè)結(jié)果所有的操作數(shù)都是8位寬,或者來自寄存器,或者來

21、自指令中定義的立即數(shù)每一個(gè)源操作數(shù)寄存器和結(jié)果寄存器都在指令中獨(dú)立的指定。 圖1 讀寫指令時(shí)序數(shù)據(jù)傳送和控制轉(zhuǎn)移類指令:共有17條,不包括按布爾變量控制程序轉(zhuǎn)移的指令。其中有全存儲(chǔ)空間的長(zhǎng)調(diào)用、長(zhǎng)轉(zhuǎn)移和按2KB分塊的程序空間內(nèi)的絕對(duì)調(diào)用和絕對(duì)轉(zhuǎn)移;全空間的長(zhǎng)度相對(duì)轉(zhuǎn)移及一頁(yè)范圍內(nèi)的短相對(duì)轉(zhuǎn)移;還有條件轉(zhuǎn)移指令。這類指令用到的助記符有ACALL, AJMP, LCALL, LJMP, SJMP, M, JZ, JNZ, ONE,DJNZ??刂妻D(zhuǎn)移類指令主要用來修改1x指針從而達(dá)到對(duì)程序流的控制,所用到的寄存器主要有sp, pc, ir等寄存器。 指令由操作碼和操作數(shù)組成,取指令電路的目的就是把指

22、令碼和操作數(shù)分開。組成電路由如圖2所示。取指令電路由程序指針,程序指針解析模塊、ROM, IR(指令寄存器),控制器狀態(tài)寄存器組成。取指令指令的過程如下:PC指針的值經(jīng)過pc_mux模塊賦值,把ROM中的指令取出來,送到指令寄存器的數(shù)據(jù)輸入口。指令寄存器受狀態(tài)寄存器的控制,當(dāng)取指令信號(hào)有效時(shí),ROM中的指令碼被保存在指令寄存器中,然后經(jīng)控制器譯碼,產(chǎn)生控制信號(hào),對(duì)PC指針的增量加以控制取出下一條指令。 圖2 取指令電路 6 匯 編匯編程序是為了調(diào)試軟核而開發(fā)的,手工編寫機(jī)器碼很容易出錯(cuò)并且工作量很大。在調(diào)試過程中修改指令集時(shí),匯編程序也要作相應(yīng)的修改。所以要求編譯器的結(jié)構(gòu)簡(jiǎn)單性能可靠,在程序中

23、必要的地方可以用堆疊代碼方法實(shí)現(xiàn),不必考慮編程技巧和匯編器效率問題。匯編程序用于測(cè)試RISC CPU的基本指令集,如果CPU的各條指令執(zhí)行正確,停止在HLT指令處。如果程序在其它地址暫停運(yùn)行,則有一個(gè)指令出錯(cuò)。程序中,符號(hào)后的十六進(jìn)制表示存儲(chǔ)器的地址,每行的/后表示注釋。下面是一小段程序代碼,編譯好的匯編機(jī)器代碼裝入虛擬ROM,要參加運(yùn)算的數(shù)據(jù)裝入虛擬RAM就可以開始進(jìn)行仿真。 機(jī)器碼 地址 匯編助記符 注釋 00 /地址聲明 101_11000 /00 BEGIN: LDA DATA_2 0000_0001 011_11000 /02 AND DATA_3 0000_0010 100_110

24、00 /04 XOR DATA_2 0000_0001 001_00000 /06 SKZ 0000_0000 000_00000 /08 HLT /AND does't work7 RISC_CPU模塊的調(diào)試7.1 RISC_CPU模塊的前仿真為了對(duì)所設(shè)計(jì)的RISC_CPU模型進(jìn)行驗(yàn)證,需要把RISC_CPU包裝在一個(gè)模塊下,這樣其內(nèi)部連線就隱蔽起來,從系統(tǒng)的角度看就顯得簡(jiǎn)潔,見圖。還需要建立一些必要的外圍器件模型,例如儲(chǔ)存程序用的ROM模型、儲(chǔ)存數(shù)據(jù)用的RAM和地址譯碼器等。這些模型都可以用VerilogHDL描述,由于不需要綜合成具體的電路只要保證功能和接口信號(hào)正確就能用于仿真。

25、也就是說,用虛擬器件來代替真實(shí)的器件對(duì)所設(shè)計(jì)的RISC_CPU模型進(jìn)行驗(yàn)證,檢查各條指令是否執(zhí)行正確,與外圍電路的數(shù)據(jù)交換是否正常。這種模塊是很容易編寫的,上面節(jié)中的ROM和RAM就是簡(jiǎn)化的虛擬器件的例子,可在下面的仿真中來代替真實(shí)的器件,用于驗(yàn)證RISC_CPU模型是否能正確地運(yùn)行裝入ROM和RAM的程序。在RISC_CPU的電路圖上加上這些外圍電路把有關(guān)的電路接通,見圖;也可以用VerilogHDL模塊調(diào)用的方法把這些外圍電路的模塊連接上,這跟用真實(shí)的電路器件調(diào)試情況很類似。以下介紹前仿真的步驟,首先按照表示各模塊之間連線的電路圖編制測(cè)試文件,即定義Verilog的wire變量作為連線,連

26、接各功能模塊之間的引腳,并將輸入信號(hào)引入,輸出信號(hào)引出。如若需要,可加入必要的語(yǔ)句顯示提示信息。例如,risc_cpu 的測(cè)試文件就是cputop.v。其次,使用仿真軟件進(jìn)行仿真,由于不同的軟件使用方法可能有較大的差異,以下只簡(jiǎn)單的介紹modelsim的使用。在進(jìn)入modelsim的環(huán)境之后,在file項(xiàng)選擇change direction來確定編制的文件所在的目錄,然后在design項(xiàng)選擇或創(chuàng)建一個(gè)library,完成后即可開始編譯。在design項(xiàng)選compile項(xiàng),進(jìn)入編譯環(huán)境,選定要編譯的文件進(jìn)行編譯。Modelsim的編譯器語(yǔ)法檢查并不嚴(yán)格,有時(shí)會(huì)出現(xiàn)莫名其妙的邏輯錯(cuò)誤,書寫時(shí)應(yīng)注意

27、筆誤。完成編譯后,還是在compile項(xiàng),選擇load new design項(xiàng),選中編譯后提示的top module的名字,然后開始仿真。在view項(xiàng)可選波形顯示,信號(hào)選擇,功能和操作簡(jiǎn)單明了,這里就不一一贅述。7.2 RISC_CPU模塊的綜合在對(duì)所設(shè)計(jì)的RISC_CPU模型進(jìn)行驗(yàn)證后,如沒有發(fā)現(xiàn)問題就可開始做下一步的工作即綜合。綜合工作往往要分階段來進(jìn)行,這樣便于發(fā)現(xiàn)問題。所謂分階段就是指:第一階段:先對(duì)構(gòu)成RISC_CPU模型的各個(gè)子模塊,如狀態(tài)控制機(jī)模塊(包括machine模塊,machinectl模塊)、指令寄存器模塊(register模塊)、算術(shù)邏輯運(yùn)算單元模塊(alu模塊)等,分

28、別加以綜合以檢查其可綜合性,綜合后及時(shí)進(jìn)行后仿真,這樣便于及時(shí)發(fā)現(xiàn)錯(cuò)誤,及時(shí)改進(jìn)。第二階段:把要綜合的模塊從仿真測(cè)試信號(hào)模塊和虛擬外圍電路模型(如ROM模塊、RAM模塊、顯示部件模塊等)中分離出來,組成一個(gè)獨(dú)立的模塊,其中包括了所有需要綜合的模塊。然后給這個(gè)大模塊起一個(gè)名字,如本章中的例子,我們要綜合的只是RISC_CPU并不包括虛擬外圍電路,可以給這一模塊起一個(gè)名字,例如稱它為RSC_CHIP模塊。如用電路圖描述的話,我們還需給它的引腳加上標(biāo)準(zhǔn)的引腳部件并加標(biāo)記,見圖。第三階段:加載需要綜合的模塊到綜合器,本例所使用的綜合器是 Synplify, 選定的 FPGA 是 Altera FLEX

29、10K,針對(duì)它的庫(kù)進(jìn)行綜合。也可以使用QuartusII或其他綜合工具進(jìn)行綜合。綜合器綜合的結(jié)果會(huì)產(chǎn)生一系列的文件,其中有一個(gè)文件報(bào)告用了所使用的基本單元,各部件的時(shí)間參數(shù)以及綜合的過程。見下面的報(bào)告,它就是這個(gè)RISC_CPU芯片所用的綜合報(bào)告,綜合所用的庫(kù)為Altera FLEX10K系列的FPGA庫(kù),約定的失蹤頻率為80MHz。/-RISC_CPU芯片綜合結(jié)果報(bào)告開始-/#Program:Synplify Pro 8.1#OS:Windows_NT$ Start of Compile#Fri Jul 01 10:11:03 2009Synplify Verilog Compiler, v

30、ersion , Build 049R,built May 3 2005Copyright (C) 1994-2005, Synplicity Inc. All Rights ReservedI:”C:Program FileSynplicityfpga_81libalteraaltera.v”I:”C:Program FileSynplicityfpga_81libalteraaltera_mf.v”I:”C:Program FileSynplicityfpga_81libalteraaltera_lpm.v”I:”C:vlogexeex17_2cpu.v”I:”C: vlogexeex17

31、_2cpu.v”:“C:vlogexeex17_2clk_gen.v”I:”C: vlogexeex17_2cpu.v”:“C:vlogexeex17_2accum.v”Verilog syntax check successful!Compiler output is up to date. No re-compile necessarySelecting top level module cpuN:”C:vlogexeex17_2clk_gen.v”:2:7:2:13Synthesizing module clk_genN: CL201:“C:vlogexeex17_2clk_gen.v”

32、:18:0:18:5Trying to extract state machine for register stateExtracted state machine for register stateState machine has 9 reachable states with original encodings of:000000000000000100000010N:”C:vlogexeex17_2register.v”:4:7:4:14Synthesizing module registerN: CL201:“C:vlogexeex17_2machine.v”:44:0:44:

33、5Trying to extract state machine for register stateExtracted state machine for register stateState machine has 8 reachable states with original encodings of:000001010N:”C:vlogexeex17_2datactl.v”:11:7:11:13Synthesizing module datactlN:”C:vlogexeex17_2adr.v”:10:8:10:10Synthesizing module adrENDProcess

34、 took 0h:00m:01s realtime,0h:00m:01s cputime#Fri Jul 01 10:11:03 2009#Version8.1Synplicity Altera Technology Mapper,Version,Build 539R,Built May 6 2005Copyright(C)1994-2005,Synplicity Inc. All Rights ReservedAutomatic dissolve at startup in view:work.cup(verilog) of m_counter(counter)Automatic disso

35、lve at startup in view:work.cpu(verilog) of m_adr(adr)RTL optimization done.N:”C:vlogexeex17_2counter.v”:19:0:19:5Found counter in view:work.cpu(verilog) inst m_counter.pc_addr12:0Encoding state machine work.clk_gen(verilog)-state8:0Original code->new code00000000->00000000000000001->000000

36、011Encoding state machine work.machine_synplcty(verilog)-state7:0Original code->new code000->00000000001->00000011Writing Analyst data base C:vlogexeex17_2rev_1cpu.srmWriting Verilog Netlist and constraint filesWriting.vqm output for QuartusWriting Cross reference file for Quartus to C:vlog

37、exeex17_2rev_1cpu.xrfWriting Verilog Simulation filesFound clock cpuclk with period 12.50nsFound clock machineinc_pc_derived_clock with period 12.50ns#START OF TIMING REPORT#Timing Report written on Fri Jul 01 10:11:03 2009Top view: cpuRequested Frequency: 80.0MHzWire load mode: topPaths requested:

38、5Constraint File(s):N:MT195This timing report estimates place and route data.Please look at the place and route timing report for final timing.N:MT197Clock constraints cover only FF-to-FF paths associated with the clock.Performance Summary*Worst slack in design:10.158 Requested Estimated Requested E

39、stimate Clock ClockStarting Clock Frequency Frequency Period Period Slack Type Group.cpuclk 80.0MHz 427.0MHz 12.500 2.342 10.158 inferred Inferrd_clkgroup_0machineinc_pc_derived_clock 80.0MHz 427.0MHz 12.500 2.342 10.158 derived Inferrd_clkgroup_0 Clock Relationships* Detailed Report for Clock:cpucl

40、k Starting Points with Worst Slack* Starting ArrivalInstance Reference Type Pin Net Time Slack Clockm_accum.accum0 cpuclk stratixii_lcell_ff regout accum_0 0.095 10.158m_accum.accum1 cpuclk stratixii_lcell_ff regout accum_1 0.095 10.194 Ending Points with Worst Slack*Worst Path Information*Path info

41、rmation for path number 1:Requested Period: 12.500-Setup time: 0.403=Required time: 12.097-Propagation time: 1.939=Slack (critical): 10.158Number of logic level(s): 9Starting point: m_accum.accum0/regoutEnding point: m_alu.alu_out7/adatasdataThe start point is clocked by cpuclkrisingon pin clkThe en

42、d point is clocked by cpuclkrisingon pin clkInstance/Net Pin Pin Arrival No. ofName Type Name Dir Delay Time Fan Out(s)m_accum.accum0 stratixii_lcell_ff regout Out 0.095 0.095 accum_0 Net - - 0.621 - 4m_alu.un2_alu_out_carry_0 stratixii_lcell_comb dataf In 0.716 m_alu.un2_alu_out_carry_0 stratixii_l

43、cell_comb cout Out 0.312 1.028 un2_alu_out_carry_0 Net - - 0.000 1m_alu.un2_alu_out_carry_1 stratixii_lcell_comb cin In 1.028 - Total path delay(propagation time+setup) of 2.342 is 1.307(55.8%)logic and 1.035(44.2%) route. Detailed Report for Clock:machine_synplctyinc_pc_derived_clock Starting Point

44、s with Worst Slack*m_counter.pc_addr0 inc_pc_clock stratixii_lcell_ff regout pa_addr_c_0 0.095 10.661m_counter.pc_addr1 inc_pc_clock stratixii_lcell_ff regout pa_addr_c_1 0.095 10.697 Ending Points with Worst Slack*Path information for path number 1:Requested Period: 12.500-Setup time: 0.247=Require

45、d time: 12.253-Propagation time: 1.592=Slack (non-critical): 10.661Number of logic level(s): 13Starting point: m_accum.accum0/regoutEnding point: m_alu.alu_out12/datainThe start point is clocked by machine_synplctyinc_pc_derived_clockrisingon pin clkThe end point is clocked by machine_synplctyinc_pc

46、_derived_clock risingon pin clkInstance/Net Pin Pin Arrival No. ofName Type Name Dir Delay Time Fan Out(s)m_counter.pc_addr0 stratixii_lcell_ff regout Out 0.095 0.095 pc_addr_c_0 Net - - 0.621 - 3m_counter.pc_addr_c0 stratixii_lcell_comb datad In 0.716 m_counter.pc_addr_c0 stratixii_lcell_comb cout

47、Out 0.354 1.070 pc_addr_c0_cout Net - - 0.000 1 Total path delay (propagation time+setup)of 1.839 is 1.218(66.2%) logic and 0.621(33.8%) route.#END OF TIMING REPORT#START 0F AREA REPORT#Design xiew:work.cpu(verilog)Selecting part EP2S15F484C3N:FA174The following device usager repert estimates place and route data.Please look at the place and route report for final resource usage.Total combin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論