版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Verilog HDL精簡(jiǎn)指令集計(jì)算機(jī)簡(jiǎn)介nRISC RISC 即精簡(jiǎn)指令集計(jì)算機(jī)(即精簡(jiǎn)指令集計(jì)算機(jī)(Reduced Instruction Set ComputerReduced Instruction Set Computer)的縮寫(xiě)。它是一種八十年代才出現(xiàn)的的縮寫(xiě)。它是一種八十年代才出現(xiàn)的CPUCPU,與一般的與一般的CPU CPU 相比不僅相比不僅只是簡(jiǎn)化了指令系統(tǒng),而且是通過(guò)簡(jiǎn)化指令系統(tǒng)使計(jì)算機(jī)的結(jié)構(gòu)更只是簡(jiǎn)化了指令系統(tǒng),而且是通過(guò)簡(jiǎn)化指令系統(tǒng)使計(jì)算機(jī)的結(jié)構(gòu)更加簡(jiǎn)單合理,從而提高了運(yùn)算速度。從實(shí)現(xiàn)的途徑看,加簡(jiǎn)單合理,從而提高了運(yùn)算速度。從實(shí)現(xiàn)的途徑看,RISC_CPURISC_C
2、PU與與一般的一般的CPUCPU的不同處在于:它的時(shí)序控制信號(hào)形成部件是用硬布線的不同處在于:它的時(shí)序控制信號(hào)形成部件是用硬布線邏輯實(shí)現(xiàn)的而不是采用微程序控制的方式。所謂硬布線邏輯也就是邏輯實(shí)現(xiàn)的而不是采用微程序控制的方式。所謂硬布線邏輯也就是用觸發(fā)器和邏輯門(mén)直接連線所構(gòu)成的狀態(tài)機(jī)和組合邏輯,故產(chǎn)生控用觸發(fā)器和邏輯門(mén)直接連線所構(gòu)成的狀態(tài)機(jī)和組合邏輯,故產(chǎn)生控制序列的速度比用制序列的速度比用微程序控制方式微程序控制方式快得多,因?yàn)檫@樣做省去了讀取快得多,因?yàn)檫@樣做省去了讀取微指令的時(shí)微指令的時(shí)間間RISC CPURISC CPU結(jié)構(gòu)結(jié)構(gòu) RISC_CPURISC_CPU是一個(gè)復(fù)雜的數(shù)字邏輯電路,
3、但是它的基本部件的邏輯并不復(fù)是一個(gè)復(fù)雜的數(shù)字邏輯電路,但是它的基本部件的邏輯并不復(fù)雜??砂阉殖砂藗€(gè)基本部件:雜??砂阉殖砂藗€(gè)基本部件: 1) 1) 時(shí)鐘發(fā)生器時(shí)鐘發(fā)生器 2) 2) 指令寄存器指令寄存器 3) 3) 累加器累加器 4) 4) RISC CPURISC CPU算術(shù)邏輯運(yùn)算單元算術(shù)邏輯運(yùn)算單元 5) 5) 數(shù)據(jù)控制器數(shù)據(jù)控制器 6) 6) 狀態(tài)控制器狀態(tài)控制器 7) 7) 程序計(jì)數(shù)器程序計(jì)數(shù)器 8) 8) 地址多路地址多路器器 9 9)存儲(chǔ)器()存儲(chǔ)器(RAM,ROM)RAM,ROM)主要特征: 8位數(shù)據(jù)、13位地址、8條指令,每條指令8Tclk指令格式:D15-D13D12-
4、D0操作碼地址碼1) HLT停機(jī)操作。該操作將空一個(gè)指令周期,即8個(gè)時(shí)鐘周期。2) SKZ為零跳過(guò)下一條語(yǔ)句。該操作先判斷當(dāng)前alu中的結(jié)果是否為零,若是零就跳過(guò)下一條語(yǔ)句,否則繼續(xù)執(zhí)行。3) ADD相加。該操作將累加器中的值與地址所指的存儲(chǔ)器或端口的數(shù)據(jù)相加,結(jié)果仍送回累加器中。4) AND相與。該操作將累加器的值與地址所指的存儲(chǔ)器或端口的數(shù)據(jù)相與,結(jié)果仍送回累加器中。5) XOR異或。該操作將累加器的值與指令中給出地址的數(shù)據(jù)異或,結(jié)果仍送回累加器中。6) LDA讀數(shù)據(jù)。該操作將指令中給出地址的數(shù)據(jù)放入累加器。7) STO寫(xiě)數(shù)據(jù)。該操作將累加器的數(shù)據(jù)放入指令中給出的地址。8) JMP無(wú)條件跳
5、轉(zhuǎn)語(yǔ)句。該操作將跳轉(zhuǎn)至指令給出的目的地址,繼續(xù)執(zhí)行。 RISC_CPU是8位微處理器,一律采用直接尋址方式,即數(shù)據(jù)總是放在存儲(chǔ)器中,尋址單元的地址由指令直接給出。這是最簡(jiǎn)單的尋址方式。n控制器在clk1下降沿輸出控制信號(hào)。PC隨inc_pc上升沿動(dòng)作(即clk1下降沿)n其它部件在clk1上升沿動(dòng)作。即在Ti中間輸出控制信號(hào),在Ti結(jié)束時(shí)動(dòng)作。n如取高8位指令:rd=1,load_ir=1,而ir鎖存在T1上升沿鎖存(即T0結(jié)束時(shí))clk1T0T1T2T3T4T5T6T7fetchrdload_irADDRinc_pc時(shí) 序alu_clkCPU執(zhí)行指令過(guò)程:T0: 狀態(tài)控制器輸出rd=1,lo
6、ad_ir=1,另state=0,由M讀1字節(jié),在T0結(jié)束時(shí)鎖存到ir高8位。即取高字節(jié)指令。T1: inc_pc=1使地址加1, rd=1,load_ir=1,另state=1,由M讀1字節(jié),在T1結(jié)束時(shí)鎖存到ir低8位。即取低字節(jié)指令。T2: 空操作T3: inc_pc=1。若opcord=HLT, 則HALT=1;T4: 若opcord=ADD,AND,XOR,LDA,則rd=1,根據(jù)ir_addr讀Mem 若opcord=JMP,則load_pc=1 若opcord=STO,則datactl_ena=1,將accum通過(guò)alu _out送DBT5: 若opcord=ADD,AND,XO
7、R, LDA,則rd=1(繼續(xù)讀Mem)且load_acc=1,由于acc已送alu, alu操作結(jié)果在T5結(jié)束時(shí)鎖存到acc; 若opcord=STO,則 datactl_ena =1(繼續(xù)將accum通過(guò)alu _out送DB )且wr=1,在T5結(jié)束時(shí)寫(xiě)到Mem;若opcord=JMP,則inc_pc=1,load_pc=1,在inc_pc 上升沿鎖存ir_addr到pc;若opcord=SKZ且acc=0 ,則inc_pc=1。T6:空操作T7:若opcord=SKZ且acc=0,則inc_pc=1,即跳過(guò)一條指令。DATA ALU_OUTACCUM zeroalu_clk alu o
8、pcodedata opc_iraddrenarst registerclk1data accumena accumrstclk1 CLK1 INC_PCZERO LOAD_ACCFETCH LOAD_PCRST CONTROL RD WR OPCODE LOAD_IR HALT DATACTL_ENA In data datactldata_ena fetch addrir_addr adrpc_addrir_addr pc_addrloadclock counterrst clk 1fetch clk alu_clk clk_genDATAIRSTICLKI OPCODE IR_ADDR
9、ALU_OUTACCUMZEROOPCODEDATA_ENAPC_ADDRADDRDATAIHALTILOAD_IRIR_ADDRWRIRDILOAD_ACCINC_PCLOAD_PCRISCCPU中各部件的相互連接關(guān)系中各部件的相互連接關(guān)系RTL 視圖頂層模塊n代碼:module CPU(zero,clk,reset,halt,rd,wr,ir_addr,addr,data,inc_pc,rom_sel,ram_sel, accum,load_acc,datactl_ena,opcode,alu_clk);ninput clk,reset;noutput zero,rd,wr, halt,i
10、nc_pc,rom_sel,ram_sel,load_acc,datactl_ena,alu_clk;noutput12:0ir_addr,addr;noutput2:0opcode;noutput 7:0data,accum;nwire clk,reset,halt;nwire 7:0 data;nwire 12:0 addr;nwire rd,wr;nwire clk1,fetch,alu_clk;nwire 2:0 opcode;nwire 12:0 ir_addr,pc_addr;nwire 7:0 alu_out,accum;nwire zero,inc_pc,load_acc,lo
11、ad_pc,load_ir,data_ena,contr_ena;nwire 15:0opc_iraddr;nassign opcode=opc_iraddr15:13;nassign ir_addr=opc_iraddr12:0;nclk_gen m_clk_gen(.clk(clk), .reset(reset),.clk1(clk1),.clk2(clk2),n.clk4(clk4),.fetch(fetch),.alu_clk(alu_clk);代碼nregister m_register(.opc_iraddr(opc_iraddr),.data(data) ,.ena(load_i
12、r),n.clk1(clk1),.rst(reset);naccum m_accum(.accum(accum),.data(alu_out),.ena(load_acc),n.clk1(clk1),.rst(reset);nalu m_alu(.alu_out(alu_out),.zero(zero),.opcode(opcode),n.data(data),.accum(accum),.alu_clk(alu_clk);nmachinect m_machinect(.ena(ena),.fetch(fetch),.rst(reset);nmachine m_machine(.inc_pc(
13、inc_pc), .load_acc(load_acc ), .load_pc(load_pc ),n.rd(rd),.wr(wr),.load_ir(load_ir ),.datactl_ena(datactl_ena ),.halt (halt), .clk1 (clk1), .zero (zero), .ena (ena ),.opcode(opcode);ndatactl m_datactl(.data(data), .in (alu_out),.data_ena(datactl_ena);ncounter m_counter(.pc_addr(pc_addr ),.ir_addr(i
14、r_addr ),.load(load_pc),n.clock(inc_pc),.rst(reset);/.op(opc_iraddr12:0),nadr m_adr(.addr (addr),.fetch (fetch),.ir_addr (ir_addr ),.pc_addr (pc_addr );naddr_decode addr_decode1(addr,rom_sel,ram_sel);nram ram1(.data(data),.addr(addr),.ena(ram_sel),.read(rd),.write(wr);nrom rom1(.data(data),.addr(add
15、r),.read(rd),.ena(rom_sel); endmodule時(shí)鐘發(fā)生器時(shí)鐘發(fā)生器時(shí)鐘發(fā)生器 clkgen 利用外來(lái)時(shí)鐘信號(hào)clk 來(lái)生成一系列時(shí)鐘信號(hào)clk1、fetch、alu_clk 送往CPU的其他部件。其中fetch是外來(lái)時(shí)鐘 clk 的八分頻信號(hào)。利用fetch的上升沿來(lái)觸發(fā)CPU控制器開(kāi)始執(zhí)行一條指令,同時(shí)fetch信號(hào)還將控制地址多路器輸出指令地址和數(shù)據(jù)地址。clk1信號(hào)用作指令寄存器、累加器、狀態(tài)控制器的時(shí)鐘信號(hào)。alu_clk 則用于觸發(fā)算術(shù)邏輯運(yùn)算單元。 CLKCLK1CLKGENALU_CLKFETCHCLKCLK1ALU_CLK FETCH時(shí)鐘發(fā)生器RES
16、ETRESET clkclk1clk2clk4fetchalu_clk時(shí)鐘發(fā)生器clkgen的波形REL視圖時(shí)鐘發(fā)生器代碼nmodule clk_gen (clk,reset,clk1,clk2,clk4,fetch,alu_clk);ninput clk,reset;noutput clk1,clk2,clk4,fetch,alu_clk;nwire clk,reset;nreg clk2,clk4,fetch,alu_clk;nreg7:0 state;nparameter S1 = 8b00000001,n S2 = 8b00000010,n S3 = 8b00000100,n S4 =
17、 8b00001000,n S5 = 8b00010000,n S6 = 8b00100000,n S7 = 8b01000000,n S8 = 8b10000000,n idle = 8b00000000;n assign clk1 = clk;nalways (negedge clk)n if(reset)n beginn clk2 = 0;n clk4 = 1;n fetch = 0;n alu_clk = 0;n state = idle;n 代碼n endn elsen begin n case(state)n S1: beginn clk2 = clk2;n alu_clk = a
18、lu_clk; n state = S2;n endn S2: beginn clk2 = clk2;n clk4 = clk4;n alu_clk = alu_clk;n state = S3;n end n S3: begin n clk2 = clk2;n state = S4;n endn S4: beginn clk2 = clk2;n clk4 = clk4;n fetch = fetch;n state = S5;n endn S5: beginn clk2 = clk2;n state = S6;n end n S6:n beginn clk2 = clk2;n clk4 =
19、clk4;n state = S7;n endn S7:n beginn clk2 = clk2;n state = S8;n endn n S8:n beginn clk2 = clk2;n clk4 = clk4;n fetch = fetch;n state = S1;n endn idle: state = S1; n default: state = idle; n endcasen endnendmodule代碼n endn S5: beginn clk2 = clk2;n state = S6;n end n S6:n beginn clk2 = clk2;n clk4 = cl
20、k4;n state = S7;n endn S7:n beginn clk2 = clk2;n state = S8;n endn n S8:n beginn clk2 = clk2;n clk4 = clk4;n fetch = fetch;n state = S1;n endn idle: state = S1; n default: state = idle; n endcasen endnendmodule指令寄存器指令寄存器 顧名思義,指令寄存器用于寄存指令。顧名思義,指令寄存器用于寄存指令。指令寄存器的觸發(fā)時(shí)鐘是指令寄存器的觸發(fā)時(shí)鐘是clk1clk1,在在clk1clk1的正沿觸
21、發(fā)下,寄存器將數(shù)據(jù)總線送來(lái)的指令的正沿觸發(fā)下,寄存器將數(shù)據(jù)總線送來(lái)的指令存入高存入高8 8位或低位或低8 8位寄存器中。但并不是每個(gè)位寄存器中。但并不是每個(gè)clk1clk1的上升沿都寄存數(shù)據(jù)總線的數(shù)據(jù),因的上升沿都寄存數(shù)據(jù)總線的數(shù)據(jù),因?yàn)閿?shù)據(jù)總線上有時(shí)傳輸指令,有時(shí)傳輸數(shù)據(jù)。什么時(shí)候寄存,什么時(shí)候不寄存由為數(shù)據(jù)總線上有時(shí)傳輸指令,有時(shí)傳輸數(shù)據(jù)。什么時(shí)候寄存,什么時(shí)候不寄存由CPUCPU狀狀態(tài)控制器的態(tài)控制器的load_irload_ir信號(hào)控制。信號(hào)控制。load_irload_ir信號(hào)通過(guò)信號(hào)通過(guò)ena ena 口輸入到指令寄存器。復(fù)位后,口輸入到指令寄存器。復(fù)位后,指令寄存器被清為零。指令
22、寄存器被清為零。每條指令為每條指令為2 2個(gè)字節(jié),即個(gè)字節(jié),即1616位。高位。高3 3位是操作碼,低位是操作碼,低1313位是地址。(位是地址。(CPUCPU的地址總線為的地址總線為1313位,尋址空間為位,尋址空間為8 8K K字節(jié)。)本設(shè)計(jì)的數(shù)據(jù)總線為字節(jié)。)本設(shè)計(jì)的數(shù)據(jù)總線為8 8位,所以每條指令需取兩次。先取高位,所以每條指令需取兩次。先取高8 8位,后取低位,后取低8 8位。而當(dāng)前取的是高位。而當(dāng)前取的是高8 8位還是低位還是低8 8位,由變量位,由變量statestate記錄。記錄。statestate為零表示取為零表示取的高的高8 8位,存入高位,存入高8 8位寄存器,同時(shí)將變
23、量位寄存器,同時(shí)將變量statestate置為置為1 1。下次再寄存時(shí),由于。下次再寄存時(shí),由于statestate為為1 1,可知取的是低可知取的是低8 8位,存入低位,存入低8 8位寄存器中。位寄存器中。RTL視圖代碼nmodule register(opc_iraddr,data,ena,clk1,rst);noutput 15:0 opc_iraddr;ninput 7:0 data;ninput ena, clk1, rst;nreg 15:0 opc_iraddr;nreg state;nalways (posedge clk1)n beginn if(rst)n beginn o
24、pc_iraddr=16b0000_0000_0000_0000;n state=1b0;n endnelsenbeginn if(ena) /如果加載指令寄存器信號(hào)load_ir到來(lái),n begin /分兩個(gè)時(shí)鐘每次8位加載指令寄存器n casex(state) /先高字節(jié),后低字節(jié)n 1b0: beginn opc_iraddr15:8=data;n state=1; endn 1b1: beginn opc_iraddr7:0=data;n state=0;endn default: n beginn opc_iraddr15:0=16bxxxxxxxxxxxxxxxx;n state=
25、1bx;n endn endcasen endn elsen state=1b0;n endnendnendmodule代碼nbeginn if(ena) /如果加載指令寄存器信號(hào)load_ir到來(lái),n begin /分兩個(gè)時(shí)鐘每次8位加載指令寄存器n casex(state)/先高字節(jié),后低字節(jié)n 1b0: beginn opc_iraddr15:8=data;n state=1; endn 1b1: beginn opc_iraddr7:0=data;n state=0;endn default: n beginn opc_iraddr15:0=16bxxxxxxxxxxxxxxxx;n
26、state=1bx;n endn endcasen endn elsen state=1b0;end;endmodule累加器累加器累加器用于存放當(dāng)前的結(jié)果,它也是雙目運(yùn)算其中一個(gè)數(shù)據(jù)來(lái)源。復(fù)位后,累加器的值是零。當(dāng)累加器通過(guò)ena口收到來(lái)自CPU狀態(tài)控制器load_acc信號(hào)時(shí),在clk1時(shí)鐘正跳沿時(shí)就收到來(lái)自于數(shù)據(jù)總線的數(shù)據(jù)。RTL視圖代碼nmodule accum( accum, data, ena, clk1, rst);noutput7:0accum;ninput7:0data;ninput ena,clk1,rst;nreg7:0accum;nalways(posedge clk1
27、)n beginn if(rst)n accum=8b0000_0000;/Resetn else if(ena)/當(dāng)CPU狀態(tài)控制器發(fā)出load_acc信號(hào)n accum=data;/Accumulaten endnendmodule算術(shù)運(yùn)算器算術(shù)運(yùn)算器n算術(shù)邏輯運(yùn)算單元 根據(jù)輸入的8種不同操作碼分別實(shí)現(xiàn)相應(yīng)的加、與、異或、跳轉(zhuǎn)等8種基本操作運(yùn)算。利用這幾種基本運(yùn)算可以實(shí)現(xiàn)很多種其它運(yùn)算以及邏輯判斷等操作。 RTL視圖代碼nmodule alu (alu_out, zero, data, accum, alu_clk, opcode);noutput 7:0alu_out;noutput z
28、ero;ninput 7:0 data, accum;ninput 2:0 opcode;ninput alu_clk;nreg 7:0 alu_out;nparameter HLT =3b000,nSKZ =3b001,nADD =3b010,nANDD =3b011,nXORR =3b100,nLDA =3b101,nSTO =3b110,nJMP =3b111;nassign zero = !accum;nalways (posedge alu_clk)n begin /操作碼來(lái)自指令寄存器的輸出opc_iaddr的 n /低3位代碼n casex (opcode)n HLT: alu_
29、out=accum;n SKZ: alu_out=accum;n ADD: alu_out=data+accum;n ANDD: alu_out=data&accum;n XORR: alu_out=dataaccum;n LDA: alu_out=data;n STO: alu_out=accum;n JMP: alu_out=accum;n default: alu_out=8bxxxx_xxxx;n endcasen endnendmodule數(shù)據(jù)控制器數(shù)據(jù)控制器n數(shù)據(jù)控制器的作用是控制累加器數(shù)據(jù)輸出,由于數(shù)據(jù)總線是各種操作時(shí)傳送數(shù)據(jù)的公共通道,不同的情況下傳送不同的內(nèi)容。有時(shí)要
30、傳輸指令,有時(shí)要傳送RAM區(qū)或接口的數(shù)據(jù)。計(jì)算單元的數(shù)據(jù)只有在需要往RAM區(qū)或端口寫(xiě)時(shí)才允許輸出,否則應(yīng)呈現(xiàn)高阻態(tài),以允許其它部件使用數(shù)據(jù)總線。 所以任何部件往總線上輸出數(shù)據(jù)時(shí),都需要一控制信號(hào)。而此控制信號(hào)的啟、停,則由CPU狀態(tài)控制器輸出的各信號(hào)控制決定。數(shù)據(jù)控制器何時(shí)輸出ALU的數(shù)據(jù)則由狀態(tài)控制器輸出的控制信號(hào)datactl_ena決定RTL視圖代碼nmodule datactl (data,in,data_ena);noutput 7:0data;ninput 7:0in;ninput data_ena;n assign data = (data_ena)? in : 8bzzzz_z
31、zzz;nendmodule地址多路器地址多路器n地址多路器用于選擇輸出的地址是PC(程序計(jì)數(shù))地址還是數(shù)據(jù)/端口地址。每個(gè)指令周期的前4個(gè)時(shí)鐘周期用于從ROM中讀取指令,輸出的應(yīng)是PC地址。后4個(gè)時(shí)鐘周期用于對(duì)RAM或端口的讀寫(xiě),該地址由指令中給出。地址的選擇輸出信號(hào)由時(shí)鐘信號(hào)的8分頻信號(hào)fetch提供。RTL視圖代碼nmodule adr(addr,fetch,ir_addr,pc_addr);noutput 12:0 addr;ninput 12:0 ir_addr, pc_addr;ninput fetch;nassign addr = fetch? pc_addr : ir_addr
32、;nendmodule程序計(jì)數(shù)器程序計(jì)數(shù)器程序計(jì)數(shù)器用于提供指令地址。以便讀取指令,指令按地址順序存放在存儲(chǔ)器中。有兩種途徑可形成指令地址:其一是順序執(zhí)行的情況,其二是遇到要改變順序執(zhí)行程序的情況,例如執(zhí)行JMP指令后,需要形成新的指令地址。復(fù)位后,指令指針為零,即每次CPU重新啟動(dòng)將從ROM的零地址開(kāi)始讀取指令并執(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),通過(guò)load口進(jìn)入程序計(jì)數(shù)器。程序計(jì)數(shù)器(pc_addr)將裝入目標(biāo)地址(ir_addr),而不是增2。
33、RTL視圖代碼module counter ( pc_addr, ir_addr, load, clock, rst);output 12:0 pc_addr;input 12:0 ir_addr;input load, clock, rst;reg 12:0 pc_addr; always ( posedge clock or posedge rst ) begin if(rst) pc_addr=13b0_0000_0000_0000; else if(load) pc_addr=ir_addr; else pc_addr = pc_addr + 1; endendmodule狀態(tài)控制器狀
34、態(tài)控制器狀態(tài)控制器由兩部分組成: 1.狀態(tài)機(jī)(圖中的MACHINE部分)2.狀態(tài)機(jī)控制器(圖中的MACHINECTL部分) 狀態(tài)機(jī)控制器接受復(fù)位信號(hào)RST,當(dāng)RST有效時(shí)通過(guò)信號(hào)ena使其為0,輸入到狀態(tài)機(jī)中停止?fàn)顟B(tài)機(jī)的工作。簡(jiǎn)介狀態(tài)機(jī)是CPU的控制核心,用于產(chǎn)生一系列的控制信號(hào),啟動(dòng)或停止某些部件。CPU何時(shí)進(jìn)行讀指令讀寫(xiě)I/O端口,RAM區(qū)等操作,都是由狀態(tài)機(jī)來(lái)控制的。狀態(tài)機(jī)的當(dāng)前狀態(tài),由變量state記錄,state的值就是當(dāng)前這個(gè)指令周期中已經(jīng)過(guò)的時(shí)鐘數(shù)(從零計(jì)起)。 指令周期是由8個(gè)時(shí)鐘周期組成,每個(gè)時(shí)鐘周期都要完成固定的操作1)第0個(gè)時(shí)鐘,因?yàn)镃PU狀態(tài)控制器的輸出:rd和load
35、_ir為高電平,其余均為低電平。指令寄存器寄存由ROM送來(lái)的高8位指令代碼。2)第1個(gè)時(shí)鐘,與上一時(shí)鐘相比只是inc_pc從0變?yōu)?故PC增1,ROM送來(lái)低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,讀相應(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)
36、算;若為L(zhǎng)DA,就把數(shù)據(jù)通過(guò)算術(shù)運(yùn)算器送給累加器;若為SKZ,先判斷累加器的值是否為0,如果為0,PC就增1,否則保持原值;若為JMP,鎖存目的地址;若為STO,將數(shù)據(jù)寫(xiě)入地址處。7)第6個(gè)時(shí)鐘,空操作。8)第7個(gè)時(shí)鐘,若操作符為SKZ且累加器值為0,則PC值再增1,跳過(guò)一條指令,否則PC無(wú)變化。RTL視圖代碼nmodule machine( inc_pc, load_acc, load_pc, rd,wr, load_ir,ndatactl_ena, halt, clk1, zero, ena, opcode );noutput inc_pc, load_acc, load_pc, rd,
37、wr, load_ir;noutput datactl_ena, halt;ninput clk1, zero, ena;ninput 2:0 opcode;nreg inc_pc, load_acc, load_pc, rd, wr, load_ir;nreg datactl_ena, halt;nreg 2:0 state;nparameter HLT = 3 b000,n SKZ = 3 b001,n ADD = 3 b010,n ANDD = 3 b011,n XORR = 3 b100,n LDA = 3 b101,n STO = 3 b110,n JMP = 3 b111;n al
38、ways ( negedge clk1 )n beginn if ( !ena ) /接收到復(fù)位信號(hào)RST,進(jìn)行復(fù)位操作n beginn state=3b000;n inc_pc,load_acc,load_pc,rd=4b0000;n wr,load_ir,datactl_ena,halt=4b0000;nstate=3b011;n endn3b011:/next instruction address setup 分析指令從這里開(kāi)始n beginn if(opcode=HLT)/指令為暫停HLTn beginn inc_pc,load_acc,load_pc,rd=4b1000;n wr,
39、load_ir,datactl_ena,halt=4b0001;n endn elsen beginn inc_pc,load_acc,load_pc,rd=4b1000;n wr,load_ir,datactl_ena,halt=4b0000;n endn state=3b100;nendn3b100: /fetch oprandn beginn if(opcode=JMP) n beginn inc_pc,load_acc,load_pc,rd=4b0010;n wr,load_ir,datactl_ena,halt=4b0000;n end n else if( opcode=ADD |
40、 opcode=ANDD | n opcode=XORR | opcode=LDA)n beginn inc_pc,load_acc,load_pc,rd=4b0001;n wr,load_ir,datactl_ena,halt=4b0000;n endnelse if(opcode=STO)n beginn inc_pc,load_acc,load_pc,rd=4b0000;n nwr,load_ir,datactl_ena,halt=4b0010;n endn else if ( opcode=ADD|opcode=ANDD|n opcode=XORR|opcode=LDA)n begin
41、n inc_pc,load_acc,load_pc,rd=4b0001;n wr,load_ir,datactl_ena,halt=4b0000;n endn elsen beginn inc_pc,load_acc,load_pc,rd=4b0000;n wr,load_ir,datactl_ena,halt=4b0000;n endn state=3b111;n endn3b111:/n beginn if( opcode=SKZ & zero=1 )n beginn inc_pc,load_acc,load_pc,rd=4b1000;n wr,load_ir,datactl_en
42、a,halt=4b0000;n endn elsen beginn inc_pc,load_acc,load_pc,rd=4b0000;n wr,load_ir,datactl_ena,halt=4b0000;n endn state=3b000;n endndefault:n beginn inc_pc,load_acc,load_pc,rd=4b0000;n wr,load_ir,datactl_ena,halt=4b0000;n state=3b000;n endnendcasenendnendtaskn/-end of task ctl_cycle-nendmodulen wr,loa
43、d_ir,datactl_ena,halt=4b0000;n state=3b000;n endnendcasenendnendtaskn/-end of task ctl_cycle-nendmodule外圍模塊外圍模塊n為了對(duì)為了對(duì)RISC_CPU進(jìn)行測(cè)試,需要有存儲(chǔ)測(cè)試程序的進(jìn)行測(cè)試,需要有存儲(chǔ)測(cè)試程序的ROM和裝載數(shù)據(jù)的和裝載數(shù)據(jù)的RAM、地址譯碼器。地址譯碼器。1.1.地址譯碼器地址譯碼器module addr_decode( addr, rom_sel, ram_sel);module addr_decode( addr, rom_sel, ram_sel);output rom_sel, ram_sel;output rom_sel, ram_sel;input 12:0 addr;input 12:0 addr;reg rom_sel, ram_sel;reg rom_sel, ram_sel;always always ( addr )( addr ) begin begin casex(addr) casex(addr) 13b1_1xxx_xxxx_xxxx:rom_
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙江經(jīng)濟(jì)職業(yè)技術(shù)學(xué)院《房地產(chǎn)市場(chǎng)理論與實(shí)務(wù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 中國(guó)礦業(yè)大學(xué)《中醫(yī)經(jīng)典綜合實(shí)訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙大寧波理工學(xué)院《材料與成型》2023-2024學(xué)年第一學(xué)期期末試卷
- 棗莊職業(yè)學(xué)院《塑性加工力學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- DB2201T 70-2024 非洲豬瘟病毒環(huán)境監(jiān)測(cè)采樣技術(shù)規(guī)范
- 數(shù)學(xué)游戲演講模板
- 專業(yè)案例(暖通空調(diào)專業(yè))-公用設(shè)備工程師(暖通空調(diào)專業(yè))《專業(yè)案例》押題密卷
- 生命起源理論教學(xué)
- 七夕節(jié)青年?duì)I銷策略
- 二零二五版交通事故傷殘鑒定及賠償協(xié)議3篇
- 鋼結(jié)構(gòu)施工管理培訓(xùn)課件
- 2024年度工程建設(shè)項(xiàng)目安全評(píng)價(jià)合同2篇
- 《飛機(jī)操縱面》課件
- 商業(yè)咨詢報(bào)告范文大全
- 自我發(fā)展與團(tuán)隊(duì)管理課件
- 《婦產(chǎn)科學(xué)》課件-17.盆腔器官脫垂
- 監(jiān)理報(bào)告范本
- 店鋪交割合同范例
- 大型活動(dòng)LED屏幕安全應(yīng)急預(yù)案
- 2024年內(nèi)蒙古包頭市中考道德與法治試卷
- 湖南省長(zhǎng)沙市2024-2025學(xué)年高二上學(xué)期期中考試地理試卷(含答案)
評(píng)論
0/150
提交評(píng)論