第一篇:計算機組成CPU數據通路verilog實驗報告
計算機組成與系統結構實驗報告
實驗目的:
院(系): 計算機科學與技術學院 專業班級: 學 號: 姓 名: 同 組 者: 指導教師: 實驗時間: 2012 年 5 月 23 日
完成處理器的單周期cpu的設計。實驗儀器:
PC機(安裝Altebra 公司的開發軟件 QuartusII)一臺
實驗原理:
控制器分為主控制器和局部ALU控制器兩部分。主控制器的輸入為指令操作碼op,輸出各種控制信號,并根據指令所涉及的ALU運算類型產生ALUop,同時,生成一個R-型指令的控制信號R-type,用它來控制選擇將ALUop輸出作為ALUctr信號,還是根據R-型指令中的func字段來產生ALUctr信號。
實驗過程及實驗記錄: 1.設計過程:
第一步:分析每條指令的功能,并用RTL來表示。
第二步:根據指令的功能給出所需的元件,并考慮如何將它們互連。
第三步:確定每個元件所需控制信號的取值。
第四步:匯總各指令涉及的控制信號,生成所反映指令與控制信號之間的關系圖。
第五步:根據關系表,得到每個控制信號的邏輯表達式,據此設計控制電路。
2.完成代碼的編寫,并調試運行。1)control module Control(op,func,Branch,Jump,RegDst,ALUSrc,ALUctr,MemtoReg,RegWr,MemWr,ExtOp);input [5:0] op,func;output reg Branch,Jump,RegDst,ALUSrc,MemtoReg,RegWr,MemWr,ExtOp;output reg [2:0] ALUctr;always @(op)case(op)6'b000000: begin Branch=0;Jump=0;RegDst=1;ALUSrc=0;MemtoReg=0;RegWr=1;MemWr=0;case(func)6'b100000:ALUctr=3'b001;6'b100010:ALUctr=3'b101;6'b100011:ALUctr=3'b100;6'b101010:ALUctr=3'b111;6'b101011:ALUctr=3'b110;endcase end 6'b001101: begin Branch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=0;RegWr=1;MemWr=0;ExtOp=0;ALUctr=3'b010;end 6'b001001: begin Branch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=0;RegWr=1;MemWr=0;ExtOp=1;ALUctr=3'b000;end
6'b100011: begin Branch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=1;RegWr=1;MemWr=0;ExtOp=1;ALUctr=3'b000;end 6'b101011: begin Branch=0;Jump=0;ALUSrc=1;RegWr=0;MemWr=1;ExtOp=1;ALUctr=3'b000;end 6'b000100: begin Branch=1;Jump=0;ALUSrc=0;RegWr=0;MemWr=0;ALUctr=3'b100;end 6'b000010: begin Branch=0;Jump=1;RegWr=0;MemWr=0;end endcase endmodule
2)數據通路DataRoad module DataRoad(Run,Clk,RegWr,MemWr,MemtoReg,RegDst,Branch,Jump,ExtOp,ALUctr,ALUSrc,busA,busB,busW,Instruction,Reg0,Reg1,Reg2,Reg3,Reg4,Mem1,Mem2,Mem3,Result,Im);input Run,Clk,RegWr,MemWr,MemtoReg,RegDst,Branch,Jump,ExtOp,ALUSrc;input [2:0] ALUctr;output [31:0] Instruction,busA,busB,busW,Reg0,Reg1,Reg2,Reg3,Reg4,Mem1,Mem2,Mem3,Result,Im;wire [31:0] busC,DataOut;
wire [15:0] im;wire [4:0] Rs,Rd,Rt;wire Overflow,Zero;QZL qzl(Clk,Branch,Jump,Zero,Instruction,Run);assign Rs=Instruction[25:21];assign Rt=Instruction[20:16];assign Rd=Instruction[15:11];assign im=Instruction[15:0];Register register(Run,RegWr,Overflow,RegDst,Rd,Rs,Rt,busW,busA,busB,Clk,Reg0,Reg1,Reg2,Reg3,Reg4);ALU alu(busA,busC,ALUctr,Zero,Overflow,Result);DataMem(Run,MemWr,Clk,busB,DataOut,Result,Mem1,Mem2,Mem3);MUX mux1(ALUSrc,busB,Im,busC);MUX mux2(MemtoReg,Result,DataOut,busW);Extender ext(im,Im,ExtOp);endmodule 3)取指令
module QZL(Clk,Branch,Jump,Zero,Instruction,Run);input Clk,Branch,Jump,Zero,Run;output [31:0] Instruction;wire [4:0] addmem;reg [29:0] PC;wire [29:0] Newpc,pc_1,pc_2,pc_3,pc_12,imm30;wire Branch_Zero;assign addmem={PC[2:0],2'b00};InsMem GetIns(addmem,Instruction);always @(negedge Clk)if(Run==1)begin PC<=Newpc;end else begin
PC<=0;end assign pc_1=PC+1;assign imm30={{14{Instruction[15]}},Instruction[15:0]};assign pc_2=pc_1+imm30;assign pc_3={PC[29:26],Instruction[25:0]};assign Branch_Zero=Branch&Zero;MUX m1(Branch_Zero,pc_1,pc_2,pc_12);MUX m2(Jump,pc_12,pc_3,Newpc);endmodule module InsMem(addmem,Instruction);input [4:0] addmem;output reg[31:0] Instruction;reg [31:0] Mem[31:0];always @(*)begin Mem[0]<={6'b100011,5'b00000,5'b00001,5'b00000,5'b00000,6'b000001};Mem[4]<={6'b100011,5'b00000,5'b00010,5'b00000,5'b00000,6'b000010};Mem[8]<={6'b000000,5'b00001,5'b00010,5'b00011,5'b00000,6'b100000};Mem[12]<={6'b101011,5'b00000,5'b00011,5'b00000,5'b00000,6'b000010};Mem[16]<={6'b001101,5'b00100,5'b00100,5'b11111,5'b11111,6'b111111};Mem[20]<={6'b000000,5'b00011,5'b00010,5'b00010,5'b00000,6'b100010};Mem[24]<={6'b000100,5'b00010,5'b00001,5'b00000,5'b00000,6'b001000};Mem[28]<={6'b000010,5'b00000,5'b00000,5'b00000,5'b00000,6'b000000};end always @(*)
Instruction=Mem[addmem];Endmodule
4)ALU module ALU(A,B,ALUctr,Zero,Overflow,Result);parameter n=32;input [n-1:0] A,B;input [2:0] ALUctr;output Zero,Overflow;output [n-1:0] Result;wire SUBctr,OVctr,SIGctr,SignA,SignB,Cin;wire [1:0] OPctr;wire [n-1:0] X,Y,Z,Less,M,N,Add_Result;wire Add_Carry,Add_Overflow,Add_Sign;assign M={n{1'b0}};assign N={n{1'b1}};assign SUBctr=ALUctr[2];assign OVctr=!ALUctr[1]&ALUctr[0];assign SIGctr=ALUctr[0];assign OPctr[1]=ALUctr[2]&ALUctr[1];assign OPctr[0]=!ALUctr[2]&ALUctr[1]&!ALUctr[0];assign Cin=SUBctr;assign X=B^{n{SUBctr}};assign Y=A|B;Adder ad(Cin,A,X,Add_Carry,Add_Overflow,Add_Sign,Add_Result,Zero);assign SignA=Cin^Add_Carry;assign SignB=Add_Overflow^Add_Sign;assign Overflow=Add_Overflow&OVctr;MUX m1(SIGctr,SignA,SignB,Less);defparam m1.k=1;MUX m2(Less,M,N,Z);MUX3_1 m3(Add_Result,Y,Z,Result,OPctr);
endmodule module MUX3_1(A,B,C,D,ctr);parameter k=32;input [k-1:0] A,B,C;output reg [k-1:0] D;input [1:0] ctr;always @(A or B or C or ctr)if(ctr==2'b00)D=A;else if(ctr==2'b01)D=B;else if(ctr==2'b10)D=C;endmodule module Adder(Cin,X,Y,Add_Carry,Add_Overflow,Add_Sign,Add_Result,Zero);parameter k=32;input [k-1:0] X,Y;input Cin;output reg [k-1:0] Add_Result;output Add_Carry,Add_Overflow,Add_Sign,Zero;reg Add_Carry;assign Zero=~|Add_Result;assign Add_Sign=Add_Result[k-1];assign Add_Overflow=(X[k-1]&Y[k-1]&~Add_Result[k-1])|(~X[k-1]&~Y[k-1]&Add_Result[k-1]);always @(X or Y or Cin){Add_Carry,Add_Result}=X+Y+Cin;Endmodule
5)數據存數 module DataMem(Run,MemWr,Clk,DataIn,DataOut,Adr,Mem1,Mem2,Mem3);
input Run,MemWr,Clk;input [31:0] DataIn,Adr;output [31:0] DataOut;output [31:0] Mem1,Mem2,Mem3;reg[31:0] Mem[31:0];assign Mem1=Mem[1];assign Mem2=Mem[2];assign Mem3=Mem[3];assign DataOut=Mem[Adr];always @(negedge Clk)if(Run==0)begin Mem[0]=0;Mem[1]=10;Mem[2]=20;Mem[3]=30;end else begin if(MemWr==1)Mem[Adr]=DataIn;end endmodule 6)寄存器 module Register(Run,Regwr,Overflow,RegDst,Rd,Rs,Rt,busW,busA,busB,Clk,Reg0,Reg1,Reg2,Reg3,Reg4);input Regwr,Clk,RegDst,Run,Overflow;input [31:0] busW;input [4:0] Rd,Rt,Rs;output reg [31:0] busA,busB;output [31:0] Reg0,Reg1,Reg2,Reg3,Reg4;reg [31:0] Mem[31:0];reg [4:0] Rw;
wire [4:0] Ra,Rb;wire RegWr;assign RegWr=Regwr&~Overflow;assign Ra=Rs;assign Rb=Rt;assign Reg0=Mem[0];assign Reg1=Mem[1];assign Reg2=Mem[2];assign Reg3=Mem[3];assign Reg4=Mem[4];always @(Rd or Rt or RegDst)if(RegDst==1'b1)Rw=Rd;else Rw=Rt;always @(negedge Clk)if(Run==1'b1)begin if(RegWr==1'b1)Mem[Rw]=busW;end else begin Mem[0]<=0;Mem[1]<=2;Mem[2]<=4;Mem[3]<=6;Mem[4]<=8;end always @(Ra or Rb)if(Run==1'b1)begin busA=Mem[Ra];busB=Mem[Rb];
end else begin busA=0;busB=0;end endmodule
7)數據選擇
module MUX(ctr,X,Y,Z);parameter k=32;input [k-1:0] X,Y;output reg [k-1:0] Z;input ctr;always @(X or Y or ctr)if(ctr==1'b0)Z<=X;else Z<=Y;endmodule 3.進行仿真并驗證其正確性:
第二篇:計算機組成原理實驗報告+++數據通路實驗
數據通路組成實驗
一、實驗目的
(1)將雙端口通用寄存器組和雙端口存儲器模塊聯機;
(2)進一步熟悉計算機的數據通路;
(3)掌握數字邏輯電路中故障的一般規律,以及排除故障的一般原則和方法;
(4)鍛煉分析問題與解決問題的能力,在出現故障的情況下,獨立分析故障現象,并排除故障。
二、實驗電路
圖9.14示出了數據通路實驗電路圖,它是將前面進行的雙端口存儲器實驗模塊和一個雙端口通用寄存器組模塊連接在一起形成的,存儲器的指令端口不參與本次實驗,通用寄存器組連接運算器模塊,本實驗涉及其中的操作數寄存器DR2。
由于RAM是三態門輸出,因而可以將RAM連接到數據總線BUS上。此外,BUS上還連接著雙端口通用寄存器組。這樣,寫入RAM的數據可由通用寄存器提供,而從RAM讀出的數據也可送到通用寄存器保存。
RAM和DR2在前面的實驗中使用過。對于通用寄存器組RF,它由一個在系統可編程(In System Programable)芯片ispLSI 1016固化了通用寄存器組的功能而成,其功能與雙端口寄存器組MC14580相類似,內含四個8位的通用寄存器,帶有一個輸入端口和兩個輸出端口,從而可以同時寫入一路數據,讀出兩路數據。輸入端口取名為WR端口,連接一個8位的緩沖寄存器ER(已集成在ispLSI 1016芯片中),輸出端口取名為RS端口、RD端口,分別連接運算器模塊的兩個操作數寄存器DR1、DR2,其中,連接DR1的RS端口還可通過一個8位的三態門RSO直接向BUS輸出。雙端口通用寄存器組模塊的控制信號中,RS1、RS0用于選擇從RS端口讀出的通用寄存器,RD1、RD0用于選擇從RD端口讀出的通用寄存器,上述選擇信號在T1脈沖的上升沿到來時生效。而WR1、WR0則用于選擇從WR端口寫入的通用寄存器。WRD是寫入控制信號,WRD=1時,在T2上升沿的時刻,從ER寫入數據;WRD=0時,ER中的數據不寫入通用寄存器中。LDER信號控制ER從BUS寫入數據,RS-BUS信號則控制RS端口到BUS的輸出三態門。以上控制信號各自連接一個二進制開關。
三、實驗設備
(1)JYS-4計算機組成原理實驗儀一臺(2)雙蹤示波器一臺(3)直流萬用表一只(4)邏輯測試筆一支
四、實驗任務
(1)將實驗電路與操作面板的有關信號進行線路連接,方法同前面的實驗。(2)用8位數據開關向RF中的四個通用寄存器分別置入以下數據(十六進制):R0=0F,R1=F0,R2=55,R3=AA。
給R0置入0F的步驟是:先用8位數碼開關將0F置入ER,并且選擇WR1=WR0=0,再將ER的數據置入RF。給其他通用寄存器置入數據的步驟與此類似。
(3)分別將R0至R3中的數據同時讀入到DR2寄存器和BUS上,觀察其數據是否存入R0至R3中的數據,并記錄數據。其中BUS上的數據可直接用指示燈顯示,DR2中的數據可用邏輯筆測試有關引腳。
(4)用8位數碼開關向AR1送入一個地址0F,然后將R0中的0F寫入RAM。用同樣的方法,依次將R1至R3中的數據寫入RAM中的F0、55、AA單元。
(5)分別將RAM中AA單元的數據寫入R0,55單元的數據寫入R1,F0單元寫入R2,0F單元寫入R3。然后將R3、R2、R1、R0中的數據讀出到BUS上,通過指示燈驗證讀出的數據是否正確,并記錄數據。
(6)進行RF并行輸入輸出試驗。
1.選擇RS端口對應R0,RD端口對應R1,WR端口對應R2,并使WRD=1,觀察并行輸入輸出的結果。選擇RS端口對應R2,驗證剛才的寫入是否生效。記錄數據。2.保持RS端口和WR端口同時對應R2,WRD=1,而ER中置入新的數據,觀察并行輸入輸出的結果,RS端口輸出的是舊的還是新的數據?(7)在數據傳送過程中,發現了什么故障?如何克服的?
五、實驗要求(1)做好實驗預習和準備工作,掌握實驗電路的數據通路特點和通用寄存器組的功能特性。(2)寫出實驗報告,內容為
1.實驗目的;
2.如碰到故障,記錄故障現象,排除故障的分析思路,故障定位及故障的性質; 3.實驗數據記錄;
4.值得討論的其他問題。
第三篇:數據通路實驗報告
數據通路實驗報告
數據通路實驗報告
一. 實驗概述。
1.數據通路的設計原則。
數據通路的設計直接影響到控制器的設計,同時也影響到數字系統的速度指標和成本。一般來說,處理速度快的數字系統,其中獨立傳遞信息的通路較多。當然,獨立數據傳送通路的數量增加勢必提高控制器設計復雜度。因此,在滿足速度指標的前提下,為使數字系統結構盡量簡單,一般小型系統中多采用單一總線結構。在較大系統中可采用雙總線結構或者三線結構。2.數據通路的結構。
① 算術邏輯單元ALU:有S3,S2,S1,S0,M,CN等6個控制端,用于選擇運算類型。
② 暫存器A和B:保存通用寄存器組讀出的數據或BUS上來的數據。③ 通用寄存器組R:暫時保存運算器單元ALU算出的結果。④ 寄存器C:保存ALU運算產生的進位信號。
⑤ RAM隨機讀寫存儲器:受讀/寫操作以及時鐘信號等控制。⑥ MAR:RAM的專用地址寄存器,寄存器的長度決定RAM的容量。⑦ IR:專用寄存器,可存放由RAM讀出的一個特殊數據。
⑧ 控制器:用來產生數據通路中的所有控制信號,它們與各個子系統上的使能控制信號一一對應。
⑨ BUS:單一數據總線,通過三態門與有關子系統進行連接。
數據通路實驗報告
二. 實驗設計及其仿真檢測。
一,運算器。
8位運算器VHDL
數據通路實驗報告
數據通路實驗報告
二波形仿真
存儲器。
頂層設計:
其中sw_pc_ar的VHDL語言描述:,數據通路實驗報告
波形仿真
三,原仿真實驗電路。
數據通路實驗報告
仿真結果:
四,修改電路。
因為此次實驗結果需要下載到FPGA板中進行操作及觀察,而原始電路中,需要輸入的變量數量過多,導致電板中的輸入按鍵不夠用,所以需要對電路進行修改。此時我們引入一個計數器PC來代替需要手動輸入的指令alu_sel[5..0]以及數據d[7...0]。同時還需要引入數碼管的位選信號譯碼器choose和段選信號譯碼器xianshi。計數器PC的VHDL語言描述
數據通路實驗報告
位選信號譯碼器choose的VHDL語言描述
數據通路實驗報告
段選信號譯碼器的VHDL語言描述
經過修改和完善以后的電路圖為
數據通路實驗報告
完善后的電路的引腳分配情況
數據通路實驗報告
三. 實驗過程。
a)進行數學運算以及將運算結果儲存在某個固定的內存地址處。然后從該地址處讀出結果 i.ii.打開pc_sel[2],重置地址計數器。
打開總線開關bus_sel[0],和PC_sel[2],pc_sel[1],pc_sel[0],讓地址計數器開始計數,跳變到某個地址x時關閉。
iii.打開總線開關BUS_SEL[4],打開暫存器r1的開關ld_reg[4],然后打開計數器開關en計數器開始計數,當計數到需要的數字a時,關閉計數器開關en,此時數字a存入暫存器r1,關閉暫存器的開關ld_reg[4],后再關閉總線開關BUS_SEL[4],然后再打開計數器的清零開關clr再關閉。iv.v.同理第iii步,在暫存器r2中存入數據b。打開總線開關
bus_sel[0].地址計數器開關
ld_reg[0]和pc_sel[2],pc_sel[1],pc_sel[0]選擇存儲地址 vi.打開運算器到總線的開關bus_sel[1],打開計數器en計數開關en當計數器跳
數據通路實驗報告
變到加法指令011001時,關閉計數開關en,然后代開rom的地址開關pc_sel[2],以及可寫開關we_rd[1]。將從運算器中計算出來的運算結果a+b存儲到ram中的x地址中,關閉可寫開關we_rd[1],關閉pc_sel[2]和總線開關,最后將計數器清零。
vii.打開ram的可讀開關,讀取x地址處的數據a+b。
四. 實驗現象。
輸入數據a
輸入數據b
數據通路實驗報告
進行運算并將運算結果寫入內存
數據通路實驗報告
從內存中讀取計算結果
數據通路實驗報告
五. 實驗心得。
第一次在電板上進行這么多的操作。操作過程雖然很多,但只要理解操作過程,明白各個按鍵所設置的引腳作用,實驗其實并不難,重點在于要理解過程,明白數據的輸入,存入寄存器,運算以及往內存中進行存取值的操作,那么數據通路的按鍵很容易記住。
在實驗過程中還是存在很多問題的,尤其的剛開始做實驗的時候,不理解數據通路實驗過程中各個門的輸入的意義和順序,但真正懂得的時候,實驗就變得簡單了。
第四篇:非常簡單CPU數據通路設計實驗報告
非常簡單CPU數據通路設計
【實驗目的】
1.掌握CPU的設計步驟 2.學會芯片的運用及其功能 【實驗環境】
Maxplus2環境下實現非常簡單CPU數據通路的設計 【實驗內容】
繪制非常簡單CPU的寄存器:一個8位累加器AC,一個6位的地址寄存器AR,一個6位的程序計數器PC,一個8位的數據寄存器DR,一個2位的指令寄存器IR。其數據通路詳見教材P。
1、零件制作
6位寄存器
(自行設計)
6位計數器
(自行設計)
8位寄存器
(可選擇74系列宏函數74273)
8位計數器
(由兩個74161構成)
2位寄存器
(由D觸發器構成,自行設計)
6三態緩沖器
(自行設計,可由74244內部邏輯修改而成)
8三態緩沖器
(選擇74系列宏函數74244,或作修改)
alu模塊
(自行設計,限于時間,其內部邏輯不作要求)
2、選擇器件,加入數據通路頂層圖
8位累加器AC:選擇8位計數器
6位地址寄存器AR:reg6
6位的程序計數器PC:cou6
8位的數據寄存器DR:選擇8位寄存器
2位的指令寄存器IR:選擇2位寄存器
3、為PC、DR加入三態緩沖器。
4、調整版面大小,器件位置。
5、設計地址引腳、數據引腳、8位內部總線,加入數據引腳到內部總線的緩沖器。
6、連接各器件之間以及到內部總線的線路,設計并標注各控制信號。
7、(選做)編譯之后,給出微操作 AR<-PC 的測試方法及仿真結果。
8、實驗報告中應給出各元部件的實現方法、內部邏輯貼圖、打包符號說
明及頂層的“非常簡單CPU”數據通路圖。
實驗報告
一、實驗步驟
基于前面非常簡單CPU的講解,我掌握了非常簡單CPU的指令集結構及非常簡單CPU的指令讀取過程和執行過程,本次實驗是在上次實驗的基礎之上完成非常簡單CPU數據通路的設計,其步驟如下:(1)、AC累加器原理圖如下:
打包后得到如下:
(2)、兩位高地址寄存器IR的設計如下:
打包后得電路圖如下:
(3)、6位地址寄存器AR設計如下:
打包后AR如下:
(4)、八位地址寄存器DR如下:
打包后如下:
(5)、程序計數器PC如下:(老師已給出)
打包后得:
(6)、控制8位地址總線的三態緩沖器電路如下:
打包圖如下:
同理有控制6位地址總線的三態緩沖器:
打包圖如下:
最重要的部分ALU設計如下:
由一個八與門電路和并行加法器連入一個16位輸入的數據選擇器,在受到SEL和GN控制時分別選擇and8或者并行加法器得到的結果并送到AC的輸入端
打包如下:
其中八輸入與門為下圖:
并行加法器為下圖:
十六位數據選擇器為下圖:
最后得到簡單CPU設計數據通路如下:
仿真波形為下圖:
說明:從圖中可以看出當PC輸入為100011時AR的輸出也為10011,即該CPU實現了PC到AR的功能。CPU功能驗證完畢!實驗結論:
整體來看,簡單CPU的設計基本完工,但是有些地方不夠完善,所以還沒能夠實現所有的 功能。實驗感想:
本次實驗是在對基本CPU的設計的理解上完成的,其中運用到了很多數電方面的知識。所以這對知識的融會貫通很有好處。設計該簡單CPU時比較難的地方就是ALU部分,這里用到了并行加法器,數據選擇器和門電路的等,由于在EDA實驗時有了比較好的基礎,所以在設計這個部分時不時非常難,但是我也明白了以前知識的用處是很大的,做好復習很重要!
第五篇:運算器數據通路實驗報告
運算器數據通路實驗
設計報告
學號: 姓名: 成績: 學號: 姓名: 成績:
一、實驗名稱:
總線、半導體靜態存儲器實驗
二、實驗目的.1.熟悉函數功能發生器的功能、使用方法。2.熟悉運算器的數據傳送通路。
3.完成幾種算邏運算操作,加深對運算器工作原理的理解。
三、實驗原理
運算器是計算機中對數據進行運算操作的重要部件,它的核心是ALU 函數功能發生器(由EPM7064S 構成),其次還要有存放操作數和運算的中間結果之寄存器以及傳送數據的總線等部分。選用不同的控制信號,運算器可以完成不同的運算功能。1.函數功能發生器(ALU)的功能。
該函數功能發生器(ALU),當輸入為Aj、Bj,對應輸出為Fj(j=0,1,2,3,4,5,6,7),它可 實現8 種不同的算術運算和邏輯算,而且通過對控制參數SEL2~SEL0S0 來選擇。2.數據傳送通路實驗電路方案
實驗方案框圖見圖2—5 所示。
圖中SA、SB 為存放兩個現行操作的緩沖寄存器,其中SA 兼作存放中間結果的累加器,并且可以通過SA 所連接的八個數據燈顯示。SA、SB 接收來自總線的數據信息送入ALU 進行 算術或邏輯操作。通過移位門將運算操作結果送到總線。并且ALU 和總線之間需用三態門隔 離(采用74LS245)。
四、實驗內容
1.按照實驗電路方案框圖,設計一個能完成下列八種補碼運算指令的八位運算器。該運算器實現的八種功能如表2—1 所示。
表2—1:
2.根據運算器設計,選擇所需元器件,畫出實驗電路的詳細邏輯圖,對開關,單脈沖等 定義。因為和上次實驗類似,也是絕大多數的器件在“數據通路”中已安排好,只要控制各 個控制點即可,除了開關組通過三態傳輸門(74LS245)的接法和實驗一一樣外,設置一個指令寄存器(IR),用74LS573 擔當IR。通過八根連接線和“數據通路”中的八位總線連接起來。存放ALU 的控制信息SEL2~SEL0。為了便于觀察IR 中內容,可以在IR 的輸出端同時接上三 個電平顯示燈。有的同學如用三個電平開關設置SEL2~SLE0。當然可以得出結果,但是由于 IR 是一個不可缺少的計算機部件,為了達到完整熟悉計算機各組成部分的目的,這里專門設置了指令寄存器IR。
3.在電路上進行表2—1 所列的八種指令的手動操作,每次一條指令。實驗時可由數據 開關輸入指令碼及操作數,予以功能的驗證。4.本實驗應實現的操作
K→SA(開關輸入的第一個操作數置入SA,LED 顯示)K→SB(開關輸入的第二個操作數置入SB,無顯示)K→IR(開關輸入的ALU 控制代碼置入IR)
ALU 運算結果通過ALU-244→SA(將運算結果送SA 顯示)具體實驗過程(僅僅作為參考)如下:
1)從輸入設備(八個鈕子開關)置入第一個數據,74LS245 的E=0,74LS573 的C 由“0”變為“1”(鎖存)后再變為“0”(保持);送入Sa(該寄存器接有LED 顯示); 2)從輸入設備(八個鈕子開關)置入第一個數據,74LS245 的E=0,74LS573 的C 由“0”變為“1”(鎖存)后再變為“0”(保持);送入Sb(該寄存器沒有接LED 顯示); 3)從輸入設備(八個鈕子開關)將需要進行運算操作(如加法操作)的控制代碼(具體內容可見表3-4)置入到IR,74LS245 的E=0,74LS573 的C 由“0”變為“1”(鎖存)后再變為“0”(保持);
4)控制接通ALU-244,使運算結果上總線;
5)將結果置入Sa,并通過所接的LED 將結果顯示出來。
五、測試結果與性能分析
1、測試結果:
1)數據A準備→三態門①打開→給寄存器Sa脈沖→數據進入Sa;
數據B準備→給寄存器Sb脈沖→數據進入Sb; 數據準備(指令)→給指令寄存器IR脈沖→指令進入IR→三態門①關閉; 2)ALU按照指令進行計算,結果進入總線→三態門②(寄存器Sa往顯示燈)打開→給寄存器Sa脈沖→顯示燈顯示計算結果
實驗輸入三組數據進行計算 00010000 – 00000001 = 00001111;00010101 & 00001010 = 00000000;00001000 + 00000110 = 00001110;
2、性能分析
單總線結構數據傳送慢,使用多總線結構可以提高數據傳送效率 另外,EPM7064S 器件性能介紹:
高性能和EEPROM的可編程邏輯器件(PLD)的第二代基于Max 架構 5.0-V在系統可編程能力(ISP)具有完整的EPLD的邏輯密度
5納秒引腳到引腳的邏輯延時高達175.4 MHz的計數器頻率(包括互連)
六、課程設計總結(包括設計的總結和需要改進之處及體會)
通過這次實驗設計,我們可以了解運算器數據通路的工作原理,各組數據的走向和時間邏輯關系,也更清楚認識了指令控制的重要性。另外這是第一次在電腦上對運算器芯片的引腳進行設置,稍微有一點差錯就會造成實驗結果的差異,因此使得我們在實驗中更加專注和仔細。這次實驗的分工也很明確,我負責在實驗臺上搭線,張成濤同學負責在電腦上設置運算器引腳。但最終因為實驗臺的更換問題,實驗結果沒有調試出來。換了一個電腦進行引腳設置后,終于成功了。由于有協調的合作,實驗操作過程也不會復雜繁瑣,這次實驗過程很有趣,并且讓我們對機器內部數據通路的理解有更進一步的啟發。
教師評語:
教師簽字:
日期: