




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Verilog HDL精簡指令集計(jì)算機(jī)簡介nRISC RISC 即精簡指令集計(jì)算機(jī)(即精簡指令集計(jì)算機(jī)(Reduced Instruction Set ComputerReduced Instruction Set Computer)的縮寫。它是一種八十年代才出現(xiàn)的的縮寫。它是一種八十年代才出現(xiàn)的CPUCPU,與一般的與一般的CPU CPU 相比不僅相比不僅只是簡化了指令系統(tǒng),而且是通過簡化指令系統(tǒng)使計(jì)算機(jī)的結(jié)構(gòu)更只是簡化了指令系統(tǒng),而且是通過簡化指令系統(tǒng)使計(jì)算機(jī)的結(jié)構(gòu)更加簡單合理,從而提高了運(yùn)算速度。從實(shí)現(xiàn)的途徑看,加簡單合理,從而提高了運(yùn)算速度。從實(shí)現(xiàn)的途徑看,RISC_CPURISC_C
2、PU與與一般的一般的CPUCPU的不同處在于:它的時序控制信號形成部件是用硬布線的不同處在于:它的時序控制信號形成部件是用硬布線邏輯實(shí)現(xiàn)的而不是采用微程序控制的方式。所謂硬布線邏輯也就是邏輯實(shí)現(xiàn)的而不是采用微程序控制的方式。所謂硬布線邏輯也就是用觸發(fā)器和邏輯門直接連線所構(gòu)成的狀態(tài)機(jī)和組合邏輯,故產(chǎn)生控用觸發(fā)器和邏輯門直接連線所構(gòu)成的狀態(tài)機(jī)和組合邏輯,故產(chǎn)生控制序列的速度比用制序列的速度比用微程序控制方式微程序控制方式快得多,因?yàn)檫@樣做省去了讀取快得多,因?yàn)檫@樣做省去了讀取微指令的時微指令的時間間RISC CPURISC CPU結(jié)構(gòu)結(jié)構(gòu) RISC_CPURISC_CPU是一個復(fù)雜的數(shù)字邏輯電路,
3、但是它的基本部件的邏輯并不復(fù)是一個復(fù)雜的數(shù)字邏輯電路,但是它的基本部件的邏輯并不復(fù)雜??砂阉殖砂藗€基本部件:雜??砂阉殖砂藗€基本部件: 1) 1) 時鐘發(fā)生器時鐘發(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)存儲器()存儲器(RAM,ROM)RAM,ROM)主要特征: 8位數(shù)據(jù)、13位地址、8條指令,每條指令8Tclk指令格式:D15-D13D12-
4、D0操作碼地址碼1) HLT停機(jī)操作。該操作將空一個指令周期,即8個時鐘周期。2) SKZ為零跳過下一條語句。該操作先判斷當(dāng)前alu中的結(jié)果是否為零,若是零就跳過下一條語句,否則繼續(xù)執(zhí)行。3) ADD相加。該操作將累加器中的值與地址所指的存儲器或端口的數(shù)據(jù)相加,結(jié)果仍送回累加器中。4) AND相與。該操作將累加器的值與地址所指的存儲器或端口的數(shù)據(jù)相與,結(jié)果仍送回累加器中。5) XOR異或。該操作將累加器的值與指令中給出地址的數(shù)據(jù)異或,結(jié)果仍送回累加器中。6) LDA讀數(shù)據(jù)。該操作將指令中給出地址的數(shù)據(jù)放入累加器。7) STO寫數(shù)據(jù)。該操作將累加器的數(shù)據(jù)放入指令中給出的地址。8) JMP無條件跳
5、轉(zhuǎn)語句。該操作將跳轉(zhuǎn)至指令給出的目的地址,繼續(xù)執(zhí)行。 RISC_CPU是8位微處理器,一律采用直接尋址方式,即數(shù)據(jù)總是放在存儲器中,尋址單元的地址由指令直接給出。這是最簡單的尋址方式。n控制器在clk1下降沿輸出控制信號。PC隨inc_pc上升沿動作(即clk1下降沿)n其它部件在clk1上升沿動作。即在Ti中間輸出控制信號,在Ti結(jié)束時動作。n如取高8位指令:rd=1,load_ir=1,而ir鎖存在T1上升沿鎖存(即T0結(jié)束時)clk1T0T1T2T3T4T5T6T7fetchrdload_irADDRinc_pc時 序alu_clkCPU執(zhí)行指令過程:T0: 狀態(tài)控制器輸出rd=1,lo
6、ad_ir=1,另state=0,由M讀1字節(jié),在T0結(jié)束時鎖存到ir高8位。即取高字節(jié)指令。T1: inc_pc=1使地址加1, rd=1,load_ir=1,另state=1,由M讀1字節(jié),在T1結(jié)束時鎖存到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通過alu _out送DBT5: 若opcord=ADD,AND,XO
7、R, LDA,則rd=1(繼續(xù)讀Mem)且load_acc=1,由于acc已送alu, alu操作結(jié)果在T5結(jié)束時鎖存到acc; 若opcord=STO,則 datactl_ena =1(繼續(xù)將accum通過alu _out送DB )且wr=1,在T5結(jié)束時寫到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,即跳過一條指令。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時鐘發(fā)生器時鐘發(fā)生器時鐘發(fā)生器 clkgen 利用外來時鐘信號clk 來生成一系列時鐘信號clk1、fetch、alu_clk 送往CPU的其他部件。其中fetch是外來時鐘 clk 的八分頻信號。利用fetch的上升沿來觸發(fā)CPU控制器開始執(zhí)行一條指令,同時fetch信號還將控制地址多路器輸出指令地址和數(shù)據(jù)地址。clk1信號用作指令寄存器、累加器、狀態(tài)控制器的時鐘信號。alu_clk 則用于觸發(fā)算術(shù)邏輯運(yùn)算單元。 CLKCLK1CLKGENALU_CLKFETCHCLKCLK1ALU_CLK FETCH時鐘發(fā)生器RES
16、ETRESET clkclk1clk2clk4fetchalu_clk時鐘發(fā)生器clkgen的波形REL視圖時鐘發(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ā)時鐘是指令寄存器的觸發(fā)時鐘是clk1clk1,在在clk1clk1的正沿觸
21、發(fā)下,寄存器將數(shù)據(jù)總線送來的指令的正沿觸發(fā)下,寄存器將數(shù)據(jù)總線送來的指令存入高存入高8 8位或低位或低8 8位寄存器中。但并不是每個位寄存器中。但并不是每個clk1clk1的上升沿都寄存數(shù)據(jù)總線的數(shù)據(jù),因的上升沿都寄存數(shù)據(jù)總線的數(shù)據(jù),因?yàn)閿?shù)據(jù)總線上有時傳輸指令,有時傳輸數(shù)據(jù)。什么時候寄存,什么時候不寄存由為數(shù)據(jù)總線上有時傳輸指令,有時傳輸數(shù)據(jù)。什么時候寄存,什么時候不寄存由CPUCPU狀狀態(tài)控制器的態(tài)控制器的load_irload_ir信號控制。信號控制。load_irload_ir信號通過信號通過ena ena 口輸入到指令寄存器。復(fù)位后,口輸入到指令寄存器。復(fù)位后,指令寄存器被清為零。指令
22、寄存器被清為零。每條指令為每條指令為2 2個字節(jié),即個字節(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位寄存器,同時將變
23、量位寄存器,同時將變量statestate置為置為1 1。下次再寄存時,由于。下次再寄存時,由于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) /如果加載指令寄存器信號load_ir到來,n begin /分兩個時鐘每次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) /如果加載指令寄存器信號load_ir到來,n begin /分兩個時鐘每次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)算其中一個數(shù)據(jù)來源。復(fù)位后,累加器的值是零。當(dāng)累加器通過ena口收到來自CPU狀態(tài)控制器load_acc信號時,在clk1時鐘正跳沿時就收到來自于數(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信號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 /操作碼來自指令寄存器的輸出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ù)據(jù)的公共通道,不同的情況下傳送不同的內(nèi)容。有時要
30、傳輸指令,有時要傳送RAM區(qū)或接口的數(shù)據(jù)。計(jì)算單元的數(shù)據(jù)只有在需要往RAM區(qū)或端口寫時才允許輸出,否則應(yīng)呈現(xiàn)高阻態(tài),以允許其它部件使用數(shù)據(jù)總線。 所以任何部件往總線上輸出數(shù)據(jù)時,都需要一控制信號。而此控制信號的啟、停,則由CPU狀態(tài)控制器輸出的各信號控制決定。數(shù)據(jù)控制器何時輸出ALU的數(shù)據(jù)則由狀態(tài)控制器輸出的控制信號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ù)/端口地址。每個指令周期的前4個時鐘周期用于從ROM中讀取指令,輸出的應(yīng)是PC地址。后4個時鐘周期用于對RAM或端口的讀寫,該地址由指令中給出。地址的選擇輸出信號由時鐘信號的8分頻信號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ù)器用于提供指令地址。以便讀取指令,指令按地址順序存放在存儲器中。有兩種途徑可形成指令地址:其一是順序執(zhí)行的情況,其二是遇到要改變順序執(zhí)行程序的情況,例如執(zhí)行JMP指令后,需要形成新的指令地址。復(fù)位后,指令指針為零,即每次CPU重新啟動將從ROM的零地址開始讀取指令并執(zhí)行。每條指令執(zhí)行完需2個時鐘,這時pc_addr已被增2,指向下一條指令。(因?yàn)槊織l指令占兩個字節(jié)。)如果正執(zhí)行的指令是跳轉(zhuǎn)語句,這時CPU狀態(tài)控制器將會輸出load_pc信號,通過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ù)位信號RST,當(dāng)RST有效時通過信號ena使其為0,輸入到狀態(tài)機(jī)中停止?fàn)顟B(tài)機(jī)的工作。簡介狀態(tài)機(jī)是CPU的控制核心,用于產(chǎn)生一系列的控制信號,啟動或停止某些部件。CPU何時進(jìn)行讀指令讀寫I/O端口,RAM區(qū)等操作,都是由狀態(tài)機(jī)來控制的。狀態(tài)機(jī)的當(dāng)前狀態(tài),由變量state記錄,state的值就是當(dāng)前這個指令周期中已經(jīng)過的時鐘數(shù)(從零計(jì)起)。 指令周期是由8個時鐘周期組成,每個時鐘周期都要完成固定的操作1)第0個時鐘,因?yàn)镃PU狀態(tài)控制器的輸出:rd和load
35、_ir為高電平,其余均為低電平。指令寄存器寄存由ROM送來的高8位指令代碼。2)第1個時鐘,與上一時鐘相比只是inc_pc從0變?yōu)?故PC增1,ROM送來低8位指令代碼,指令寄存器寄存該8位代碼。3)第2個時鐘,空操作。4)第3個時鐘,PC增1,指向下一條指令。若操作符為HLT,則輸出信號HLT為高。如果操作符不為HLT,除了PC增一外(指向下一條指令),其它各控制線輸出為零。5)第4個時鐘,若操作符為AND、ADD、XOR或LDA,讀相應(yīng)地址的數(shù)據(jù);若為JMP,將目的地址送給程序計(jì)數(shù)器;若為STO,輸出累加器數(shù)據(jù)。6)第5個時鐘,若操作符為ANDD、ADD或XORR,算術(shù)運(yùn)算器就進(jìn)行相應(yīng)的運(yùn)
36、算;若為LDA,就把數(shù)據(jù)通過算術(shù)運(yùn)算器送給累加器;若為SKZ,先判斷累加器的值是否為0,如果為0,PC就增1,否則保持原值;若為JMP,鎖存目的地址;若為STO,將數(shù)據(jù)寫入地址處。7)第6個時鐘,空操作。8)第7個時鐘,若操作符為SKZ且累加器值為0,則PC值再增1,跳過一條指令,否則PC無變化。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ù)位信號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 分析指令從這里開始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為了對為了對RISC_CPU進(jìn)行測試,需要有存儲測試程序的進(jìn)行測試,需要有存儲測試程序的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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 就業(yè)協(xié)議與勞動合同的適用范圍解讀
- 珠寶首飾可持續(xù)發(fā)展策略考核試卷
- 電力電子器件的電磁兼容性設(shè)計(jì)考核試卷
- ??漆t(yī)院護(hù)理信息化管理知識考核試卷
- 電子真空器件的高頻特性分析考核試卷
- 環(huán)保產(chǎn)業(yè)與循環(huán)經(jīng)濟(jì)協(xié)同發(fā)展考核試卷
- 司馬遷的‘大數(shù)據(jù)思維’:解析《史記》中的管理智慧與商業(yè)啟示
- 2025年制定版權(quán)許可合同模板
- 2025年工程采購合同研究
- 2025裝修項(xiàng)目合作合同
- 2025年由民政局策劃的離婚協(xié)議官方文本模板
- 高血壓科普健康宣教課件
- 班級安全員信息員培訓(xùn)
- 科技領(lǐng)域?qū)嶒?yàn)室質(zhì)量控制關(guān)鍵技術(shù)與方法
- 商場運(yùn)營部的培訓(xùn)
- 四年級 人教版 數(shù)學(xué)《小數(shù)的意義》課件
- 《糖尿病與肥胖》課件
- 醫(yī)療糾紛防范與醫(yī)患溝通
- 服裝設(shè)計(jì)與工藝基礎(chǔ)知識單選題100道及答案
- 鋼結(jié)構(gòu)施工管理培訓(xùn)課件
- 護(hù)理MDT多學(xué)科聯(lián)合查房
評論
0/150
提交評論