计算机组成原理模型机实验报告.docx

上传人:b****6 文档编号:8301533 上传时间:2023-01-30 格式:DOCX 页数:62 大小:1,021.43KB
下载 相关 举报
计算机组成原理模型机实验报告.docx_第1页
第1页 / 共62页
计算机组成原理模型机实验报告.docx_第2页
第2页 / 共62页
计算机组成原理模型机实验报告.docx_第3页
第3页 / 共62页
计算机组成原理模型机实验报告.docx_第4页
第4页 / 共62页
计算机组成原理模型机实验报告.docx_第5页
第5页 / 共62页
点击查看更多>>
下载资源
资源描述

计算机组成原理模型机实验报告.docx

《计算机组成原理模型机实验报告.docx》由会员分享,可在线阅读,更多相关《计算机组成原理模型机实验报告.docx(62页珍藏版)》请在冰豆网上搜索。

计算机组成原理模型机实验报告.docx

计算机组成原理模型机实验报告

实验六计算机系统综合设计与实现

一、实验目的

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

55

0

1

ff

……

0

1

54

(3)选择将R0送74181的A端口,R1送B端口,进行逻辑功能验算

M

Cn

S[3..0]

RD

RS

DRW

SBUS

ABUS

DBUS[7..0]

1

1

AA

1

1

00

……

1

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时)数据被写R0

10nsDBUS=00001001T3上升沿到来(15ns时)数据被写R1

20nsDBUS=R0&R1=00000001

30nsDRW=1T3上升沿到来(35ns)时DBUS数据被写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;

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

modulecnt256_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_

ARINC

PCINC

SD[7..0]

功能

x

0

1

0

1

0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1