第一篇:计算机组成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的计数器频率(包括互连)
六、课程设计总结(包括设计的总结和需要改进之处及体会)
通过这次实验设计,我们可以了解运算器数据通路的工作原理,各组数据的走向和时间逻辑关系,也更清楚认识了指令控制的重要性。另外这是第一次在电脑上对运算器芯片的引脚进行设置,稍微有一点差错就会造成实验结果的差异,因此使得我们在实验中更加专注和仔细。这次实验的分工也很明确,我负责在实验台上搭线,张成涛同学负责在电脑上设置运算器引脚。但最终因为实验台的更换问题,实验结果没有调试出来。换了一个电脑进行引脚设置后,终于成功了。由于有协调的合作,实验操作过程也不会复杂繁琐,这次实验过程很有趣,并且让我们对机器内部数据通路的理解有更进一步的启发。
教师评语:
教师签字:
日期: