




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、這個CPU模型只是一個教學模型,設計也不一定 合理,只是從原理上說明了 一個簡單的RISC-CPU 的構成。我們在這里介紹它的目的是想說明: Verilog HDL仿真和綜合工具的潛力和本文介紹 的設計方法對軟硬件聯合設計是有重要意義的。 我們也希望這一章能引起對CPU原理和復雜數 字邏輯系統設計有興趣的同學的注意,加入我們 的設計隊伍。由于我們的經驗與學識有限,不足 之處敬請讀者指正。什么是CPU?cpu即中央處理單元的英文縮寫,它是計算機的核心 計算機進行信息處理可分為兩個步驟:1)將數據和程序(即指令序列)輸入到計算機的存儲器中:2)從第一條指令的地址起開始執行該程序,得到所需結果,結束
2、運行。CPU的作用是協調并控制計算機的各個部/ 件執行程序的指令序列,使其有條不紊地進行。因此它必( 須具有以下基本功能:a)取指令:當程序已在存儲器中時,首先根據程序入 口地址取出一條程序,為此要發出指令地址及控制信號。b)分析指令:即指令譯碼。是對當前取得的指令進行 分析,指出它要求什么操作,并產生相應的操作控制命令。c)執行指令:根據分析指令時產生的“操作 命令”形成相應的操作控制信號序列,通過 運算器,存儲器及輸入/輸岀設備的執行, 實現每條指令的功能,其中包括對運算結 果的處理以及下條指令地址的形成。將其功能進一步細化,可概括如下:1)能對指令進行譯碼并執行規定的動作;2)可以進行算
3、術和邏輯運算;3)能與存儲器,外設交換數據;4)提供整個系統所需要的控制;盡管各種CPU的性能指標和結構細節各 不相同,但它們所能完成的基本功能相 同。由功能分析,可知任何一種CPU內 部結構至少應包含下面這些部件:1)算術邏輯運算部件(ALU);2)累加器;3)程序計數器;4)指令寄存器,譯碼器;5)時序和控制部件。31RISC即精簡指令集計算機(Reduced Instruction SetJ Computer )禹縮寫。它是一種八十年代才出現的CPU,與 一般的CPU相比不僅只是簡化了指令系統,而且是通過 簡化指令系統使計算機的結構更加簡單合理,從而提高 了運算速度。從實現的途徑看,RI
4、SC.CPU與一般的CPU的 不同處在于:它的時序控制信號形成部件是用硬布線邏 輯實現的而不是采用微程序控制的方式。所謂硬布線邏 輯也就是用觸發器和邏輯門直接連線所構成的狀態機和 組合邏輯,故產生控制序列的速度比用微程序控制方式 快得多,因為這樣做省去了讀取微指令的時間。 RISC.CPU也包括上述這些部件,下面就詳細介紹一個簡 化的用于教學目的的RISC-CPU的可綜合VerilogHDL模型的設計和仿真過程。RISC CPU結構VRISC-CPU是一個復雜的數字邏輯電路,但是它詁 基本部件的邏輯并不復雜。可把它分成八個基本 部件:1)2)3)時鐘發生器指令寄存器累加器4)RISC CPU算
5、術邏輯運算單元5)數據控制器 6)狀態控制器7)程序計數器8)地址多路器DATAV7.0沁IRSTIelk1 fetchCLKM elk alu_clkclk genOFCODEVQrDdata<7.0>ena rst ckregisterdata<7.0>accumena rst dklDATA<70> ACCUM<7.0> alu_clk cpcr1二 2) :ZEROCLK1 ZEROFETCHRSTopc_iraddr< 15.0>accum<7.0>ALU OUT<7.0>zeroCONTROLOPC
6、ODE<2.0>INC.PCLOAD_ACC LOAD_PCRDWRLOADRHALTDATACTL ENALOAD ACCRDMWRrfIn<7.0>data<7.0>datactldata_enaDATA ENAfetchii_addr< 12.0>adrpc add【vl20>PC_ADDRvl20>eweaddr<12.0>ir_addr< 12.0>pc_addr< 12.0>loadclockcounterrstRISCCPU中各部件的相互連接關系TCADRHAIT 訐DAIAUtalA
7、DDR=m1時鐘發生器11CLK1CLKRESETCLKGENCLK1CLKALU.CLKRESETFETCHALU_CLKFETCH時鐘發生器時鐘發牛器clkgen利用外來時鐘信號elk來牛成一系列時鐘信號 clkl、fetch> alu_clk送往CPU的他部件。其ipfetch是外來時鐘 elk的八分頻信號。利用fetch的上升沿來觸發CPU控制器開始執 行一條指令,同時fetch信號還將控制地址多路器輸出指令地址和 數據地址。clkl信號用作指令寄存器、累加器、狀態控制器的時 鐘信號。alu.dk則用于觸發算術邏輯運算單元。時鐘發生器clkgen的波形module clk_gen
8、 (elk, reset, clkl, clk2, clk4, fetch, alu_cl input elk, reset;output clkl, clk2, clk4, fetch, alu_clk;wire elk, reset;reg clk2, clk4, fetch, alu_clk;reg7:0 state; parameter SI525354二 8 bOOOOOOOl,二 8' bOOOOOOlO,=8' bOOOOOlOO,二 8'bOOOOlOOO.55 二 8 bOOOlOOOO,56 = 8'bOOlOOOOO,57 = 8'
9、 bOlOOOOOO,58 = 8' blOOOOOOO, idle 二 8'bOOOOOOOO;assign clkl 二 clk; always (negedge elk)if (reset)begin clk2 <= 0; clk4 = 1; fetch <= 0; alu_clk = 0; state <= idle;endelsebegincase(state)SI: beginclk2 <= clk2; alu_clk <= alu_clk; state <= S2;endS2:beginclk2 <= clk2;clk4
10、<= clk4;alu elk <=elk;state <= S3;endS4:S4:S5:S3: beginclk2 <= clk2; state 二 S4;endbeginclk2二clk2;clk4clk4;fetch二fetch;sta te二S5;endbeginclk2 <= clk2; state 二 S6;endS6:begin clk2 clk4<=clk2;<=clk4;S7:state = S7;endbeginclk2 <= 、clk2;state <=endS8:beginclk2<=clk2;endclk4
11、fetchstate<=idle:stateclk4;fetch;SI;SI;defauIt:state <= idle;endcaseendendmodule2指令寄存器INSTRUCTION REGISTERDATA7:0LOAD IRCLK1RESETDATA7:0ENAopc iraddrs15:0CLK1REGISTERRSTOPCODE2:0IR_ADDR12:0顧名思義,指令寄存器用于寄存指令。?3ii指令寄存器的觸發時鐘是Clkl,在clkl的正沿觸發下, 寄存器將數據總線送來的指令存入高8位或低8位寄存器 中。但并不是每個clkl的上升沿都寄存數據總線的數 據,因
12、為數據總線上有時傳輸指令,有時傳輸數據。什 么時候寄存,什么時候不寄存由CPU狀態控制器的 load-ir信號控制。load_ir信號通過ena 口輸入到指令 寄存器。復位后,指令寄存器被清為零。每條指令為2個字節,即16位。高3位是操作碼,低13位 是地址。(CPU的地址總線為13位,尋址空間為8K字節。) 本設計的數據總線為8位,所以每條指令需取兩次。先取 高8位,后取低8位。而當前取的是高8位還是低8位,由 變量state記錄。state為零表示取的高8位,存入高8位 寄存器,同時將變量state置為1。下次再寄存時,由于 state為1,可知取的是低8位,存入低8位寄存器中。 modu
13、le register(opc_iraddr, data, ena, clkl, rst); output 15:0 opc_iraddr;input 7:0 data;input ena, clkl, rst:reg 15:0 opc_iraddr;reg state;always (posedge clkl)beginif (rst)beginopc_iraddr<=16, b0000_0000_0000_0000; state<=r bO;endelsebeginif (ena) /如果加載指令寄存器信號load_ir 到來,begin /分兩個時鐘每次8位加載指令寄存器 c
14、asex (state) /先高字節,后低字節rbO: beginopc_iraddr15:8<=data;state<=l; endrbl: begin opc_iraddr7:0<=data;state<=0;enddefault:beginopc_iraddr15:0=16 bxxxxxxxxxxxxxxxx; state<=r bx;endendcaseendelsestate<=r bO;endendendmodule3.累加器ALU_OUT7:0LOAD_ACCCLK1RSTDATA7:0ENAACCUM7:0CLK1ACCUMULATORRST
15、ACCUMULATORACCUM7:0累加器用于存放當前的結果,它也是雙目運算其中一個 數據來源。復位后,累加器的值是零。當累加器通過 ena 口收到來自CPU狀態控制器load_acc信號時,在clkl 時鐘正跳沿時就收到來自于數據總線的數據。clkl,rst);module accum( accum, data, ena, output 7: 0 accum;input 7: 0 data;input ena,clkl, rst;reg 7: 0 accum;always(posedge clkl)beginif (rst)accum<=8,b0000_0000;/Resetelse
16、 if (ena)/當CPU狀態控制器發出load.acc信號 accum<=data;/Accumulateendmodule4.算術運算器module alu (alu_out9 zero opcode);output 7: 0 alu-out;output zero;input 7: 0 data, accum;input 2: 0 opcode;input alu.clk;reg 7: 0 alu-out;parameter HLT =3*b000,SKZ =3*b001,ADD =3*b010,ANDD =3*b011,XORR =3*bl00,LDA =3*bl01,婪D=3
17、,bll0,MP =3,blll;da t a,accum, amklk?assign zero = jaccum;always (posedgealu.clk)begin 操作碼來自指令寄存器的輸出opc低3位casex (opcode)HLT: alu_out<=accum;SKZ: alu_out<=accum;ADD: alu_out<=data+accum;ANDD: alu_out<=data&accum;XORR: alu_out<=dataAaccum;LDA: alu_out<=data;STO: alu_out<=accum
18、;JMP: alu_out<=accum;default: alu_out<=8z bxxxx.xxxx;-endcaseendmodule5.數據控制器DATACTLALU_OUT7:0IN7:0DATA7:0DATACTL_ENADATA7:0DATA ENA數據控制器的作用是控制累加器數據輸出,由于數據總線是各種操 作時傳送數據的公共通道,不同的情況下傳送不同的內容。有時要 傳輸指令,有時要傳送RAM區或接口的數據。累加器的數據只有在 需要往RAM區或端口寫時才允許輸出,否則應呈現高阻態,以允許 其它部件使用數據總線。所以任何部件往總線上輸出數據時,都需 要一控制信號。而此控
19、制信號的啟、停,則由CPU狀態控制器輸出 的各信號控制決定。數據控制器何時輸出累加器的數據則由狀態控 制器輸出的控制信號datactl ena決定。module datact1 (data, in,data.ena); output 7: 0 data;input 7: 0 in;input data.ena;assign data = (data.ena)? In : 8Z bzzzz.zzzz;endmodulemoduleadr (addr5 fetch, ir_addr5 pc_addr);output 12: 0 addr;input 12: 0 ir_addr5 pc_addr;i
20、nput fetch;assign addr = fetch? pc_addr : ir.addr;endmodule7.程序計數器IR_ADDR12 :0LOAD_PCINC_PCRESETCOUNTERIR_ADDR12 :0LOADPC_ADDR12 :0CLOCKRSTPC_ADDR12 :0程序計數器用于提供指令地址。以便讀取指令,指令 按地址順序存放在存儲器中。有兩種途徑可形成指令 地址:其一是順序執行的情況,其二是遇到要改變順 序執行程序的情況,例如執行JMP指令后,需要形成 新的指令地址。復位后,指令指針為零,即每次CPU 重新啟動將從ROM的零地址開始讀取指令并執行。 每條指
21、令執行完需2個時鐘,這時pc_addr已被增2, 指向下一條指令。(因為每條指令占兩個字節。)如 果正執行的指令是跳轉語句,這時CPU狀態控制器將 會輸出load_pc信號,通過load 口進入程序計數器。程 序計數器(pc_addr)將裝入目標地址(iT_addT),而 不是增2。module counter ( pc_addr, ir_addr, load, clock, output 12:0 pc_addr;input 12:0 ir_addr;input load, clock, rst;reg 12:0 pc_addr;always ( posedge clock or posed
22、ge rst) beginif(rst)pc_addr<=13 * b0_0000_0000_0000; else if(load)pc_addr<=ir_addr;elsepc_addr <= pc_addr + 1;8.狀態控制器狀態控制器由兩部分組成:1. 狀態機(圖中的MACHINE部分)狀態控制器(圖中的MACHINECTL部分) 狀態機控制器接受復位信號RST,當RST有效時通過信號 ena使其為0,輸入到狀態機中停止狀態機的工作。module machinect1 ( ena, fetch, rst); output ena;input fetch, rst;r
23、eg ena;always (posedge fetch or posedge rst) beginif (rst) ena<=0;elseena<=l;end module 狀態機是CPU的控制核心,用于產生一系列的控制信號,、 啟動或停止某些部件。CPU何時進行讀指令讀寫I/O端 口,RAM區等操作,都是由狀態機來控制的。狀態機的當 前狀態,由變量state記錄,state的值就是當前這個指 令周期中已經過的時鐘數(從零計起)。指令周期是由 8個時鐘周期組成,每個時鐘周期都要完成固定的操作1)第0個時鐘,因為CPU狀態控制器的輸岀:rd和load.ir 為高電平,其余均為低電平
24、。指令寄存器寄存由ROM送來 的咼8位指令代碼。2)第1個時鐘,與上一時鐘相比只是inc.pc從0變為1故PC 增1, ROM送來低8位指令代碼,指令寄存器寄存該8位代 碼。3遵2企時鐘,空操作。4)第3個時鐘,PC增1,指向下一條指令。若操作符為 HLT,則輸出信號HLT為高。如果操作符不為HLT,除了 PC增一外(指向下一條指令),其它各控制線輸出為 丿一尸奇。5)第4個時鐘,若操作符為AND、ADD、XOR或LDA,讀相 應地址的數據;若為JMP,將目的地址送給程序計數 器;若為STO,輸出累加器數據。6)第5個時鐘,若操作符為ANDD、ADD或XORR,算術運 算器就進行相應的運算;若
25、為LDA,就把數據通過算術 運算器送給累加器;若為SKZ,先判斷累加器的值是否 為0,如果為0, PC就增1,否則保持原值;若為JMP, 鎖存目的地址;若為STO,將數據寫入地址處。7)第6個時鐘,空操作。8)第7個時鐘,若操作符為SKZ且累加器值為0,則PC值 再增1,跳過一條指令,否則PC無變化。load.pc,ena,rd, wr?rd, wr?module machine ( inc_pc? load.acc, rd, wr, load.ir,datactl.ena, halt, clkl, zero opcode );output inc.pc, load.acc, load.pc,
26、 load.ir;output datactl_ena? halt;input clkl, zero, ena;input 2: 0 opcode;reg inc.pc, load.acc, load.pc, load.ir;氐J) datactl_ena? halt;reg 2: 0 state;parameter HLTSKZDD =ANDD =XORR =LDA =STO =JMP =3 5000, =3 5001,3 5010,=3 'bOll, =3 5100, =3 5101, =3 5110, =3 'bill;/begin of task ctl_cycleal
27、ways ( negedge clkl )beginif ( !ena ) /接收到復位信號RST,進行復位操作 beginJstate<=3z bOOO;Cinc.pc,load.acc,load.pc,rd<=4Z bOOOO;wr,load.ir,datactl.ena,halt <=4Z bOOOO;(endjelserctl.cycle;end/begin of task ctl_cycletask ctl_cycle;/load high 8bits inbegin casex(state)3300:structionbegininc_pc/load_acc/lo
28、ad_pc/rcl<=4, bOOOl;wrjoad_ir/datactl_ena/halt<=4'b0100; state<=3,bOOl;end3'b 001:/pc in creased by one the n load low 8bits instruct! onbegininc_pcjoad_acc/load_pc/rd<=4, blOOl; wrjoad_ir/da+ac+l_ena/halt<=4'b0100; s+a+e<=3'b010;end3'bOlO:/idlebeginin c_pcjoad_
29、acc/load_pc/rd<=4, bOOOO; wrjoad_ir/da+ac+l_ena/halt<=4'b0000; s+a+e<=3'b011;一nd3,b011:/next instruction address setup 分析 p指令從這里>開始beginif (opcod已二二 HLT)/指令為暫停 HLTbegininc_pcjoad_accjoad_pc/rcl<=4,bl000; wrjoad_ir/datactl_ena/halt<=4,b0001; endelsebegininc_pcjoad_accjoad_pc
30、/rcl<=4,bl000; wr/load_ir/datactLena/halt<=4'b0000; endstate<=3Jbl00;nd3000: /fetch oprandbeginif (opcode 二二 JAAP)begininc_pcjoad_accjoacl_pc/rcl<=4,b0010;wr/load_ir/datactl_ena/halt<=4lb0000;endelse 訐(opcode二二ADD 11 opcode二二ANDD 11 opcod已二二XORR 11 o匹ode二二LDA) begininc_pcjoad_accj
31、oacl_pc/rcl<=4,b0001;wr/load_ir/datactl_ena/halt<=4,b0000;endelse if(opcode二二STO)begininc_ pcj oad_acc/load_pc/rd<=4,b0000; wrjoad_ir/datactl_ena/halt<=4,b0010;endelsebegininc_ pcj oad_acc/load_pc/rd<=4,b0000; wrjoad_ir/datactl_ena/halt<=4,b0000;endstate<=3,blOl;3'bl01:/oper
32、crrionbegin訐(opcode二二ADD| |o匹ode二二ANDD| |opcode=XORR| |opcode=LDA )begin/過一個時鐘后與累加器的內容進行運 算inc_pcjoad_accjoad_pc/rcl<=4,b0101;wrjoad_ir/datactl_ena/halt<=4,b0000; endelse if( opcode二二SKZ && zero二二 1) begininc_pcjoad_accjoad_pc/rcl<=4,bl000; wrjoad_ir/datactl_ena/halt<=4,b0000; en
33、delse 訐(opcode二二JMP)begininc_pc/load_acc/load_pc/rd<=4,bl010; wr/load_ir/datactl_ena/halt<=4,b0000; endelse if(opcode=STO)begin/過一個時鐘后把wr變1就可寫到RAM中inc_pc/load_acc/load_pc/rd<=4,b0000;wrjoad _ir/datactl_ena/halt<=4,bl010; endelsebegininc_pc/load_acc/load_pc/rd<=4,b0000;wrjoad _ir/datac
34、tl_ena/halt<=4, bOOOO; sndstate<=3'bll0;end/idle3010:beginIf ( opcode二二STO )begininc_pc/load_acc/load_pc/rd<=4,b0000;wrjoad_ir/datactl_ena/halt<=4,b0010; endelse 訐(opcode二二ADD| |opcode二二ANDD| | opcode二二XORR| |o匹ode二二LDA) begininc_pcjoad_accjoacl_pc/rcl<=4,b0001;wroad_ir,datacH_ena
35、,haltv4"b0000;endelsebegininc_pc,load_acc,load_pc,rdv4'b0000; wr/load_ir/datactl_ena/halt<=4,b0000; endstate<=3,blll;enddefault:begininc_pc/load_acc/load_pc/rcl<=4'b0000;(wrjoad_ir/datactl_ena/halt<=4'b0000; state<=3,bOOO;end endcase endQltosk/end of task ctl_cycle9 外
36、圍模塊為了對IUSC_CPU進行測試,需要有存儲 測試程序的ROM和裝載數據的RAM、地 址譯碼器。1.地址譯碼器module addr.decode ( addr, rom-sel, ram.sel); output rom-sel, ram.sel;input 12: 0 addr; reg rom-sel, ram-sel; always ( addr )begin地址譯碼器用于產生選通 信號,選通ROM或RAM。FFFFH-1800H RAM1800H-0000H ROMcasex (addr)13 bl-lxxx-xxxx-xxxx: rom»sel, ram.sel<
37、;=2Z bOl;13 bO_xxxx_xxxx_xxxx: rom.sel, ram-sel <=2Z blO;13 bl-Oxxx-xxxx-xxxx: rom-sel, ram»sel <=2Z blO; default: rom-sel, ram.sel <=2Z bOO;endcaseendendmodulemodule ram( data, addr, ena, read,inout 7: 0 data;input 9: 0 addr;input ena;input read, write;reg 7: 0 ram 10z h3f f: 0;assign
38、 data =( read && ena ) ?2. RAM和ROMram addrwrite );8Z hzz;always o) (posedge write)beginram addr<=data;endmodulemodule rom ( data, addr5 read, ena );output 7: 0 data;Uinput 12: 0 addr;input read, ena;reg 7: 0 memory 13z hlfff: 0;wire 7: 0 data;assign data= ( read && ena ) ? memory
39、addr : 8Z bzzzzzzzz;endmoduleROM用于裝載測試程序,可讀不可寫。RAM用于 薦做數據,可讀可寫。RISC_CPU操作和時序一個微機系統為了完成自身的功能,需要CPU執 行許多操作。以下是RISC.CPU的主要操作:1 系統的復位和啟動操作2. 總線讀操作3. 總線寫操作下面詳細介紹一下每個操作:1 系統的復位和啟動操作RISC CPU的復位和啟動操作是通過rst引劇 的信號觸發執行的。當rst信號一進入高電 平,RISC笑U就會結束現行操作,并且只 要rsi停留在高電平狀態,CPU就維持在復位 狀態。在復位狀態,CPU各內部寄存器都被 設為初值,全部為零。數據總線為高阻態, 地址總甥為0000H,所有控勒信號均為無效 狀態。rst回到低電平后,接著到來的第一個 fetch上升沿將啟動RISC CPU開始工作, 從ROM的000處開始讀取指令并執行相應操 作。波形圖見8.3.1 o虛線標志處為 RIS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年下沉市場消費金融趨勢分析及發展機遇報告
- 藥品管理相關管理制度
- 藥品銷售制度管理制度
- 藥店內部各項管理制度
- 藥店收銀制度管理制度
- 莆田社保流程管理制度
- 設備事故定損管理制度
- 設備變更作業管理制度
- 設備定期維護管理制度
- 設備材料采購管理制度
- 2025年北京市高考英語試卷真題(含答案解析)
- 2025年高考物理廣西卷試題真題及答案詳解(精校打印)
- 國家開放大學本科《商務英語4》一平臺機考真題及答案(第四套)
- 2024年湖北省中考地理生物試卷(含答案)
- 2024年甘肅省天水市中考生物·地理試題卷(含答案)
- GA 1016-2012槍支(彈藥)庫室風險等級劃分與安全防范要求
- 2022年小學六年級畢業監測科學素養測試題試卷 (含答題卡)
- 行政賠償與行政補償課件
- 繼電器接觸器控制的基本線路.ppt
- 最新國家開放大學電大《國際私法》機考3套真題題庫及答案2
- (完整版)《普通心理學-彭聃齡》知識要點
評論
0/150
提交評論