版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、作者:Pan Hon glia ng僅供個人學(xué)習(xí)基于FPGA的16位RISC_CP設(shè)計一.課題的來由和設(shè)計環(huán)境介紹通過學(xué)習(xí)夏宇聞教授的Verilog數(shù)字系統(tǒng)設(shè)計教程的學(xué)習(xí),想自己動腦 筋設(shè)計一個比較簡單的CPU, 方面熟悉了解基于FPGA開發(fā)的一些基本流程, 另一方面能夠進(jìn)一步加深自己計算機(jī)基礎(chǔ)理論的學(xué)習(xí), 并在此基礎(chǔ)上以后能夠進(jìn)行更高層次的設(shè)計。本文中的 CPU是通過Altera Quartusll9.0 , Modelsim6.4環(huán) 境下用Verilog語言進(jìn)行仿真。這個16位的CPU是在Verilog數(shù)字系統(tǒng)設(shè)計教 程中的CPU模型通過修改得到的。本文所有的程序代碼和測試文件詳見: nk
2、?shareid=329431 &uk=2467758158。RISC_CP結(jié)構(gòu)RISC_CPU是一個復(fù)雜的數(shù)字邏輯電路,但是其基本部件 的邏輯并不復(fù)雜, 可以將其分成8個基本部件來考慮:時鐘發(fā)生器,指令寄存器,累加器,算術(shù)邏 輯運(yùn)算單元,數(shù)據(jù)控制器,狀態(tài)控制器,程序計數(shù)器,地址多路器。各部件的連 接關(guān)系見圖1。其中時鐘發(fā)生器利用外來時鐘信號進(jìn)行分頻生成一系列時鐘信號, 送往其它部件用作時鐘信號。各部件之間的相互操作關(guān)系則由狀態(tài)控制器來控制。fetch addr11.0ir_addr11.0pc_addr11.0haltrdopcode3.0data7.01. 時鐘發(fā)生器時鐘發(fā)生器CLKSOU
3、RCE利用外來時鐘信號clk生成一系列時鐘信號 alu_clk,fetch,并送往cpu的其它部件。其中,fetch是控制信號,clk的6分頻信 號。當(dāng)fetch高電平時,使clk能觸發(fā)cpu控制器開始執(zhí)行一條指令;同時fetch 信號還將控制地址多路器輸出指令地址和數(shù)據(jù)地址。clk信號還用作指令寄存器, 累加器,狀態(tài)控制器的時鐘信號。圖2為時鐘發(fā)生器原理圖。時鐘發(fā)生器的波形 如圖3所示。圖2 時鐘發(fā)生器 圖3 時鐘發(fā)生器波形2. 指令寄存器指令寄存器是用于寄存指令的寄存器,如圖 4所示。圖4 指令寄存器結(jié)構(gòu)指令寄存器的觸發(fā)信號時clk,在clk的正沿觸發(fā)下,寄存器將數(shù)據(jù)總線送 來的指令存入1
4、6位的寄存器中,但并不是每個 clk的上升沿都寄存數(shù)據(jù)總線的 數(shù)據(jù),因為數(shù)據(jù)總線上有時傳輸指令,有時傳輸數(shù)據(jù)。什么時候寄存,什么時候 不寄存由CPU狀態(tài)控制器的loadr信號控制。loadr信號通過loadr 口輸入 到指令寄存器,復(fù)位后,指令寄存器被清為零。每條指令為16位。高4位是操作碼,低12位是地址(cpu的地址總線為 12位,尋址空間為4K字節(jié))。本設(shè)計的數(shù)據(jù)總線為16位,所以取指令只要一 次就可以了。3. 累加器累加器用于存放當(dāng)前的結(jié)果,它也是雙目運(yùn)算中的一個數(shù)據(jù)來源(如圖5)。 復(fù)位后,累加器的值是零。當(dāng)累加器通過load_acc信號時,在clk時鐘跳變沿時 就受到來自于數(shù)據(jù)總線
5、的數(shù)據(jù)。圖5累加器結(jié)構(gòu)4. 算術(shù)運(yùn)算器算術(shù)邏輯運(yùn)算單元如圖6所示,它根據(jù)輸入的16種不同的操作碼分別進(jìn)行 加減乘,與或非等基本操作運(yùn)算,利用這幾種基本運(yùn)算可以實現(xiàn)很多種其它運(yùn)算 以及邏輯判斷等操作。圖6 算術(shù)運(yùn)算器結(jié)構(gòu)5. 數(shù)據(jù)控制器數(shù)據(jù)控制器如圖7所示,其作用是控制累加器的數(shù)據(jù)輸出,由于數(shù)據(jù)總線 是各種操作時傳送數(shù)據(jù)的公共通道, 不同情況下傳送不同的內(nèi)容。有時要傳輸指 令,有時要傳送RAM區(qū)或接口的數(shù)據(jù)。累加器的數(shù)據(jù)只有在需要往 RAM區(qū)域或 端口寫時才允許輸出,否則應(yīng)呈現(xiàn)高阻態(tài),以允許其它部件使用數(shù)據(jù)總線。 所以 任何部件往總線上輸出數(shù)據(jù)時,都需要一控制信號。而此控制信號的啟停則由 cpu
6、狀態(tài)控制器輸出各信號控制決定。數(shù)據(jù)控制器何時輸出累加器的數(shù)據(jù)則由狀 態(tài)控制器輸出的控制信號data_ena決定。圖7數(shù)據(jù)控制器結(jié)構(gòu)6. 地址多路器地址多路器如圖8所示,它用于選擇輸出的地址是 PC地址還是數(shù)據(jù)/端口地 址。每個指令周期的前3個時鐘周期用于從ROM中讀取指令,輸出的應(yīng)是PC 地址,后3個時鐘周期用于RAM或端口的讀寫,該地址有指令給出。地址的選 擇輸出信號由時鐘信號的6分頻fetch提供。圖8 地址多路器結(jié)構(gòu)7. 程序計數(shù)器程序計數(shù)器如圖9所示。它用于提供指令地址,以便讀取指令。指令按 地址順序存放在存儲器中。有兩種途徑可形成指令地址;其一是順序執(zhí)行的情況, 其二是遇到要改變順序
7、執(zhí)行程序的情況,例如執(zhí)行 JMP指令后,需要形成新的 地址。下面就來詳細(xì)說明PC地址是如何建立的。圖9 程序計數(shù)器結(jié)構(gòu)復(fù)位后,指令指針為零,即每次CPU重新啟動將從ROM的零地址開始讀取 指令并執(zhí)行,每條指令執(zhí)行完,指向下一個指令。如果正在執(zhí)行的指令是跳轉(zhuǎn)語 句,這時CPU狀態(tài)控制器將會輸出load_pc信號,通過load 口進(jìn)入程序計數(shù)器, 程序計數(shù)器(pc_addr)將裝入目標(biāo)地址(ir_addrO )。8. 狀態(tài)控制器狀態(tài)控制器如圖10所示。圖10狀態(tài)控制器狀態(tài)機(jī)控制器接收復(fù)位信號rst,當(dāng)rst有效時,通過信號ena使其為零, 輸入到狀態(tài)機(jī)中,以停止?fàn)顟B(tài)機(jī)的工作。狀態(tài)機(jī)是cpu的控制核
8、心,用于產(chǎn)生一 系列的控制信號,啟動或停止某些部件。cpu何時進(jìn)行指令來讀寫I/O端口及 RAM區(qū)等操作,都是由狀態(tài)機(jī)來控制的。狀態(tài)機(jī)的當(dāng)前狀態(tài),由變量state記錄, state的值就是當(dāng)前這個指令周期中已過的時鐘數(shù)。指令周期是有6個時鐘周期組成,每個時鐘周期都要完成固定的操作,即(1) 第0個時鐘,cpu狀態(tài)控制器的輸出rd,data_ctl和loadr為高電平,inc_pc從0變?yōu)?故pc加1, ROM送來的指令代碼寄存在指令寄存器中。(2) 第1個時鐘空操作(3) 第2個時鐘。若操作符為HLT,則輸出信號HLT為高。如果操作符不為 HLT,除了 PC增1夕卜,其他各控制線輸出為零。(4
9、) 第 3 個時鐘,若操作符為 AND, ADD,XOR, LDA,NOT,MUL,SUB, OR, RL, RR, POP, PUSH,讀取相應(yīng)地址的數(shù)據(jù);若為 STO,輸出 累加器數(shù)據(jù)。(5) 第4個時鐘,若操作符為AND, ADD等算術(shù)運(yùn)算,算術(shù)運(yùn)算器就進(jìn)行相應(yīng) 的運(yùn)算;若操作符為LDA,就把數(shù)據(jù)通過算術(shù)運(yùn)算符送給累加器;若為SKZ, 先判斷累加器的值是否為0,如果為0 ,PC加1,否則保持原值;若為JMP, 鎖存目標(biāo)地址;若為STO,將數(shù)據(jù)寫入地址處。(6) 第5個時鐘空操作RISC_CP操作和時序一個微機(jī)系統(tǒng)為了完成自身的功能,需要CPU執(zhí)行許多操作。以下是RISC 的主操作:(1)
10、系統(tǒng)的復(fù)位和啟動操作(2)總線讀操作(3)總線寫操作下面詳細(xì)介紹每個操作,即系統(tǒng)的復(fù)位與啟動,總線的讀寫等操作。1. 系統(tǒng)的復(fù)位和啟動操作RISC的復(fù)位和啟動操作是通過reset引腳的信號觸發(fā)執(zhí)行。當(dāng)rst信號一進(jìn) 入高電平,RISCC_CPU就會結(jié)束先行操作,并且只要reset停留在高電平狀態(tài), cpu就維持在復(fù)位狀態(tài)。在復(fù)位狀態(tài),cpu各個內(nèi)部寄存器都被設(shè)有初值,全 部為零。數(shù)據(jù)總線為高阻態(tài),地址總線為 000H,所有控制信號均為無效狀態(tài), reset回到低電平后,接著到來的第一個 fetch上升沿獎啟動RISC_CPU開始工 作,從ROM的000處開始讀取指令并執(zhí)行相應(yīng)操作,波形見圖11
11、,虛線標(biāo)志處為RISC_CPU啟動工作的時刻。圖11 RISC_CPU的復(fù)位和啟動操作波形2. 總線的讀操作每個指令周期的前02個時鐘周期用于讀指令;第2.5個周期處,存儲器 或端口地址就輸入到地址總線上;第 35個時鐘周期,都信號rd有效,數(shù)據(jù)送 到數(shù)據(jù)總線上,以便累加器鎖存,或參與算術(shù),邏輯運(yùn)算。圖12為CPU從存儲器或端口讀取數(shù)據(jù)的時序。圖12RISC_CPU從存儲器或端口讀取數(shù)據(jù)的時序3. 總線寫操作每個指令周期的第2.5個時鐘周期處,寫的地址就建立了;第3個時鐘周期 輸出數(shù)據(jù);第4個時鐘周期輸出寫信號;至第5個時鐘結(jié)束,數(shù)據(jù)無效。圖13 為CPU對存儲器或端口寫數(shù)據(jù)的時序。圖 13
12、RISC_CPU四. RISC_CP尋址方式和指令系統(tǒng)RISC_CPU的指令格式一律為:高4位為指令,第12位為地址,它的指令 系統(tǒng)由16條指令組成。(1) HLT:停機(jī)操作。該操作將會空一個指令周期,即 6個時鐘周期(2) SKZ:為跳過下一條語句,該操作為先判斷當(dāng)前 alu中的結(jié)果是否為 零,若是零就跳過下一條語句,否則繼續(xù)執(zhí)行。(3)ADD相加:該操作將累加器中的值與地址所指的存儲器或端口的數(shù) 據(jù)相加,結(jié)果仍返回累加器中。(4) SUB相減:該操作將累加器中的值與地址所指的存儲器或端口的數(shù) 據(jù)相減,結(jié)果仍返回累加器中。(5)MUL相乘:該操作將累加器中的值與地址所指的存儲器或端口的數(shù) 據(jù)
13、相乘,結(jié)果仍返回累加器中。(6) OR或:該操作將累加器中的值與地址所指的存儲器或端口的數(shù)據(jù) 相或,結(jié)果仍返回累加器中。(7)AND與:該操作將累加器中的值與地址所指的存儲器或端口的 數(shù)據(jù)相與,結(jié)果仍返回累加器中。(8)XOR異或:該操作將累加器中的值與地址所指的存儲器或端口的 數(shù)據(jù)相異或,結(jié)果仍返回累加器中。(9)NOT非:該操作將地址所指的存儲器或端口的數(shù)據(jù)相加,結(jié)果仍返回累加器中。(10)STO寫數(shù)據(jù):該操作將累加器的數(shù)據(jù)放入指令中給出的地址。(11)LDA讀數(shù)據(jù):該操作將累加器的數(shù)據(jù)放入累加器。(12)RL左移:該操作將地址所指的存儲器或端口的數(shù)據(jù)向左移動一位, 結(jié)果仍返回累加器中。(
14、13)RR右移:該操作將地址所指的存儲器或端口的數(shù)據(jù)向右移動一位, 結(jié)果仍返回累加器中。(14)JMP無條件跳轉(zhuǎn):該操作將跳轉(zhuǎn)至指令給出的目標(biāo)地址,繼續(xù)運(yùn)行。(15)POP出棧:該操作是將累加器中的數(shù)據(jù)放入堆棧寄存器中。(16)PUSH進(jìn)棧:該操作是將堆棧寄存器中的數(shù)據(jù)放入到累加器中。RISC_CPU是16位微處理器,一律采用直接尋址方式,即數(shù)據(jù)總是放在存 儲器中,尋址單元的地址由指令直接給出。這是最簡單的尋址方式。五. RISC_CP模塊的調(diào)試1. RISC_CPU莫塊的前仿真為了對所設(shè)計的RISC_CPU模塊進(jìn)行驗證,需要把RISC_CPU包裝在一個模 式下,這樣其內(nèi)部連線就隱藏起來,從系
15、統(tǒng)的角度看顯得簡潔,見圖14.還需要 建立一些必要的外部模型,例如儲存程序用的ROM模型,存儲數(shù)據(jù)用的RAM模 型和地址譯碼器等。這些模型都可以用 Verilog HDL描述。由于不需要圖14 RISC_CPU及其外圍電路綜合成具體的電路,只要保證功能和接口信號正確就能用于仿真。 也就是說, 用虛擬器件來代替真實的器件對所設(shè)計的 RISC_CPU模塊進(jìn)行驗證,檢查各條指 令是否執(zhí)行正確,與外圍電路的數(shù)據(jù)交換是否正常。這種模型是很容易編寫的, 可在下面的仿真中來代替真實的器件,用于驗證RISC_CPU模塊是否能正確的運(yùn) 行裝入ROM和RAM的程序。在RISC_CPU的電路圖上加上這些外圍電路把有
16、關(guān) 的電路接通,如圖14所示,這根用真實的電路器件調(diào)試情況很類似。可以編寫調(diào)試的仿真測試程序 cuptop.v ,用于對以上所設(shè)計的RISC_CPU進(jìn) 行仿真測試。2. RISC_CPU模塊的綜合在對所設(shè)計的RISC_CPU模型進(jìn)行驗證后,如沒有發(fā)現(xiàn)問題就可以開始做下 一步的工作即綜合,綜合工作往往要分階段來進(jìn)行,這樣便于發(fā)現(xiàn)問題。所謂分階段是指:第一階段:先對構(gòu)成RISC_CPU模型的各個子模塊,如狀態(tài)控制機(jī)模塊,指 令寄存器模塊,算是邏輯運(yùn)算單元模塊等,分別加以綜合以檢查其可綜合性。 綜 合后及時進(jìn)行后仿真,這樣便于及時發(fā)現(xiàn)錯誤,及時該進(jìn)。第二階段:把要綜合的模塊從仿真測試信號模塊和虛擬外
17、圍電路模塊中分離 出來,組成一個獨立的模塊,其中包含可所有需要綜合的模塊。 然后給這個大模 塊起一個名字。要綜合的只是 RISC_CPU,并不包含虛擬外圍電路,可以給這一 模塊起一個名字,例如稱它為 RSIC_CHIP模塊。第三階段:把需要的綜合的模塊加載到綜合器,本文檔所使用的是quartusIl 綜合工具,選定的 FPGA是Altera的cycloneII。3. RISC_CPU莫塊的優(yōu)化和布局布線選定元件庫后就可以對所設(shè)計的 RISC_CPU模型進(jìn)行綜合,綜合工具是吧 Verilog RTL代碼通過綜合工具,產(chǎn)生一系列由現(xiàn)存元件的邏輯網(wǎng)表組成的文件。 在綜合工具上通過選擇項可以配置生成邏
18、輯表文件的格式。邏輯網(wǎng)表文件可以是:Verilog Netlist,VHDL Netlist或者電子設(shè)計交換格式,也就是在電路設(shè)計工業(yè)界 常說的EDIF格式文件。在產(chǎn)生了這些文件之后,就可以進(jìn)行綜合后的網(wǎng)表仿真。 網(wǎng)表仿真的Verilog模型只是對應(yīng)庫文件的行為模型,并不涉及器件和布局布線 的連接線延遲,因此與實際電路的行為還是存在著差異,這種仿真模型沒有明顯的延遲。為了知道實現(xiàn)電路真實的帶延遲行為,還必須進(jìn)行布局布線,以便生成實際電路和連接線帶延遲的行為模型。六. 總結(jié)通過這次的RISC_CPU的設(shè)計,自己收獲很大。了解到設(shè)計一個相對比較復(fù) 雜的電路是比較麻煩的,里面可能包含有很多的信號,如
19、果一個信號沒處理好, 就會導(dǎo)致設(shè)計的失敗。本次的RISC_CPU的設(shè)計,在夏老師的設(shè)計中改變了一些 參數(shù),思想?yún)⒖剂讼睦蠋煹模瑳]有多大的改變。雖然如此,但自己還是學(xué)到了一 些東西,深度了解到一個 CPU的工作原理和FPGA開發(fā)的流程。這對于以后自 己學(xué)習(xí)FPGA必定有很大的幫助。這段時間很珍惜學(xué)習(xí)FPGA的學(xué)習(xí)時間,因為自己以后將會有很長一段時間 不能學(xué)習(xí)FPGA現(xiàn)在已經(jīng)大三下學(xué)期了,我想要考研,而考研是要準(zhǔn)備很長的 一段時間的,但是為了以后能夠更深入的學(xué)習(xí) FPGA那半年多的時間是值得。 在這里學(xué)習(xí)有很多的問題只能自己去解決,沒有一個好的團(tuán)隊,所以我希望我考研之后能夠組成一個好的團(tuán)隊,來實現(xiàn)
20、自己的理想。版權(quán)申明本文部分內(nèi)容,包括文字、圖片、以及設(shè)計等在網(wǎng)上搜集整理。版權(quán)為潘宏亮個人所有This article in eludes someparts, in cludi ng text, pictures, and desig n. Copyright is Pan Hon glia ngs pers onal own ership.用戶可將本文的內(nèi)容或服務(wù)用于個人學(xué)習(xí)、研究或欣賞,以及其他非商業(yè)性或非盈利性用途,但同時應(yīng)遵守著作權(quán)法及其他相關(guān)法律 的規(guī)定,不得侵犯本網(wǎng)站及相關(guān)權(quán)利人的合法權(quán)利。除此以外,將本 文任何內(nèi)容或服務(wù)用于其他用途時,須征得本人及相關(guān)權(quán)利人的書面 許可,并支付報酬。Users may use the contents or services of this articlefor pers onal study, research or appreciati on, and other non-commercial or non-profit purposes, but at the same time, they shall abide by the provisi ons of copyright law
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024包工包料家居裝修合同范本
- 房子裝修合同書范本2024年
- 2024員工期權(quán)激勵合同股權(quán)期權(quán)激勵合同
- 廣州市存量房買賣合同樣本
- 廣東省揭陽市七年級上學(xué)期語文期中試卷3套【附答案】
- 大型超市店鋪承包合同
- 2024年簡單運(yùn)輸協(xié)議書范本
- 2024年餐廳轉(zhuǎn)讓合同范本
- 房產(chǎn)抵押貸款合同案例
- 《新媒體營銷概論》教案(3-4)新媒體的類型
- (醫(yī)學(xué)課件)DIC患者的護(hù)理
- 跨境數(shù)據(jù)流動的全球治理進(jìn)展、趨勢與中國路徑
- 【多旋翼無人機(jī)的組裝與調(diào)試5600字(論文)】
- 2023年遼陽市宏偉區(qū)事業(yè)單位考試真題
- 環(huán)境工程專業(yè)英語 課件
- 繼電保護(hù)動作分析報告課件
- 五年級數(shù)學(xué)上冊8解方程課件
- 教學(xué)工作中存在問題及整改措施
- 內(nèi)部項目跟投協(xié)議書(正)
- 鋼管靜壓樁質(zhì)量監(jiān)理細(xì)則
- 5000頭奶牛養(yǎng)殖場新建項目環(huán)境評估報告書
評論
0/150
提交評論