计算机组成原理模型机实验报告.docx
- 文档编号:11363815
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:70
- 大小:1,021.10KB
计算机组成原理模型机实验报告.docx
《计算机组成原理模型机实验报告.docx》由会员分享,可在线阅读,更多相关《计算机组成原理模型机实验报告.docx(70页珍藏版)》请在冰豆网上搜索。
计算机组成原理模型机实验报告
实验六计算机系统综合设计与实现
一、实验目的
1、深入理解计算机系统工作的基本原理,建立整机概念。
2、融会贯通计算机组成原理课程的容,通过知识的综合运用,加深对计算机系统各模块的工作原理及相互联系的认识。
3、培养科学研究的独立工作能力,取得工程设计与组装调试的实践经验。
二、实验要求
1、将已经设计的运算器、存储器和控制器连接,构建完整的计算机系统;
2、编写一段可以实现一定功能的指令程序,进行计算机整机系统功能的验证。
3、所有任务要求功能仿真和必要的验证。
实验完成后,一周提交实验报告。
三、实验设备
PC机+QuartusⅡ10.0+FPGA(DE2-115)+TEC-8实验箱
四、计算机系统(TEC-8)综合逻辑框图
硬连线控制器控制信号切换电路ALUA端口B端口CZR0R1R2R3IRPCAR双端口RAMDBUS
五、实验任务
1、将实验二的运算器、实验三的存储器和实验五的控制器连接,构建完整的计算机系统;
2、计算机整机系统功能测试,进行功能仿真和时序仿真并在DE2-115上验证。
(1)根据指令系统,编写一段可以实现一定功能的程序,要求:
有一个合理的运算功能和逻辑关系;
指令数量:
不少于8条;
指令类型:
停机、跳转、RR、读存、写存、算术和逻辑运算;
(2)将指令程序手工汇编成二进制代码;
(3)理论上设置寄存器的初值,并计算程序执行后的结果;
(4)将指令程序的二进制代码存入存储器RAM中;
(5)将需要的运算数据初值存入寄存器R0-R3中;
(6)进行程序连续运行的功能仿真和时序仿真,将仿真运算结果与理论计算结果进行比较。
六、实验步骤
实验电路图
子模块
(1)tri_74244
tri74244.v
moduletri_74244(en,Din,Dout);
inputen;
wireen;
input[7:
0]Din;
wire[7:
0]Din;
output[7:
0]Dout;
reg[7:
0]Dout;
always(enorDin)
begin
if(en)
Dout<=Din;
else
Dout<=8'bzzzzzzzz;
end
endmodule
`timescale1ps/1ps
moduletri_74244_vlg_tst();
regeachvec;
reg[7:
0]Din;
regen;
wire[7:
0]Dout;
tri74244.vt
`timescale1ps/1ps
moduletri_74244_vlg_tst();
regeachvec;
reg[7:
0]Din;
regen;
wire[7:
0]Dout;
tri_74244i1(
.Din(Din),
.Dout(Dout),
.en(en)
);
integeri;
initial
begin
i=0;
Din=8'b00000000;
en=0;
en=1;
#30en=0;
#40en=1;
end
initial
begin
for(i=0;i<10;i=i+1)
begin
#10Din=i;
end
end
endmodule
tri74244功能仿真
(2)ALU
ALU.bdf
modolue_74181
使用quartus库中的74181模块转换为verilog文件即可
de2_4
de2_4.v
modulede2_4(en,in,out);
input[2:
1]in;
inputen;
output[4:
1]out;
reg[4:
1]out;
always(enorin)
if(en)
case(in)
2'b00:
out=4'b0001;
2'b01:
out=4'b0010;
2'b10:
out=4'b0100;
2'b11:
out=4'b1000;
default:
out=4'b0000;
endcase
elseout=4'b0000;
endmodule
de2_4.vt
`timescale1ns/1ps
modulede2_4_vlg_tst();
regeachvec;
regen;
reg[2:
1]in;
wire[4:
1]out;
de2_4i1(
.en(en),
.in(in),
.out(out)
);
initial
begin
en=0;
end
initial
begin
#10en=1;
end
initial
begin
#5in=2'b00;
#15in=2'b01;
#15in=2'b10;
#15in=2'b11;
#40$finish;
end
initial
$monitor($time,,,"en=%bin=%bout=%b",en,in,out);
endmodule
reg8
reg8.v
modulereg8(T3,DOUT,D);
inputT3;
wireT3;
input[7:
0]D;
wire[7:
0]D;
output[7:
0]DOUT;
reg[7:
0]DOUT;
always(posedgeT3)
begin
DOUT<=D;
end
endmodule
reg8.vt
`timescale1ps/1ps
modulereg8_vlg_tst();
regeachvec;
reg[7:
0]D;
regT3;
wire[7:
0]DOUT;
reg8i1(
.D(D),
.DOUT(DOUT),
.T3(T3)
);
integeri;
initial
begin
T3=0;
D=8'd0;
end
always
begin
#5T3=~T3;
end
initial
begin
for(i=0;i<11;i=i+1)
begin
#10D=i;
end
end
endmodule
mux4_1
mux4_1.v
modulemux4_1(
d1,
d2,
d3,
d4,
se1,
se2,
dout
);
input[7:
0]d1;
input[7:
0]d2;
input[7:
0]d3;
input[7:
0]d4;
inputse1;
inputse2;
outputdout;
reg[7:
0]dout;
always(d1ord2ord3ord4orse1orse2)
case({se2,se1})
2'b00:
dout=d1;
2'b01:
dout=d2;
2'b10:
dout=d3;
2'b11:
dout=d4;
endcase
endmodule
mux4_1.vt
`timescale1ps/1ps
modulemux4_1_vlg_tst();
regeachvec;
reg[7:
0]d1;
reg[7:
0]d2;
reg[7:
0]d3;
reg[7:
0]d4;
regse1;
regse2;
wire[7:
0]dout;
mux4_1i1(
.d1(d1),
.d2(d2),
.d3(d3),
.d4(d4),
.dout(dout),
.se1(se1),
.se2(se2)
);
integeri,j;
initial
begin
#10d1=8'b00000001;
d2=8'b00000010;
d3=8'b00000011;
d4=8'b00000100;
end
initial
begin
#5
while
(1)
for(i=0;i<2;i=i+1)
for(j=0;j<2;j=j+1)
begin
#5se2=i;se1=j;
end
end
endmodule
ALU逻辑电路图
逻辑功能表
(1)写寄存器(例如:
向通用寄存器R0-R3分别写入数据55H/AAH/03H/04H)
T3
RD
DRW
SBUS
ABUS
DBUS[7..0]
功能(写R)
↑
00
1
1
0
55H
55H→R0
↑
01
1
1
0
AAH
AAH→R1
↑
10
1
1
0
03H
03H→R2
↑
11
1
1
0
04H
04H→R3
(2)选择将R0送74181的A端口,R1送B端口,进行算术功能验算
M
Cn
S[3..0]
RD
RS
DRW
SBUS
ABUS
DBUS[7..0]
0
1
0000
00
01
0
0
1
55
0
1
0001
00
01
0
0
1
ff
……
0
1
1111
00
01
0
0
1
54
(3)选择将R0送74181的A端口,R1送B端口,进行逻辑功能验算
M
Cn
S[3..0]
RD
RS
DRW
SBUS
ABUS
DBUS[7..0]
1
0
0000
00
01
0
0
1
AA
1
0
0001
00
01
0
0
1
00
……
1
0
1111
00
01
0
0
1
55
当A=55H,B=AAH,S=0000~1111,M=0,CIN=1时仿真测试文件及功能仿真波形
`timescale1ns/1ps
modulealu_vlg_tst();
regT3;
regSBUS;
regDRW;
regABUS;
regLDC;
regCIN;
regM;
reg[1:
0]RD;
reg[1:
0]RS;
reg[3:
0]S;
reg[7:
0]SD;
wire[7:
0]DBUS;
wireC;
alui1(
.ABUS(ABUS),
.C(C),
.CIN(CIN),
.DBUS(DBUS),
.DRW(DRW),
.LDC(LDC),
.M(M),
.RD(RD),
.RS(RS),
.S(S),
.SBUS(SBUS),
.SD(SD),
.T3(T3)
);
initial
begin
T3=0;
SBUS=1;
DRW=1;
ABUS=0;
RD=2'b00;SD=8'b01010101;
#10RD=2'b01;SD=8'b10101010;
#10RD=2'b10;SD=8'b00000011;
#10RD=2'b11;SD=8'b00000100;
#10RD=2'b00;
RS=2'b01;
SBUS=0;
DRW=0;
ABUS=1;
CIN=1;
LDC=1;
M=0;
end
always
begin
#5T3=~T3;
end
integeri;
initial
begin
#40S=4'b0000;
for(i=1;i<16;i=i+1)
#10S=i;
end
initial
$monitor($time,,,"M=%bS=%bCIN=%bSD=%hDBUS=%hC=%b",M,S,CIN,SD,DBUS,C);
endmodule
指令ADDR0,R1(R0+R1→R0)的仿真测试文件及功能仿真波形
`timescale1ns/1ps
modulealu_vlg_tst();
regT3;
regSBUS;
regDRW;
regABUS;
regLDC;
regCIN;
regM;
reg[1:
0]RD;
reg[1:
0]RS;
reg[3:
0]S;
reg[7:
0]SD;
wire[7:
0]DBUS;
wireC;
alui1(
.ABUS(ABUS),
.C(C),
.CIN(CIN),
.DBUS(DBUS),
.DRW(DRW),
.LDC(LDC),
.M(M),
.RD(RD),
.RS(RS),
.S(S),
.SBUS(SBUS),
.SD(SD),
.T3(T3)
);
initial
fork
T3=0;
SBUS=1;
DRW=1;
ABUS=0;
RD=2'b00;SD=8'b00000111;
#10RD=2'b01;
#10SD=8'b00000001;
#20RD=2'b00;
#20RS=2'b01;
#20SBUS=0;
#20DRW=0;
#20ABUS=1;
#20CIN=1;
#20LDC=1;
#20M=0;
#20S=4'b1001;
#30RD=2'b00;
#30DRW=1;
#40DRW=0;
join
always
begin
#5T3=~T3;
end
endmodule
00nsDBUS=07HT3上升沿到来(5ns时)数据07H被写R0
10nsDBUS=01HT3上升沿到来(15ns时)数据01H被写R1
20nsDBUS=R0+R1=07+01=08H
30nsT3上升沿到来(35ns)时DBUS数据08H被写R0,因此DBUS=R0+R1=08H+01H=09H
(说明实现了R0+R1→R0)
注意:
此时M=0,S=1001,CIN=1(相当于C0=0),实现算术运算A+B
指令SUBR0,R1(R0-R1→R0)的仿真测试文件及功能仿真波形
`timescale1ns/1ps
modulealu_vlg_tst();
regT3;
regSBUS;
regDRW;
regABUS;
regLDC;
regCIN;
regM;
reg[1:
0]RD;
reg[1:
0]RS;
reg[3:
0]S;
reg[7:
0]SD;
wire[7:
0]DBUS;
wireC;
alui1(
.ABUS(ABUS),
.C(C),
.CIN(CIN),
.DBUS(DBUS),
.DRW(DRW),
.LDC(LDC),
.M(M),
.RD(RD),
.RS(RS),
.S(S),
.SBUS(SBUS),
.SD(SD),
.T3(T3)
);
initial
fork
T3=0;
SBUS=1;
DRW=1;
ABUS=0;
RD=2'b00;SD=8'b00000111;
#10RD=2'b01;
#10SD=8'b00000001;
#20RD=2'b00;
#20RS=2'b01;
#20SBUS=0;
#20DRW=0;
#20ABUS=1;
#20CIN=0;
#20LDC=1;
#20M=0;
#20S=4'b0110;
#30RD=2'b00;
#30DRW=1;
#40DRW=0;
join
always
begin
#5T3=~T3;
end
endmodule
00nsDBUS=03HT3上升沿到来(5ns时)数据07H被写R0
10nsDBUS=01HT3上升沿到来(15ns时)数据01H被写R1
20nsDBUS=R0-R1=07-01=06H
30nsT3上升沿到来(35ns)时DBUS数据06H被写R0,因此DBUS=R0-R1=06H-01H=05H
(说明实现了R0-R1→R0)
注意:
此时M=0,S=0110,实现算术运算A-B-1,设置CIN=0(相当于C0=1),让进位C0=1,因此实现运算(A-B-1)+1=A-B
指令ANDR0,R1(R0&R1→R0)的仿真测试文件及功能仿真波形
`timescale1ns/1ps
modulealu_vlg_tst();
regT3;
regSBUS;
regDRW;
regABUS;
regLDC;
regCIN;
regM;
reg[1:
0]RD;
reg[1:
0]RS;
reg[3:
0]S;
reg[7:
0]SD;
wire[7:
0]DBUS;
wireC;
alui1(
.ABUS(ABUS),
.C(C),
.CIN(CIN),
.DBUS(DBUS),
.DRW(DRW),
.LDC(LDC),
.M(M),
.RD(RD),
.RS(RS),
.S(S),
.SBUS(SBUS),
.SD(SD),
.T3(T3)
);
initial
fork
T3=0;
SBUS=1;
DRW=1;
ABUS=0;
RD=2'b00;SD=8'b00000111;
#10RD=2'b01;
#10SD=8'b00001001;
#20RD=2'b00;
#20RS=2'b01;
#20SBUS=0;
#20DRW=0;
#20ABUS=1;
#20CIN=1;
#20LDC=1;
#20M=1;
#20S=4'b1011;
#30RD=2'b00;
#30DRW=1;
#38S=4'b0000;
#40DRW=0;
join
always
begin
#5T3=~T3;
end
endmodule
00nsDBUS=00000111T3上升沿到来(5ns时)数据00000111被写R0
10nsDBUS=00001001T3上升沿到来(15ns时)数据00001001被写R1
20nsDBUS=R0&R1=00000001
30nsDRW=1T3上升沿到来(35ns)时DBUS数据00000001被写R0,
38nsM=1,S=0000DBUS=R0&R1==11111110H实现了求反运算
(说明已经实现了R0&R1→R0)
(3)RAM4
RAM4.bdf
cnt256
cnt256.v
modulet256(Q,DATA,LDN,reset,clk);
output[7:
0]Q;
input[7:
0]DATA;
inputLDN,reset,clk;
reg[7:
0]Q;
always(posedgeclkornegedgereset)//clk上升沿触发
begin
if(!
reset)//异步清零,低电平有效
Q<=8'b0;
elseif(!
LDN)Q<=DATA;//同步置数,低电平有效
elseQ<=Q+1;//计数
end
endmodule
cnt256.vt
`timescale1ns/1ps
modulet256_vlg_tst();
reg[7:
0]DATA;
regLDN;
regclk;
regreset;
wire[7:
0]Q;
cnt256i1(
.DATA(DATA),
.LDN(LDN),
.Q(Q),
.clk(clk),
.reset(reset)
);
initial
begin
DATA=1'hA;
clk=0;
reset=1;
LDN=1;
DATA=8'd00010010;
#20reset=0;
#40reset=1;
#260LDN=0;
#80LDN=1;
end
always
begin
#20clk=~clk;
end
endmodule
asdf
利用宏功能模块先生成单端口存储器,再用两单端口存储器进行连接生成双端口存储器
RAM4仿真测试逻辑图
双端口逻辑功能表
(1)从左端口写存储器(在01H单元中写入数据11H)(右端口为只读端口)
T2
T3
MEMW
SBUS
LAR
LPC
MBUS
CLR_
ARINC
PCINC
SD[7..0]
功能
x
↑
0
1
1
0
0
1
0
0
01
01H→AR
↑
x
1
1
0
0
0
1
0
0
11
11H→(01H)
(地址线和数据线分时复用技术,先送地址,再送数据)用同样方法在02H中写入22H
(2)从左端口读存储器(从01H中读出数据11H)(右端口为只读端口)
T2
T3
MEMW
SBUS
LAR
LPC
MBUS
CLR_
ARINC
PCINC
SD[7..0]
功能
x
↑
0
1
1
0
0
1
0
0
01
01H→AR
↑
x
0
0
0
0
1
1
0
0
xx
(01H)→DBUS
(地址线和数据线分时复用技术,先送地址,再送数据)用同样方法读出02H中的22H
(3)从右端口读存储器(从01H中读出数据11H)(右端口为只读端口)
T2
T3
MEMW
SBUS
LAR
LPC
MBUS
CLR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 组成 原理 模型 实验 报告