第一篇:非常簡(jiǎn)單CPU數(shù)據(jù)通路設(shè)計(jì)實(shí)驗(yàn)報(bào)告
非常簡(jiǎn)單CPU數(shù)據(jù)通路設(shè)計(jì)
【實(shí)驗(yàn)?zāi)康摹?/p>
1.掌握CPU的設(shè)計(jì)步驟 2.學(xué)會(huì)芯片的運(yùn)用及其功能 【實(shí)驗(yàn)環(huán)境】
Maxplus2環(huán)境下實(shí)現(xiàn)非常簡(jiǎn)單CPU數(shù)據(jù)通路的設(shè)計(jì) 【實(shí)驗(yàn)內(nèi)容】
繪制非常簡(jiǎn)單CPU的寄存器:一個(gè)8位累加器AC,一個(gè)6位的地址寄存器AR,一個(gè)6位的程序計(jì)數(shù)器PC,一個(gè)8位的數(shù)據(jù)寄存器DR,一個(gè)2位的指令寄存器IR。其數(shù)據(jù)通路詳見(jiàn)教材P。
1、零件制作
6位寄存器
(自行設(shè)計(jì))
6位計(jì)數(shù)器
(自行設(shè)計(jì))
8位寄存器
(可選擇74系列宏函數(shù)74273)
8位計(jì)數(shù)器
(由兩個(gè)74161構(gòu)成)
2位寄存器
(由D觸發(fā)器構(gòu)成,自行設(shè)計(jì))
6三態(tài)緩沖器
(自行設(shè)計(jì),可由74244內(nèi)部邏輯修改而成)
8三態(tài)緩沖器
(選擇74系列宏函數(shù)74244,或作修改)
alu模塊
(自行設(shè)計(jì),限于時(shí)間,其內(nèi)部邏輯不作要求)
2、選擇器件,加入數(shù)據(jù)通路頂層圖
8位累加器AC:選擇8位計(jì)數(shù)器
6位地址寄存器AR:reg6
6位的程序計(jì)數(shù)器PC:cou6
8位的數(shù)據(jù)寄存器DR:選擇8位寄存器
2位的指令寄存器IR:選擇2位寄存器
3、為PC、DR加入三態(tài)緩沖器。
4、調(diào)整版面大小,器件位置。
5、設(shè)計(jì)地址引腳、數(shù)據(jù)引腳、8位內(nèi)部總線,加入數(shù)據(jù)引腳到內(nèi)部總線的緩沖器。
6、連接各器件之間以及到內(nèi)部總線的線路,設(shè)計(jì)并標(biāo)注各控制信號(hào)。
7、(選做)編譯之后,給出微操作 AR<-PC 的測(cè)試方法及仿真結(jié)果。
8、實(shí)驗(yàn)報(bào)告中應(yīng)給出各元部件的實(shí)現(xiàn)方法、內(nèi)部邏輯貼圖、打包符號(hào)說(shuō)
明及頂層的“非常簡(jiǎn)單CPU”數(shù)據(jù)通路圖。
實(shí)驗(yàn)報(bào)告
一、實(shí)驗(yàn)步驟
基于前面非常簡(jiǎn)單CPU的講解,我掌握了非常簡(jiǎn)單CPU的指令集結(jié)構(gòu)及非常簡(jiǎn)單CPU的指令讀取過(guò)程和執(zhí)行過(guò)程,本次實(shí)驗(yàn)是在上次實(shí)驗(yàn)的基礎(chǔ)之上完成非常簡(jiǎn)單CPU數(shù)據(jù)通路的設(shè)計(jì),其步驟如下:(1)、AC累加器原理圖如下:
打包后得到如下:
(2)、兩位高地址寄存器IR的設(shè)計(jì)如下:
打包后得電路圖如下:
(3)、6位地址寄存器AR設(shè)計(jì)如下:
打包后AR如下:
(4)、八位地址寄存器DR如下:
打包后如下:
(5)、程序計(jì)數(shù)器PC如下:(老師已給出)
打包后得:
(6)、控制8位地址總線的三態(tài)緩沖器電路如下:
打包圖如下:
同理有控制6位地址總線的三態(tài)緩沖器:
打包圖如下:
最重要的部分ALU設(shè)計(jì)如下:
由一個(gè)八與門(mén)電路和并行加法器連入一個(gè)16位輸入的數(shù)據(jù)選擇器,在受到SEL和GN控制時(shí)分別選擇and8或者并行加法器得到的結(jié)果并送到AC的輸入端
打包如下:
其中八輸入與門(mén)為下圖:
并行加法器為下圖:
十六位數(shù)據(jù)選擇器為下圖:
最后得到簡(jiǎn)單CPU設(shè)計(jì)數(shù)據(jù)通路如下:
仿真波形為下圖:
說(shuō)明:從圖中可以看出當(dāng)PC輸入為100011時(shí)AR的輸出也為10011,即該CPU實(shí)現(xiàn)了PC到AR的功能。CPU功能驗(yàn)證完畢!實(shí)驗(yàn)結(jié)論:
整體來(lái)看,簡(jiǎn)單CPU的設(shè)計(jì)基本完工,但是有些地方不夠完善,所以還沒(méi)能夠?qū)崿F(xiàn)所有的 功能。實(shí)驗(yàn)感想:
本次實(shí)驗(yàn)是在對(duì)基本CPU的設(shè)計(jì)的理解上完成的,其中運(yùn)用到了很多數(shù)電方面的知識(shí)。所以這對(duì)知識(shí)的融會(huì)貫通很有好處。設(shè)計(jì)該簡(jiǎn)單CPU時(shí)比較難的地方就是ALU部分,這里用到了并行加法器,數(shù)據(jù)選擇器和門(mén)電路的等,由于在EDA實(shí)驗(yàn)時(shí)有了比較好的基礎(chǔ),所以在設(shè)計(jì)這個(gè)部分時(shí)不時(shí)非常難,但是我也明白了以前知識(shí)的用處是很大的,做好復(fù)習(xí)很重要!
第二篇:計(jì)算機(jī)組成CPU數(shù)據(jù)通路verilog實(shí)驗(yàn)報(bào)告
計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)?zāi)康?
院(系): 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 專業(yè)班級(jí): 學(xué) 號(hào): 姓 名: 同 組 者: 指導(dǎo)教師: 實(shí)驗(yàn)時(shí)間: 2012 年 5 月 23 日
完成處理器的單周期cpu的設(shè)計(jì)。實(shí)驗(yàn)儀器:
PC機(jī)(安裝Altebra 公司的開(kāi)發(fā)軟件 QuartusII)一臺(tái)
實(shí)驗(yàn)原理:
控制器分為主控制器和局部ALU控制器兩部分。主控制器的輸入為指令操作碼op,輸出各種控制信號(hào),并根據(jù)指令所涉及的ALU運(yùn)算類型產(chǎn)生ALUop,同時(shí),生成一個(gè)R-型指令的控制信號(hào)R-type,用它來(lái)控制選擇將ALUop輸出作為ALUctr信號(hào),還是根據(jù)R-型指令中的func字段來(lái)產(chǎn)生ALUctr信號(hào)。
實(shí)驗(yàn)過(guò)程及實(shí)驗(yàn)記錄: 1.設(shè)計(jì)過(guò)程:
第一步:分析每條指令的功能,并用RTL來(lái)表示。
第二步:根據(jù)指令的功能給出所需的元件,并考慮如何將它們互連。
第三步:確定每個(gè)元件所需控制信號(hào)的取值。
第四步:匯總各指令涉及的控制信號(hào),生成所反映指令與控制信號(hào)之間的關(guān)系圖。
第五步:根據(jù)關(guān)系表,得到每個(gè)控制信號(hào)的邏輯表達(dá)式,據(jù)此設(shè)計(jì)控制電路。
2.完成代碼的編寫(xiě),并調(diào)試運(yùn)行。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)數(shù)據(jù)通路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)數(shù)據(jù)存數(shù) 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)數(shù)據(jù)選擇
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.進(jìn)行仿真并驗(yàn)證其正確性:
第三篇:數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
一. 實(shí)驗(yàn)概述。
1.數(shù)據(jù)通路的設(shè)計(jì)原則。
數(shù)據(jù)通路的設(shè)計(jì)直接影響到控制器的設(shè)計(jì),同時(shí)也影響到數(shù)字系統(tǒng)的速度指標(biāo)和成本。一般來(lái)說(shuō),處理速度快的數(shù)字系統(tǒng),其中獨(dú)立傳遞信息的通路較多。當(dāng)然,獨(dú)立數(shù)據(jù)傳送通路的數(shù)量增加勢(shì)必提高控制器設(shè)計(jì)復(fù)雜度。因此,在滿足速度指標(biāo)的前提下,為使數(shù)字系統(tǒng)結(jié)構(gòu)盡量簡(jiǎn)單,一般小型系統(tǒng)中多采用單一總線結(jié)構(gòu)。在較大系統(tǒng)中可采用雙總線結(jié)構(gòu)或者三線結(jié)構(gòu)。2.數(shù)據(jù)通路的結(jié)構(gòu)。
① 算術(shù)邏輯單元ALU:有S3,S2,S1,S0,M,CN等6個(gè)控制端,用于選擇運(yùn)算類型。
② 暫存器A和B:保存通用寄存器組讀出的數(shù)據(jù)或BUS上來(lái)的數(shù)據(jù)。③ 通用寄存器組R:暫時(shí)保存運(yùn)算器單元ALU算出的結(jié)果。④ 寄存器C:保存ALU運(yùn)算產(chǎn)生的進(jìn)位信號(hào)。
⑤ RAM隨機(jī)讀寫(xiě)存儲(chǔ)器:受讀/寫(xiě)操作以及時(shí)鐘信號(hào)等控制。⑥ MAR:RAM的專用地址寄存器,寄存器的長(zhǎng)度決定RAM的容量。⑦ IR:專用寄存器,可存放由RAM讀出的一個(gè)特殊數(shù)據(jù)。
⑧ 控制器:用來(lái)產(chǎn)生數(shù)據(jù)通路中的所有控制信號(hào),它們與各個(gè)子系統(tǒng)上的使能控制信號(hào)一一對(duì)應(yīng)。
⑨ BUS:?jiǎn)我粩?shù)據(jù)總線,通過(guò)三態(tài)門(mén)與有關(guān)子系統(tǒng)進(jìn)行連接。
數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
二. 實(shí)驗(yàn)設(shè)計(jì)及其仿真檢測(cè)。
一,運(yùn)算器。
8位運(yùn)算器VHDL
數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
二波形仿真
存儲(chǔ)器。
頂層設(shè)計(jì):
其中sw_pc_ar的VHDL語(yǔ)言描述:,數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
波形仿真
三,原仿真實(shí)驗(yàn)電路。
數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
仿真結(jié)果:
四,修改電路。
因?yàn)榇舜螌?shí)驗(yàn)結(jié)果需要下載到FPGA板中進(jìn)行操作及觀察,而原始電路中,需要輸入的變量數(shù)量過(guò)多,導(dǎo)致電板中的輸入按鍵不夠用,所以需要對(duì)電路進(jìn)行修改。此時(shí)我們引入一個(gè)計(jì)數(shù)器PC來(lái)代替需要手動(dòng)輸入的指令alu_sel[5..0]以及數(shù)據(jù)d[7...0]。同時(shí)還需要引入數(shù)碼管的位選信號(hào)譯碼器choose和段選信號(hào)譯碼器xianshi。計(jì)數(shù)器PC的VHDL語(yǔ)言描述
數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
位選信號(hào)譯碼器choose的VHDL語(yǔ)言描述
數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
段選信號(hào)譯碼器的VHDL語(yǔ)言描述
經(jīng)過(guò)修改和完善以后的電路圖為
數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
完善后的電路的引腳分配情況
數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
三. 實(shí)驗(yàn)過(guò)程。
a)進(jìn)行數(shù)學(xué)運(yùn)算以及將運(yùn)算結(jié)果儲(chǔ)存在某個(gè)固定的內(nèi)存地址處。然后從該地址處讀出結(jié)果 i.ii.打開(kāi)pc_sel[2],重置地址計(jì)數(shù)器。
打開(kāi)總線開(kāi)關(guān)bus_sel[0],和PC_sel[2],pc_sel[1],pc_sel[0],讓地址計(jì)數(shù)器開(kāi)始計(jì)數(shù),跳變到某個(gè)地址x時(shí)關(guān)閉。
iii.打開(kāi)總線開(kāi)關(guān)BUS_SEL[4],打開(kāi)暫存器r1的開(kāi)關(guān)ld_reg[4],然后打開(kāi)計(jì)數(shù)器開(kāi)關(guān)en計(jì)數(shù)器開(kāi)始計(jì)數(shù),當(dāng)計(jì)數(shù)到需要的數(shù)字a時(shí),關(guān)閉計(jì)數(shù)器開(kāi)關(guān)en,此時(shí)數(shù)字a存入暫存器r1,關(guān)閉暫存器的開(kāi)關(guān)ld_reg[4],后再關(guān)閉總線開(kāi)關(guān)BUS_SEL[4],然后再打開(kāi)計(jì)數(shù)器的清零開(kāi)關(guān)clr再關(guān)閉。iv.v.同理第iii步,在暫存器r2中存入數(shù)據(jù)b。打開(kāi)總線開(kāi)關(guān)
bus_sel[0].地址計(jì)數(shù)器開(kāi)關(guān)
ld_reg[0]和pc_sel[2],pc_sel[1],pc_sel[0]選擇存儲(chǔ)地址 vi.打開(kāi)運(yùn)算器到總線的開(kāi)關(guān)bus_sel[1],打開(kāi)計(jì)數(shù)器en計(jì)數(shù)開(kāi)關(guān)en當(dāng)計(jì)數(shù)器跳
數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
變到加法指令011001時(shí),關(guān)閉計(jì)數(shù)開(kāi)關(guān)en,然后代開(kāi)rom的地址開(kāi)關(guān)pc_sel[2],以及可寫(xiě)開(kāi)關(guān)we_rd[1]。將從運(yùn)算器中計(jì)算出來(lái)的運(yùn)算結(jié)果a+b存儲(chǔ)到ram中的x地址中,關(guān)閉可寫(xiě)開(kāi)關(guān)we_rd[1],關(guān)閉pc_sel[2]和總線開(kāi)關(guān),最后將計(jì)數(shù)器清零。
vii.打開(kāi)ram的可讀開(kāi)關(guān),讀取x地址處的數(shù)據(jù)a+b。
四. 實(shí)驗(yàn)現(xiàn)象。
輸入數(shù)據(jù)a
輸入數(shù)據(jù)b
數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
進(jìn)行運(yùn)算并將運(yùn)算結(jié)果寫(xiě)入內(nèi)存
數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
從內(nèi)存中讀取計(jì)算結(jié)果
數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
五. 實(shí)驗(yàn)心得。
第一次在電板上進(jìn)行這么多的操作。操作過(guò)程雖然很多,但只要理解操作過(guò)程,明白各個(gè)按鍵所設(shè)置的引腳作用,實(shí)驗(yàn)其實(shí)并不難,重點(diǎn)在于要理解過(guò)程,明白數(shù)據(jù)的輸入,存入寄存器,運(yùn)算以及往內(nèi)存中進(jìn)行存取值的操作,那么數(shù)據(jù)通路的按鍵很容易記住。
在實(shí)驗(yàn)過(guò)程中還是存在很多問(wèn)題的,尤其的剛開(kāi)始做實(shí)驗(yàn)的時(shí)候,不理解數(shù)據(jù)通路實(shí)驗(yàn)過(guò)程中各個(gè)門(mén)的輸入的意義和順序,但真正懂得的時(shí)候,實(shí)驗(yàn)就變得簡(jiǎn)單了。
第四篇:運(yùn)算器數(shù)據(jù)通路實(shí)驗(yàn)報(bào)告
運(yùn)算器數(shù)據(jù)通路實(shí)驗(yàn)
設(shè)計(jì)報(bào)告
學(xué)號(hào): 姓名: 成績(jī): 學(xué)號(hào): 姓名: 成績(jī):
一、實(shí)驗(yàn)名稱:
總線、半導(dǎo)體靜態(tài)存儲(chǔ)器實(shí)驗(yàn)
二、實(shí)驗(yàn)?zāi)康?1.熟悉函數(shù)功能發(fā)生器的功能、使用方法。2.熟悉運(yùn)算器的數(shù)據(jù)傳送通路。
3.完成幾種算邏運(yùn)算操作,加深對(duì)運(yùn)算器工作原理的理解。
三、實(shí)驗(yàn)原理
運(yùn)算器是計(jì)算機(jī)中對(duì)數(shù)據(jù)進(jìn)行運(yùn)算操作的重要部件,它的核心是ALU 函數(shù)功能發(fā)生器(由EPM7064S 構(gòu)成),其次還要有存放操作數(shù)和運(yùn)算的中間結(jié)果之寄存器以及傳送數(shù)據(jù)的總線等部分。選用不同的控制信號(hào),運(yùn)算器可以完成不同的運(yùn)算功能。1.函數(shù)功能發(fā)生器(ALU)的功能。
該函數(shù)功能發(fā)生器(ALU),當(dāng)輸入為Aj、Bj,對(duì)應(yīng)輸出為Fj(j=0,1,2,3,4,5,6,7),它可 實(shí)現(xiàn)8 種不同的算術(shù)運(yùn)算和邏輯算,而且通過(guò)對(duì)控制參數(shù)SEL2~SEL0S0 來(lái)選擇。2.?dāng)?shù)據(jù)傳送通路實(shí)驗(yàn)電路方案
實(shí)驗(yàn)方案框圖見(jiàn)圖2—5 所示。
圖中SA、SB 為存放兩個(gè)現(xiàn)行操作的緩沖寄存器,其中SA 兼作存放中間結(jié)果的累加器,并且可以通過(guò)SA 所連接的八個(gè)數(shù)據(jù)燈顯示。SA、SB 接收來(lái)自總線的數(shù)據(jù)信息送入ALU 進(jìn)行 算術(shù)或邏輯操作。通過(guò)移位門(mén)將運(yùn)算操作結(jié)果送到總線。并且ALU 和總線之間需用三態(tài)門(mén)隔 離(采用74LS245)。
四、實(shí)驗(yàn)內(nèi)容
1.按照實(shí)驗(yàn)電路方案框圖,設(shè)計(jì)一個(gè)能完成下列八種補(bǔ)碼運(yùn)算指令的八位運(yùn)算器。該運(yùn)算器實(shí)現(xiàn)的八種功能如表2—1 所示。
表2—1:
2.根據(jù)運(yùn)算器設(shè)計(jì),選擇所需元器件,畫(huà)出實(shí)驗(yàn)電路的詳細(xì)邏輯圖,對(duì)開(kāi)關(guān),單脈沖等 定義。因?yàn)楹蜕洗螌?shí)驗(yàn)類似,也是絕大多數(shù)的器件在“數(shù)據(jù)通路”中已安排好,只要控制各 個(gè)控制點(diǎn)即可,除了開(kāi)關(guān)組通過(guò)三態(tài)傳輸門(mén)(74LS245)的接法和實(shí)驗(yàn)一一樣外,設(shè)置一個(gè)指令寄存器(IR),用74LS573 擔(dān)當(dāng)IR。通過(guò)八根連接線和“數(shù)據(jù)通路”中的八位總線連接起來(lái)。存放ALU 的控制信息SEL2~SEL0。為了便于觀察IR 中內(nèi)容,可以在IR 的輸出端同時(shí)接上三 個(gè)電平顯示燈。有的同學(xué)如用三個(gè)電平開(kāi)關(guān)設(shè)置SEL2~SLE0。當(dāng)然可以得出結(jié)果,但是由于 IR 是一個(gè)不可缺少的計(jì)算機(jī)部件,為了達(dá)到完整熟悉計(jì)算機(jī)各組成部分的目的,這里專門(mén)設(shè)置了指令寄存器IR。
3.在電路上進(jìn)行表2—1 所列的八種指令的手動(dòng)操作,每次一條指令。實(shí)驗(yàn)時(shí)可由數(shù)據(jù) 開(kāi)關(guān)輸入指令碼及操作數(shù),予以功能的驗(yàn)證。4.本實(shí)驗(yàn)應(yīng)實(shí)現(xiàn)的操作
K→SA(開(kāi)關(guān)輸入的第一個(gè)操作數(shù)置入SA,LED 顯示)K→SB(開(kāi)關(guān)輸入的第二個(gè)操作數(shù)置入SB,無(wú)顯示)K→IR(開(kāi)關(guān)輸入的ALU 控制代碼置入IR)
ALU 運(yùn)算結(jié)果通過(guò)ALU-244→SA(將運(yùn)算結(jié)果送SA 顯示)具體實(shí)驗(yàn)過(guò)程(僅僅作為參考)如下:
1)從輸入設(shè)備(八個(gè)鈕子開(kāi)關(guān))置入第一個(gè)數(shù)據(jù),74LS245 的E=0,74LS573 的C 由“0”變?yōu)椤?”(鎖存)后再變?yōu)椤?”(保持);送入Sa(該寄存器接有LED 顯示); 2)從輸入設(shè)備(八個(gè)鈕子開(kāi)關(guān))置入第一個(gè)數(shù)據(jù),74LS245 的E=0,74LS573 的C 由“0”變?yōu)椤?”(鎖存)后再變?yōu)椤?”(保持);送入Sb(該寄存器沒(méi)有接LED 顯示); 3)從輸入設(shè)備(八個(gè)鈕子開(kāi)關(guān))將需要進(jìn)行運(yùn)算操作(如加法操作)的控制代碼(具體內(nèi)容可見(jiàn)表3-4)置入到IR,74LS245 的E=0,74LS573 的C 由“0”變?yōu)椤?”(鎖存)后再變?yōu)椤?”(保持);
4)控制接通ALU-244,使運(yùn)算結(jié)果上總線;
5)將結(jié)果置入Sa,并通過(guò)所接的LED 將結(jié)果顯示出來(lái)。
五、測(cè)試結(jié)果與性能分析
1、測(cè)試結(jié)果:
1)數(shù)據(jù)A準(zhǔn)備→三態(tài)門(mén)①打開(kāi)→給寄存器Sa脈沖→數(shù)據(jù)進(jìn)入Sa;
數(shù)據(jù)B準(zhǔn)備→給寄存器Sb脈沖→數(shù)據(jù)進(jìn)入Sb; 數(shù)據(jù)準(zhǔn)備(指令)→給指令寄存器IR脈沖→指令進(jìn)入IR→三態(tài)門(mén)①關(guān)閉; 2)ALU按照指令進(jìn)行計(jì)算,結(jié)果進(jìn)入總線→三態(tài)門(mén)②(寄存器Sa往顯示燈)打開(kāi)→給寄存器Sa脈沖→顯示燈顯示計(jì)算結(jié)果
實(shí)驗(yàn)輸入三組數(shù)據(jù)進(jìn)行計(jì)算 00010000 – 00000001 = 00001111;00010101 & 00001010 = 00000000;00001000 + 00000110 = 00001110;
2、性能分析
單總線結(jié)構(gòu)數(shù)據(jù)傳送慢,使用多總線結(jié)構(gòu)可以提高數(shù)據(jù)傳送效率 另外,EPM7064S 器件性能介紹:
高性能和EEPROM的可編程邏輯器件(PLD)的第二代基于Max 架構(gòu) 5.0-V在系統(tǒng)可編程能力(ISP)具有完整的EPLD的邏輯密度
5納秒引腳到引腳的邏輯延時(shí)高達(dá)175.4 MHz的計(jì)數(shù)器頻率(包括互連)
六、課程設(shè)計(jì)總結(jié)(包括設(shè)計(jì)的總結(jié)和需要改進(jìn)之處及體會(huì))
通過(guò)這次實(shí)驗(yàn)設(shè)計(jì),我們可以了解運(yùn)算器數(shù)據(jù)通路的工作原理,各組數(shù)據(jù)的走向和時(shí)間邏輯關(guān)系,也更清楚認(rèn)識(shí)了指令控制的重要性。另外這是第一次在電腦上對(duì)運(yùn)算器芯片的引腳進(jìn)行設(shè)置,稍微有一點(diǎn)差錯(cuò)就會(huì)造成實(shí)驗(yàn)結(jié)果的差異,因此使得我們?cè)趯?shí)驗(yàn)中更加專注和仔細(xì)。這次實(shí)驗(yàn)的分工也很明確,我負(fù)責(zé)在實(shí)驗(yàn)臺(tái)上搭線,張成濤同學(xué)負(fù)責(zé)在電腦上設(shè)置運(yùn)算器引腳。但最終因?yàn)閷?shí)驗(yàn)臺(tái)的更換問(wèn)題,實(shí)驗(yàn)結(jié)果沒(méi)有調(diào)試出來(lái)。換了一個(gè)電腦進(jìn)行引腳設(shè)置后,終于成功了。由于有協(xié)調(diào)的合作,實(shí)驗(yàn)操作過(guò)程也不會(huì)復(fù)雜繁瑣,這次實(shí)驗(yàn)過(guò)程很有趣,并且讓我們對(duì)機(jī)器內(nèi)部數(shù)據(jù)通路的理解有更進(jìn)一步的啟發(fā)。
教師評(píng)語(yǔ):
教師簽字:
日期:
第五篇:實(shí)驗(yàn)4 數(shù)據(jù)通路 實(shí)驗(yàn)報(bào)告
班級(jí):計(jì)算機(jī)科學(xué)與技術(shù)3班
學(xué)號(hào): 20090810310
姓名:
康小雪
日期: 2011-10-14
實(shí)驗(yàn)3 存儲(chǔ)器實(shí)驗(yàn)
預(yù)習(xí)實(shí)驗(yàn)報(bào)告
疑問(wèn):
1、數(shù)據(jù)通路是干嘛的?
2、數(shù)據(jù)通路如何實(shí)現(xiàn)其功能?
3、實(shí)驗(yàn)書(shū)上的存儲(chǔ)器部分總線開(kāi)關(guān)接在高電平上,是不是錯(cuò)了?
實(shí)驗(yàn)報(bào)告
一、波形圖:
參數(shù)設(shè)置:
Endtime:2.0us
Gridsize:100.0ns 信號(hào)設(shè)置:
clk:
時(shí)鐘信號(hào),設(shè)置周期為100ns占空比為50%。
bus_sel:
sw|r4|r5|alu|pc_bus的組合,分別代表的是總線(sw_bus)開(kāi)關(guān),將
存儲(chǔ)器r4的數(shù)據(jù)顯示到總線上,將存儲(chǔ)器r5的數(shù)據(jù)顯示到總線上,將alu的運(yùn)算結(jié)果顯示到總線上,將pc的數(shù)據(jù)打入AR中二進(jìn)制輸入,低電平有效。
alu_sel:
m|cn|s[3..0]的組合,代表運(yùn)算器的運(yùn)算符號(hào)選擇,二進(jìn)制輸入,高
電平有效。
ld_reg:
lddr1|lddr2|ldr4|ldr5|ld_ar的組合,分別表示將總線數(shù)據(jù)載入寄存器
r1,r2,r4, r5或AR中,二進(jìn)制輸入,高電平有效。
pc_sel:
pc_clr|ld|en的組合,分別代表地址計(jì)數(shù)器PC的清零(pc_clr)、裝
載(pc_ld)和計(jì)數(shù)使能信號(hào)(pc_en),二進(jìn)制輸入,低電平有效。
we_rd:
信號(hào)we和rd的組合,分別代表對(duì)ram的讀(we)與寫(xiě)(rd)的操作,二進(jìn)制輸入,高電平有效
k:
k [7]~ k [0],數(shù)據(jù)輸入端信號(hào),十六進(jìn)制輸入。
d:
d[7]~d[0],數(shù)據(jù)輸出中間信號(hào),十六進(jìn)制雙向信號(hào)。
d~result:
d [7] result ~d[0] result,最終的數(shù)據(jù)輸出信號(hào),十六進(jìn)制輸出。ar:
ar[7]~ ar[0],地址寄存器AR的輸出結(jié)果,十六進(jìn)制輸出。pc:
pc [7]~ pc [0],地址計(jì)數(shù)器PC的輸出結(jié)果,十六進(jìn)制輸出。
仿真波形
以在01H單元中寫(xiě)入05H、02H單元中寫(xiě)入0AH并進(jìn)行【(A加B)減(非A與B)加B】為例:
1)初始狀態(tài):bus_sel=11111,alu_sel=00000,ld_reg=00000,pc_sel=100,we_rd=00,k=00H,總線上無(wú)數(shù)據(jù),呈高阻態(tài)。2)讀取01H單元的05A:
① 置數(shù)法PC=01H:bus_sel=01111,pc_sel=101 ② PC->AR:bus_sel=11110,ld_reg=00001 ③ 讀01H單元的數(shù)據(jù)放入R1中:bus_sel=11111,ld_reg=10000,we_rd=01 3)讀取02H單元的0AH:
① PC+1,PC->AR:bus_sel=11110,ld_reg=00001,pc_sel=111 ② 讀01H單元的數(shù)據(jù)放入R2中:bus_sel=11111,ld_reg=01000,we_rd=01 4)將地址加到03H :bus_sel=11110,ld_reg=00001,pc_sel=111 5)驗(yàn)證數(shù)據(jù)并運(yùn)算: bus_sel=11101 ① 讀取R1中的數(shù)據(jù):alu_sel=010000,得到R1=05H ② 讀取R2中的數(shù)據(jù):alu_sel=101010,得到R2=0AH ③ 計(jì)算(A加B)結(jié)果存于R4中:alu_sel=011001,ld_reg=00100,結(jié)果為0FH ④ 計(jì)算(非A與B)結(jié)果存于03H單元中:alu_sel=100010,we_rd=10,結(jié)果為0AH ⑤ 計(jì)算((A加B)加B)結(jié)果存于04H單元中:
? R4->R1:bus_sel=10111,ld_reg=10000 ? PC+1,PC->AR:bus_sel=11110,ld_reg=00001,pc_sel=111 ? 計(jì)算((A加B)加B)結(jié)果存于04H單元中:bus_sel=11101,alu_sel=011001,we_rd=10 ⑥ 計(jì)算(((A加B)加B)減(非A與B))結(jié)果存于05H中:
?((A加B)加B)->R1:bus_sel=11111,ld_reg=10000,we_rd=01 ?(非A與B)->R2:
? PC=03H:k=03H,bus_sel=01111,pc_sel=101 ? PC->AR:bus_sel=11110,ld_reg=00001 ?(非A與B)->R2:bus_sel=11111,ld_reg=01000,we_rd=01 ? PC=05H:
? PC=05H:k=03H,bus_sel=01111,pc_sel=101 ? PC->AR:bus_sel=11110,ld_reg=00001 ?
?(((A加B)加B)減(非A與B))結(jié)果存于05H中:bus_sel=11101,alu_sel=000110,we_rd=10 最后結(jié)果為0FH。結(jié)論:
本實(shí)驗(yàn)的設(shè)計(jì)能結(jié)合了運(yùn)算器和存儲(chǔ)器,能實(shí)現(xiàn)在mif文件中進(jìn)行初始化,將固定地址單元中存儲(chǔ)的數(shù)據(jù)讀取到運(yùn)算器中進(jìn)行(((A加B)加B)減(非A與B))的運(yùn)算并將結(jié)果存于指定的內(nèi)存單元中,與實(shí)驗(yàn)要求一致,故電路設(shè)計(jì)正確。
二、實(shí)驗(yàn)日志
預(yù)習(xí)疑問(wèn)解答:
1.通路是干嘛的?
在數(shù)字系統(tǒng)中,各個(gè)子系統(tǒng)通過(guò)數(shù)據(jù)總線連接形成的數(shù)據(jù)傳送路徑稱為數(shù)據(jù)通路.2.通路如何實(shí)現(xiàn)其功能?
在這次的實(shí)驗(yàn)中,數(shù)據(jù)通路主要是由運(yùn)算器部分和存儲(chǔ)器部分組成的,通過(guò)運(yùn)算器的運(yùn)算結(jié)合存儲(chǔ)器在mif文件的中的操作進(jìn)行數(shù)據(jù)的傳輸與存儲(chǔ),從而構(gòu)成一個(gè)數(shù)據(jù)通路.錯(cuò)
3.書(shū)上的存儲(chǔ)器部分總線開(kāi)關(guān)接在高電平上,是不是錯(cuò)了? 事實(shí)證明沒(méi)有接錯(cuò).
思考題:
1. 畫(huà)數(shù)據(jù)通路電路圖時(shí),如何連結(jié)單一總線? 如圖:
ALU模塊的sw_bus依然連接bus_sel,存儲(chǔ)器部分的sw_bus連接高電平.2. 如何統(tǒng)一兩個(gè)模塊的總線輸入端k[7..0]及inputd[7..0]?
答:如圖: 輸入放在運(yùn)算器部分,存儲(chǔ)器部分無(wú)輸入,存儲(chǔ)器部分的數(shù)據(jù)要么來(lái)自總線傳輸,要么從mif文件中讀取.實(shí)驗(yàn)中遇到的問(wèn)題:
1.把之前的alu和ram的原理圖拷到了當(dāng)前工程下面。直接生成該工程的符號(hào)文件,連接起來(lái),但是仿真有問(wèn)題。
幾乎是在每一次和總線交換數(shù)據(jù)的時(shí)候都得不到正確的值。下面是解決的過(guò)程:
我懷疑是兩個(gè)模塊之間通過(guò)總線傳輸?shù)臄?shù)據(jù)沒(méi)有傳輸成功,于是把a(bǔ)lu模塊的d引了一個(gè)輸出端口d_alu,從ram模塊的d引出了一個(gè)輸出端口d_ram,在仿真波形圖上,然后就可以看到了數(shù)據(jù)到達(dá)總線上了,而且這個(gè)時(shí)候d的值也能看到了,只是后面的最后一個(gè)讀操作出來(lái)的數(shù)據(jù)不對(duì),本來(lái)應(yīng)該是寫(xiě)進(jìn)去的07,但現(xiàn)在是17,再仿真就會(huì)變成別的數(shù)據(jù)。2.在連接電路圖的時(shí)候,我以為存儲(chǔ)器部分的sw_bus連在高電平上是錯(cuò)的,然后又連到了bus_sel[4],所以得到了上一個(gè)部分的仿真結(jié)果,后來(lái)不研究了一下那個(gè)高電平,發(fā)現(xiàn)是用來(lái)處理單一總線問(wèn)題的,就改成了與書(shū)上一樣的圖,我以為上面出現(xiàn)的錯(cuò)誤結(jié)果和這個(gè)有關(guān),改了之后波形圖有變化,但是,還是是錯(cuò)誤的.但是在兩種情況下功能仿真的結(jié)果都是正確的:
問(wèn)題解決了~
原因是周期太短,計(jì)算結(jié)果還來(lái)不及存入到內(nèi)存單元中,把寫(xiě)入內(nèi)存的時(shí)間周期延長(zhǎng)一個(gè)周期結(jié)果就出來(lái)了。電路本身沒(méi)有問(wèn)題。
實(shí)驗(yàn)心得:
這次實(shí)驗(yàn)是基于前兩次實(shí)驗(yàn)的成果而成的綜合,之前沒(méi)有發(fā)現(xiàn)驗(yàn)收成果后模塊中還存在什么問(wèn)題,把兩個(gè)模塊一拼在一起,問(wèn)題就出來(lái)了,而且不止我一個(gè)人出現(xiàn)這樣的狀況,一直沒(méi)弄明白這是為什么,后來(lái)經(jīng)過(guò)反反復(fù)復(fù)的仿真和觀察,終于找出了問(wèn)題的原因,并順利解決了。這一次又學(xué)到了許多東西。