版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 _ 第十七章 簡化的 RISC CPU設(shè)計前言:在前面的各章中我們已經(jīng)學(xué)習(xí)了VerilogHDL的基本語法、簡單組合邏輯和簡單時序邏輯模塊的編寫、Top-Down設(shè)計方法、還學(xué)習(xí)了可綜合風(fēng)格的組合邏輯和有限狀態(tài)機的設(shè)計,其中EEPROM讀寫器的設(shè)計,可以算是一個較復(fù)雜的嵌套的有限狀態(tài)機的設(shè)計,它是根據(jù)我們已完成的實際工程項目,為達到教學(xué)目標(biāo)而改寫的,已很接近真實的設(shè)計。在本章中,我們將介紹另一個經(jīng)過簡化的用于教學(xué)目標(biāo)的精簡指令集(RISC)CPU的構(gòu)造原理和設(shè)計方法。作者相信讀者參考書上的程序和解釋,經(jīng)過自己的努力,就可以獨立完成該CPU核的設(shè)計和驗證,從而學(xué)習(xí)Verilog設(shè)計方法,并由此
2、逐步掌握這種利用硬件描述語言的高層次設(shè)計方法。17.1 課題的由來和設(shè)計環(huán)境介紹:在本章中,我們將通過自己動腦筋,設(shè)計出CPU的軟核和固核。這個CPU是一個簡化的專門為教學(xué)目的而設(shè)計的RISC_CPU。 在設(shè)計中我們不但關(guān)心 CPU 總體設(shè)計的合理性, 而且還使得構(gòu)成這個RISC_CPU的每一個模塊不僅是可仿真的也都可以綜合成門級網(wǎng)表。因而從物理意義上說,這也是一個能真正通過具體電路結(jié)構(gòu)而實現(xiàn)的CPU。為了能在這個虛擬的CPU上運行較為復(fù)雜的程序并進行仿真, 我們把尋址空間規(guī)定為8K(即13位地址線)字節(jié)。下面讓我們一步一步地來設(shè)計這樣一個CPU,并進行RTL仿真、經(jīng)過綜合、布局布線后,再次進
3、行一次仿真,從中我們可以體會到這種設(shè)計方法的潛力。本章中的VerilogHDL程序都是我們自己為教學(xué)目的而編寫的,全部程序在CADENCE公司的NC-Verilog 環(huán)境、Synopsys VCS、 Mentor 公司的ModelSim 6.1 等環(huán)境下用Verilog語言進行了仿真。同時我們分別用Synplify、Altera Quartus II 等工具,針對不同的FPGA進行了綜合。 順利地通過RTL級仿真、綜合后門級邏輯網(wǎng)表仿真以及布線后的門級結(jié)構(gòu)電路模型仿真。這個 CPU 模型只是一個教學(xué)模型,設(shè)計也不一定很合理,只是從原理上說明了簡單的RISC _CPU是如何構(gòu)成的。本章的內(nèi)容是想
4、達到以下四個目的:1)學(xué)習(xí)RISC CPU的基本結(jié)構(gòu)和原理;2)了解Verilog HDL仿真和綜合工具的潛力;2)展示Verilog設(shè)計方法對軟/硬件聯(lián)合設(shè)計和驗證的意義;3)學(xué)習(xí)并掌握一些常用的Verilog語法和驗證方法。作者也希望本章的內(nèi)容能引起對 CPU和復(fù)雜數(shù)字邏輯系統(tǒng)設(shè)計有興趣的電子工程師們的注意,加入我國集成電路的設(shè)計隊伍,提高我國電子產(chǎn)品的檔次。由于作者的經(jīng)驗與學(xué)識有限,不足之處敬請讀者批評、指正。17.2.什么是CPU?CPU 即中央處理單元的英文縮寫,它是計算機的核心部件。計算機進行信息處理可分為兩個步驟:1) 將數(shù)據(jù)和程序(即指令序列)輸入到計算機的存儲器中。2) 從第
5、一條指令的地址起開始執(zhí)行該程序,得到所需結(jié)果,結(jié)束運行。CPU的作用是協(xié)調(diào)并控制計算機的各個部件執(zhí)行程序,使其有條不紊地進行。因此它必須具有以下基本功能:a) 取指令:當(dāng)程序已在存儲器中時,首先根據(jù)程序入口地址取出一條程序,為此要發(fā)出指令地址及控制信號。b) 分析指令:即指令譯碼。是對當(dāng)前取得的指令進行分析,指出它要求什么操作,并產(chǎn)生相應(yīng)的操作命令。c) 執(zhí)行指令:根據(jù)分析指令時產(chǎn)生的操作命令形成相應(yīng)的操作控制信號序列,通過運算器,存儲器及輸入/輸出設(shè)備的執(zhí)行,實現(xiàn)每條指令的功能,其中包括對運算結(jié)果的處理以及下條指令地址的形成。將其功能進一步細化,可概括如下:1) 能對指令進行譯碼并執(zhí)行規(guī)定的
6、動作;2) 可以進行算術(shù)和邏輯運算;3) 能與存儲器,外設(shè)交換數(shù)據(jù);4) 提供整個系統(tǒng)所需要的控制;盡管各種CPU的性能指標(biāo)和結(jié)構(gòu)細節(jié)各不相同,但它們所能完成的基本功能相同。由功能分析,可知任何一種CPU內(nèi)部結(jié)構(gòu)至少應(yīng)包含下面這些部件:1) 算術(shù)邏輯運算部件(ALU),2) 累加器,3) 程序計數(shù)器,4) 指令寄存器,譯碼器,5) 時序和控制部件。RISC 即精簡指令集計算機(Reduced Instruction Set Computer)的縮寫。它是一種八十年代出現(xiàn)的CPU,與一般的CPU 相比不僅只是簡化了指令系統(tǒng),而且是通過簡化指令系統(tǒng)使計算機的結(jié)構(gòu)更加簡單合理,從而提高了運算速度。從
7、實現(xiàn)的途徑看,RISC_CPU與一般的CPU的不同處在于:它的時序控制信號形成部件是用硬布線邏輯實現(xiàn)的而不是采用微程序控制的方式。所謂硬布線邏輯也就是用觸發(fā)器和邏輯門直接連線所構(gòu)成的狀態(tài)機和組合邏輯,故產(chǎn)生控制序列的速度比用微程序控制方式快得多,因為這樣做省去了讀取微指令的時間。RISC_CPU也包括上述這些部件,下面就詳細介紹一個簡化的用于教學(xué)目的的RISC_CPU的可綜合VerilogHDL模型的設(shè)計和仿真過程。17.3. RISC CPU結(jié)構(gòu)RISC_CPU是一個復(fù)雜的數(shù)字邏輯電路,但是它的基本部件的邏輯并不復(fù)雜。我們可把它分成八個基本部件來考慮:1) 時鐘發(fā)生器2) 指令寄存器3) 累
8、加器4) 算術(shù)邏輯運算單元5) 數(shù)據(jù)控制器6) 狀態(tài)控制器7) 程序計數(shù)器8) 地址多路器各部件的相互連接關(guān)系見圖17.1。其中時鐘發(fā)生器利用外來時鐘信號進行分頻生成一系列時鐘信號,送往其他部件用作時鐘信號。各部件之間的相互操作關(guān)系則由狀態(tài)控制器來控制。各部件的具體結(jié)構(gòu)和邏輯關(guān)系在下面的小節(jié)里逐一進行介紹。圖 17.1 RISC-CPU中各部件的相互連接關(guān)系INSTRUCTIONREGISTERDATA7:0 OPCODE 2:0 IR_ADDR12:0RSTopc_iraddr15:0 RSTENADATA 7: 0OPC_IRADDRS 15:0 CLK CLKCLK FETCH ALU_
9、ENA CLK CLKGEN ALU_OUT7:0ACCUMENA ACCUM7:0 CLK RST DATA7:0 OPCODE2:0 ACCUM7:0ZEROALUALU_OUT7:0 OPCODE2:0DATA7:0INC_PC DATA_ENADATACTLDATA_ENAIN7:0DATA7:0 ZEROHALTLOAD_IRWRRDLOAD_ACCCONTROL(MACHINECTL MACHINE)LOAD_ACC INC_PC RDWR LOAD_PCCLK RSTFETCH ZEROOPCODE2:0LOAD_IR DATACTL_ENA HALT ADDR12:0IR_AD
10、DR2:0LOAD_PCADR ADDR12:0FETCH PC_ADDR12:0 IR_ADDR12:0 PC_ADDR12:0COUNTERCLOCKLOAD IR_ADDR12:0PC_ADDR12:0 RSTREGISTERDATA7:0ACCUM7:017.3.1時鐘發(fā)生器RESETRESETCLKCLKCLKGENALU_ENAFETCHCLKCLKALU_ENA FETCH圖1. 時鐘發(fā)生器時鐘發(fā)生器 clkgen 利用外來時鐘信號clk 來生成一系列時鐘和控制信號:clk、fetch、alu_ena 送往CPU的其他部件。其中fetch是控制信號,clk 的八分頻信號,當(dāng)fet
11、ch高電平時,使clk能觸發(fā)CPU控制器開始執(zhí)行一條指令,同時fetch信號還將控制地址多路器輸出指令地址和數(shù)據(jù)地址。clk信號用作指令寄存器、累加器、狀態(tài)控制器的時鐘信號。alu_ena 則用于控制算術(shù)邏輯運算單元的操作。時鐘發(fā)生器clkgen的波形見下圖2所示:圖2 時鐘發(fā)生器clkgen的波形clkfetchalu_ena其VerilogHDL 程序見下面的模塊:/- clk_gen.v 的開始 -timescale 1ns/1ns module clk_gen (clk,reset,fetch,alu_ena);input clk, reset;output fetch,alu_ena
12、;wire clk,reset;reg fetch,alu_ena;reg7:0 state;parameter S1 = 8'b00000001, S2 = 8'b00000010, S3 = 8'b00000100, S4 = 8'b00001000, S5 = 8'b00010000, S6 = 8'b00100000, S7 = 8'b01000000, S8 = 8'b10000000, idle = 8'b00000000; always (posedge clk) if(reset) begin fetch
13、<= 0; alu_ena <= 0; state <= idle; end else begin case(state) S1: begin alu_ena <= 1; state <= S2; end S2: begin alu_ena <= 0; state <= S3; end S3: begin fetch <= 1; state <= S4; end S4: begin state <= S5; end S5: state <= S6; S6: state <= S7; S7: begin fetch <
14、= 0; state <= S8; end S8: begin state <= S1; end idle: state <= S1; default: state <= idle; endcase endendmodule/- clk_gen.v 的結(jié)束 -由于在時鐘發(fā)生器的設(shè)計中采用了同步狀態(tài)機的設(shè)計方法,不但使clk_gen模塊的源程序可以被各種綜合器綜合,也使得由其生成的fetch、alu_ena 在同步性能上有明顯的提高,為整個系統(tǒng)的性能提高打下了良好的基礎(chǔ)。17.3.2 指令寄存器圖3 指令寄存器模塊 DATA7:0 RST ENA CLK opc_irad
15、dr15:0 REGISTER INSTRUCTION REGISTER DATA7:0 LOAD_IR CLK RESET OPCODE2:0 IR_ADDR12:0 顧名思義,指令寄存器用于寄存指令。指令寄存器的觸發(fā)時鐘是clk,在clk的正沿觸發(fā)下,寄存器將數(shù)據(jù)總線送來的指令存入高8位或低8位寄存器中。但并不是每個clk的上升沿都寄存數(shù)據(jù)總線的數(shù)據(jù),因為數(shù)據(jù)總線上有時傳輸指令,有時傳輸數(shù)據(jù)。什么時候寄存,什么時候不寄存由CPU狀態(tài)控制器的load_ir信號控制。load_ir信號通過ena 口輸入到指令寄存器。復(fù)位后,指令寄存器被清為零。每條指令為2個字節(jié),即16位。高3位是操作碼,低1
16、3位是地址。(CPU的地址總線為13位,尋址空間為8K字節(jié)。)本設(shè)計的數(shù)據(jù)總線為8位,所以每條指令需取兩次。先取高8位,后取低8位。而當(dāng)前取的是高8位還是低8位,由變量state記錄。state為零表示取的高8位,存入高8位寄存器,同時將變量state置為1。下次再寄存時,由于state為1,可知取的是低8位,存入低8位寄存器中。其VerilogHDL 程序見下面的模塊:/-timescale 1ns/1nsmodule register(opc_iraddr,data,ena,clk,rst);output 15:0 opc_iraddr;input 7:0 data;input ena,
17、clk, rst;reg 15:0 opc_iraddr;reg state;always (posedge clk)beginif(rst)beginopc_iraddr <= 16'b0000_0000_0000_0000;state <=1'b0;endelsebeginif(ena)/如果加載指令寄存器信號load_ir到來,begin/分兩個時鐘每次8位加載指令寄存器casex(state)/先高字節(jié),后低字節(jié)1'b0: begin opc_iraddr15:8<=data; state<=1; end1'b1: begin o
18、pc_iraddr7:0<=data; state<=0;enddefault: beginopc_iraddr15:0<=16'bxxxxxxxxxxxxxxxx;state<=1'bx;endendcaseendelsestate<=1'b0;endendendmodule/-17.3.3.累加器圖4 累加器模塊 DATA7:0 RST ENA CLK ACCUM7:0 ACCUM ACCUMULATOR ALU_OUT7:0 LOAD_ACC CLK RST ACCUM7:0 累加器用于存放當(dāng)前的結(jié)果,它也是雙目運算其中一個數(shù)據(jù)來源。
19、復(fù)位后,累加器的值是零。當(dāng)累加器通過ena口收到來自CPU狀態(tài)控制器load_acc信號時,在clk時鐘正跳沿時就收到來自于數(shù)據(jù)總線的數(shù)據(jù)。其VerilogHDL 程序見下面的模塊:/-module accum( accum, data, ena, clk, rst);output7:0accum;input7:0data;input ena, clk, rst;reg7:0accum;always(posedge clk)beginif(rst)accum <= 8'b0000_0000;/Resetelseif(ena)/當(dāng)CPU狀態(tài)控制器發(fā)出load_acc信號accum
20、<= data;/Accumulateendendmodule/-17.3.4.算術(shù)運算器圖5 算術(shù)運算器模塊 DATA7:0 ACCUM7:0 CLK OPCODE2:0 ZERO ALU_OUT7:0 ALU DATA7:0 ACCUM7:0 ZERO ALU_OUT7:0 ALU_ENAALU_ENA OPCODE2:0 CLK 算術(shù)邏輯運算單元 根據(jù)輸入的8種不同操作碼分別實現(xiàn)相應(yīng)的加、與、異或、跳轉(zhuǎn)等8種基本操作運算。利用這幾種基本運算可以實現(xiàn)很多種其它運算以及邏輯判斷等操作。其VerilogHDL 程序見下面的模塊: /-timescale 1ns/1nsmodule alu
21、 (alu_out, zero, data, accum, clk, alu_ena, opcode);output 7:0alu_out;output zero;input 7:0 data, accum;input 2:0 opcode ;input alu_ena;input clk;reg 7:0 alu_out;parameter HLT = 3'b000, SKZ = 3'b001, ADD = 3'b010, ANDD = 3'b011, XORR = 3'b100, LDA = 3'b101, STO = 3'b110,
22、JMP = 3'b111;assign zero = !accum;always (posedge clk) if (alu_ena) begin /操作碼來自指令寄存器的輸出opc_iaddr<15.0>的低3位 casex (opcode) HLT: alu_out <= accum; SKZ: alu_out <= accum; ADD: alu_out <= data + accum; ANDD: alu_out <= data & accum; XORR: alu_out <= data accum; LDA: alu_out
23、 <= data; STO: alu_out <= accum; JMP: alu_out <= accum; default: alu_out <= 8'bxxxx_xxxx; endcase endendmodule/-17.3.5.數(shù)據(jù)控制器圖6 數(shù)據(jù)控制器模塊數(shù)據(jù)控制器的作用是控制累加器數(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ù)時,都需要一
24、控制信號。而此控制信號的啟、停,則由CPU狀態(tài)控制器輸出的各信號控制決定。數(shù)據(jù)控制器何時輸出累加器的數(shù)據(jù)則由狀態(tài)控制器輸出的控制信號datactl_ena決定。其VerilogHDL 程序見下面的模塊:/-module datactl (data, in, data_ena);output 7:0 data;input 7:0 in;input data_ena;assign data = (data_ena)? in : 8'bzzzz_zzzz;endmodule/-17.3.6.地址多路器圖7 地址多路器模塊 ADR PC_ADDR12 : 0 IR_ADDR12 : 0 FET
25、CH ADDR12 : 0 PC_ADDR12 : 0 IR_ADDR12 : 0 FETCH ADDR12 : 0 地址多路器用于選擇輸出的地址是PC(程序計數(shù))地址還是數(shù)據(jù)/端口地址。每個指令周期的前4個時鐘周期用于從ROM中讀取指令,輸出的應(yīng)是PC地址。后4個時鐘周期用于對RAM或端口的讀寫,該地址由指令中給出。地址的選擇輸出信號由時鐘信號的8分頻信號fetch提供。其VerilogHDL 程序見下面的模塊: /-module adr(addr, fetch, ir_addr, pc_addr);output 12:0 addr;input 12:0 ir_addr, pc_addr;i
26、nput fetch;assign addr = fetch? pc_addr : ir_addr;endmodule/-17.3.7.程序計數(shù)器程序計數(shù)器用于提供指令地址。以便讀取指令,指令按地址順序存放在存儲器中。有兩種途徑可形成指令地址:其一是順序執(zhí)行的情況,其二是遇到要改變順序執(zhí)行程序的情況,例如執(zhí)行JMP指令后,需要形成新的指令地址。下面就來詳細說明PC地址是如何建立的。圖8 程序計數(shù)器模塊 COUNTER IR_ADDR12 : 0 LOAD CLOCK RST PC_ADDR12 : 0 PC_ADDR12 : 0 IR_ADDR12 : 0 LOAD_PC INC_PC RES
27、ET 復(fù)位后,指令指針為零,即每次CPU重新啟動將從ROM的零地址開始讀取指令并執(zhí)行。每條指令執(zhí)行完需2個時鐘,這時pc_addr已被增2,指向下一條指令。(因為每條指令占兩個字節(jié)。)如果正執(zhí)行的指令是跳轉(zhuǎn)語句,這時CPU狀態(tài)控制器將會輸出load_pc信號,通過load口進入程序計數(shù)器。程序計數(shù)器(pc_addr)將裝入目標(biāo)地址(ir_addr),而不是增2。其VerilogHDL 程序見下面的模塊:/-module counter (clock, rst, ir_addr, load, pc_addr);output 12:0 pc_addr;input 12:0 ir_addr;inpu
28、t load, clock, rst;reg 12:0 pc_addr;always ( posedge clock or posedge rst )beginif(rst)pc_addr <= 13'b0_0000_0000_0000;elseif(load)pc_addr <= ir_addr;elsepc_addr <= pc_addr + 1;endendmodule/-17.3.8.狀態(tài)控制器圖9 狀態(tài)控制器模塊 CLK ZERO OPCODE2:0 CLK OPCODE2:0 ENA ENA FETCH RST machinectl CLK ZERO FE
29、TCH RST INC_PC LOAD_ACC LOAD_PC RD WR LOAD_IR HALT INC_PC LOAD_ACC LOAD_PC MEM_RD MEM_WR LOAD_IR HALT MACHINE DATACTL_ENA DATACTL_ENA 狀態(tài)控制器由兩部分組成:狀態(tài)機(上圖中的MACHINE部分)狀態(tài)控制器(上圖中的MACHINECTL部分)狀態(tài)機控制器接受復(fù)位信號RST,當(dāng)RST有效時通過信號ena使其為0,輸入到狀態(tài)機中停止?fàn)顟B(tài)機的工作。狀態(tài)控制器的VerilogHDL程序見下面模塊: /- timescale 1ns/1nsmodule machinectl
30、( clk, rst, fetch, ena);input clk, rst,fetch;output ena;reg ena;reg state; always (posedge clk )begin if(rst) begin ena<=0; end else if (fetch) begin ena <= 1; end endendmodule/-狀態(tài)機是CPU的控制核心,用于產(chǎn)生一系列的控制信號,啟動或停止某些部件。CPU何時進行讀指令讀寫I/O端口,RAM區(qū)等操作,都是由狀態(tài)機來控制的。狀態(tài)機的當(dāng)前狀態(tài),由變量state記錄,state的值就是當(dāng)前這個指令周期中已經(jīng)過的時
31、鐘數(shù)(從零計起)。 指令周期是由8個時鐘周期組成,每個時鐘周期都要完成固定的操作。1) 第0個時鐘,因為CPU狀態(tài)控制器的輸出:rd和load_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增1外(指向下一條指令),其它各控制線輸出為零。5) 第4個時鐘,若操作符為AND、ADD、XOR或LDA,讀相應(yīng)地址的
32、數(shù)據(jù);若為JMP,將目的地址送給程序計數(shù)器;若為STO,輸出累加器數(shù)據(jù)。6) 第5個時鐘,若操作符為ANDD、ADD或XORR,算術(shù)運算器就進行相應(yīng)的運算;若為LDA,就把數(shù)據(jù)通過算術(shù)運算器送給累加器;若為SKZ,先判斷累加器的值是否為0,如果為0,PC就增1,否則保持原值;若為JMP,鎖存目的地址;若為STO,將數(shù)據(jù)寫入指定地址。7) 第6個時鐘,空操作。8) 第7個時鐘,若操作符為SKZ且累加器值為0,則PC值再增1,跳過一條指令,否則PC無變化。 狀態(tài)機的VerilogHDL 程序見下面模塊:/-timescale 1ns/1nsmodule machine ( inc_pc, load
33、_acc, load_pc, rd,wr, load_ir,datactl_ena, halt, clk, zero, ena, opcode );output inc_pc, load_acc, load_pc, rd, wr, load_ir;output datactl_ena, halt;input clk, zero, ena;input 2:0 opcode;reg inc_pc, load_acc, load_pc, rd, wr, load_ir;reg datactl_ena, halt;reg 2:0 state;parameter HLT = 3 'b000, S
34、KZ = 3 'b001, ADD = 3 'b010, ANDD = 3 'b011, XORR = 3 'b100, LDA = 3 'b101, STO = 3 'b110, JMP = 3 'b111;always ( posedge clk )beginif ( !ena )/接收到復(fù)位信號RST,進行復(fù)位操作beginstate<=3'b000;inc_pc,load_acc,load_pc,rd<=4'b0000;wr,load_ir,datactl_ena,halt<=4'b000
35、0;endelsectl_cycle;end/-begin of task ctl_cycle-task ctl_cycle;begincasex(state) 3'b000: /load high 8bits in structionbegininc_pc,load_acc,load_pc,rd<= 4'b0001; wr,load_ir,datactl_ena,halt <= 4'b0100;state <= 3'b001;end 3'b001:/pc increased by one then load low 8bits ins
36、tructionbegininc_pc,load_acc,load_pc,rd<= 4'b1001; wr,load_ir,datactl_ena,halt <= 4'b0100;state <= 3'b010;end 3'b010:/idlebegininc_pc,load_acc,load_pc,rd<= 4'b0000; wr,load_ir,datactl_ena,halt<= 4'b0000;state <= 3'b011;end 3'b011:/next instruction ad
37、dress setup 分析指令從這里開始beginif(opcode=HLT)/指令為暫停HLTbegininc_pc,load_acc,load_pc,rd<= 4'b1000; wr,load_ir,datactl_ena,halt <= 4'b0001;endelsebegininc_pc,load_acc,load_pc,rd<=4'b1000; wr,load_ir,datactl_ena,halt <=4'b0000;endstate<=3'b100;end 3'b100:/fetch oprandbe
38、ginif(opcode=JMP)begininc_pc,load_acc,load_pc,rd<= 4'b0010;wr,load_ir,datactl_ena,halt <= 4'b0000;endelseif( opcode=ADD | opcode =ANDD | opcode=XORR | opcode=LDA)begininc_pc,load_acc,load_pc,rd<= 4'b0001;wr,load_ir,datactl_ena,halt <= 4'b0000;endelse if(opcode=STO)beginin
39、c_pc,load_acc,load_pc,rd<=4'b0000;wr,load_ir,datactl_ena,halt <=4'b0010;endelsebegininc_pc,load_acc,load_pc,rd<=4'b0000;wr,load_ir,datactl_ena,halt<=4'b0000;endstate<=3'b101;end 3'b101:/operationbeginif ( opcode =ADD|opcode=ANDD|opcode=XORR|opcode=LDA )begin/過一
40、個時鐘后與累加器的內(nèi)容進行運算inc_pc,load_acc,load_pc,rd<= 4'b0101;wr,load_ir,datactl_ena,halt<= 4'b0000;endelseif( opcode =SKZ && zero=1)begininc_pc,load_acc,load_pc,rd<= 4'b1000;wr,load_ir,datactl_ena,halt<= 4'b0000;endelseif(opcode=JMP)begininc_pc,load_acc,load_pc,rd<= 4
41、39;b1010;wr,load_ir,datactl_ena,halt <= 4'b0000;endelseif(opcode = STO)begin/過一個時鐘后把wr變1就可寫到RAM中inc_pc,load_acc,load_pc,rd<= 4'b0000;wr,load_ir,datactl_ena,halt<= 4'b1010;endelsebegininc_pc,load_acc,load_pc,rd<= 4'b0000;wr,load_ir,datactl_ena,halt<= 4'b0000;endstate <= 3'b110;end3'b110:/idlebeginif ( opcode = STO )begininc_pc,load_acc,load_pc,rd<= 4'b0000;wr,load_ir,datactl_ena,halt<= 4'b0010;endelseif ( opcode =ADD|opcode =ANDD|opcode=XORR|opcode=LDA)begininc_pc,load_acc,load_pc,rd<= 4'b0
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026廣東廣州銀行選聘參考考試題庫及答案解析
- 2026黑龍江哈爾濱市平房區(qū)第二幼兒園聘用制教師招聘備考考試試題及答案解析
- 2026青海果洛西寧民族中學(xué)國家公費師范生招聘2人備考考試題庫及答案解析
- 2026云南昆明海貝中學(xué)部教師招聘32人備考考試題庫及答案解析
- 2026福建海峽人力資源股份有限公司南平分公司招聘2人參考考試題庫及答案解析
- 2026云南迪慶州維西縣機關(guān)事務(wù)管理局編外人員招聘1人筆試模擬試題及答案解析
- 漢陽活動策劃方案機構(gòu)(3篇)
- 男女對抗活動方案策劃(3篇)
- 節(jié)能環(huán)?;顒臃桨覆邉?3篇)
- 2026中國科學(xué)院沈陽應(yīng)用生態(tài)研究所編輯部招聘1人(遼寧)考試參考題庫及答案解析
- 運輸人員教育培訓(xùn)制度
- 升降貨梯買賣安裝與使用說明書合同
- 河南豫能控股股份有限公司及所管企業(yè)2026屆校園招聘127人考試備考題庫及答案解析
- 房地產(chǎn)公司2025年度總結(jié)暨2026戰(zhàn)略規(guī)劃
- 物業(yè)管家客服培訓(xùn)課件
- 虛假貿(mào)易十不準(zhǔn)培訓(xùn)課件
- 中央空調(diào)多聯(lián)機施工安全管理方案
- 【初中 地理】2025-2026學(xué)年人教版七年級上冊地理期末復(fù)習(xí)提綱
- 2026年撫順師范高等??茖W(xué)校單招職業(yè)技能測試題庫附答案
- GB/T 46692.2-2025工作場所環(huán)境用氣體探測器第2部分:有毒氣體探測器的選型、安裝、使用和維護
- 2025人機共育向善而為:AI時代的教育變革探索指南
評論
0/150
提交評論