计算机组成原理模型机实验报告文档格式.docx
《计算机组成原理模型机实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《计算机组成原理模型机实验报告文档格式.docx(69页珍藏版)》请在冰豆网上搜索。
begin
if(en)
Dout<
=Din;
else
Dout<
=8'
bzzzzzzzz;
end
endmodule
`timescale1ps/1ps
moduletri_74244_vlg_tst();
regeachvec;
reg[7:
regen;
wire[7:
0]Dout;
tri74244.vt
tri_74244i1(
.Din(Din),
.Dout(Dout),
.en(en)
);
integeri;
initial
i=0;
Din=8'
b00000000;
en=0;
en=1;
#30en=0;
#40en=1;
end
for(i=0;
i<
10;
i=i+1)
begin
#10Din=i;
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:
always@(enorin)
if(en)
case(in)
2'
b00:
out=4'
b0001;
b01:
b0010;
b10:
b0100;
b11:
b1000;
default:
b0000;
endcase
elseout=4'
de2_4.vt
`timescale1ns/1ps
modulede2_4_vlg_tst();
reg[2:
1]in;
wire[4:
1]out;
de2_4i1(
.en(en),
.in(in),
.out(out)
en=0;
end
#10en=1;
#5in=2'
b00;
#15in=2'
b01;
b10;
b11;
#40$finish;
initial
$monitor($time,,,"
en=%bin=%bout=%b"
en,in,out);
reg8
reg8.v
modulereg8(T3,DOUT,D);
inputT3;
wireT3;
0]D;
0]DOUT;
always@(posedgeT3)
DOUT<
=D;
endmodule
reg8.vt
modulereg8_vlg_tst();
0]D;
regT3;
0]DOUT;
reg8i1(
.D(D),
.DOUT(DOUT),
.T3(T3)
begin
T3=0;
D=8'
d0;
always
#5T3=~T3;
11;
i=i+1)
begin
#10D=i;
mux4_1
mux4_1.v
modulemux4_1(
d1,
d2,
d3,
d4,
se1,
se2,
dout
);
0]d1;
0]d2;
0]d3;
0]d4;
inputse1;
inputse2;
outputdout;
0]dout;
always@(d1ord2ord3ord4orse1orse2)
case({se2,se1})
b00:
dout=d1;
b01:
dout=d2;
b10:
dout=d3;
b11:
dout=d4;
mux4_1.vt
modulemux4_1_vlg_tst();
0]d1;
0]d2;
0]d3;
0]d4;
regse1;
regse2;
0]dout;
mux4_1i1(
.d1(d1),
.d2(d2),
.d3(d3),
.d4(d4),
.dout(dout),
.se1(se1),
.se2(se2)
integeri,j;
#10d1=8'
b00000001;
d2=8'
b00000010;
d3=8'
b00000011;
d4=8'
b00000100;
#5
while
(1)
2;
for(j=0;
j<
j=j+1)
#5se2=i;
se1=j;
ALU逻辑电路图
逻辑功能表
(1)写寄存器(例如:
向通用寄存器R0-R3分别写入数据55H/AAH/03H/04H)
T3
RD
DRW
SBUS
ABUS
DBUS[7..0]
功能(写R)
↑
00
1
55H
55H→R0
01
AAH
AAH→R1
10
03H
03H→R2
11
04H
04H→R3
(2)选择将R0送74181的A端口,R1送B端口,进行算术功能验算
M
Cn
S[3..0]
RS
0
0000
00
01
55
0001
ff
……
1111
54
(3)选择将R0送74181的A端口,R1送B端口,进行逻辑功能验算
1
AA
当A=55H,B=AAH,S=0000~1111,M=0,CIN=1时仿真测试文件及功能仿真波形
modulealu_vlg_tst();
regSBUS;
regDRW;
regABUS;
regLDC;
regCIN;
regM;
reg[1:
0]RD;
0]RS;
reg[3:
0]S;
0]SD;
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),
SBUS=1;
DRW=1;
ABUS=0;
RD=2'
SD=8'
b01010101;
#10RD=2'
b10101010;
RS=2'
SBUS=0;
DRW=0;
ABUS=1;
CIN=1;
LDC=1;
M=0;
always
#5T3=~T3;
end
#40S=4'
for(i=1;
16;
#10S=i;
initial
M=%bS=%bCIN=%bSD=%hDBUS=%hC=%b"
M,S,CIN,SD,DBUS,C);
指令ADDR0,R1(R0+R1→R0)的仿真测试文件及功能仿真波形
fork
b00000111;
#10RD=2'
#10SD=8'
#20RD=2'
#20RS=2'
#20SBUS=0;
#20DRW=0;
#20ABUS=1;
#20CIN=1;
#20LDC=1;
#20M=0;
#20S=4'
b1001;
#30RD=2'
#30DRW=1;
#40DRW=0;
join
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)的仿真测试文件及功能仿真波形
#20RD=2'
#20CIN=0;
b0110;
#30RD=2'
00nsDBUS=03HT3上升沿到来(5ns时)数据07H被写R0
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)的仿真测试文件及功能仿真波形
b00001001;
#20M=1;
b1011;
#38S=4'
join
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
modulecnt256(Q,DATA,LDN,reset,clk);
output[7:
0]Q;
input[7:
0]DATA;
inputLDN,reset,clk;
always@(posedgeclkornegedgereset)//clk上升沿触发
if(!
reset)//异步清零,低电平有效
Q<
=8'
b0;
elseif(!
LDN)Q<
=DATA;
//同步置数,低电平有效
elseQ<
=Q+1;
//计数
endmodule
cnt256.vt
modulecnt256_vlg_tst();
regLDN;
regclk;
regreset;
cnt256i1(
.DATA(DATA),
.LDN(LDN),
.Q(Q),
.clk(clk),
.reset(reset)
DATA=1'
hA;
clk=0;
reset=1;
LDN=1;
DATA=8'
d00010010;
#20reset=0;
#40reset=1;
#260LDN=0;
#80LDN=1;
always
#20clk=~clk;
asdf
利用宏功能模块先生成单端口存储器,再用两单端口存储器进行连接生成双端口存储器
RAM4仿真测试逻辑图
双端口逻辑功能表
(1)从左端口写存储器(在01H单元中写入数据11H)(右端口为只读端口)
T2
T3
MEMW
SBUS
LAR
LPC
MBUS
CLR_
ARINC
PCINC
SD[7..0]
功能
x
01H→AR
x
11
11H→(01H)
(地址线和数据线分时复用技术,先送地址,再送数据)用同样方法在02H中写入22H
(2)从左端口读存储器(从01H中读出数据11H)(右端口为只读端口)
xx
(01H)→DBUS
(地址线和数据线分时复用技术,先送地址,再送数据)用同样方法读出02H中的22H
(3)从右端口读存储器(从01H中读出数据11H)(右端口为只读端口)