1、计算机组成原理模型机实验报告实验六计算机系统综合设计与实现一、实验目的1、深入理解计算机系统工作的基本原理,建立整机概念。2、融会贯通计算机组成原理课程的内容,通过知识的综合运用,加深对计算机系统各模块的工作原理及相互联系的认识。3、培养科学研究的独立工作能力,取得工程设计与组装调试的实践经验。二、实验要求1、将已经设计的运算器、存储器和控制器连接,构建完整的计算机系统;2、编写一段可以实现一定功能的指令程序,进行计算机整机系统功能的验证。3、所有任务要求功能仿真和必要的验证。实验完成后,一周内提交实验报告。三、实验设备PC机+ Quartus10.0 + FPGA(DE2-115)+TEC-
2、8实验箱四、计算机系统(TEC-8)综合逻辑框图硬连线控制器控制信号切换电路ALU A端口B端口C Z R0 R1 R2 R3 IR PC AR 双端口RAM DBUS五、实验任务1、将实验二的运算器、实验三的存储器和实验五的控制器连接,构建完整的计算机系统;2、计算机整机系统功能测试,进行功能仿真和时序仿真并在DE2-115上验证。(1)根据指令系统,编写一段可以实现一定功能的程序,要求:有一个合理的运算功能和逻辑关系;指令数量:不少于8条;指令类型:停机、跳转、RR、读存、写存、算术和逻辑运算;(2)将指令程序手工汇编成二进制代码;(3)理论上设置寄存器的初值,并计算程序执行后的结果;(4
3、)将指令程序的二进制代码存入存储器RAM中;(5)将需要的运算数据初值存入寄存器R0-R3中;(6)进行程序连续运行的功能仿真和时序仿真,将仿真运算结果与理论计算结果进行比较。六、实验步骤实验电路图子模块(1)tri_74244tri74244.vmodule tri_74244 (en,Din,Dout ); input en ; wire en ; input 7:0 Din; wire 7:0 Din ; output 7:0 Dout ; reg 7:0 Dout ; always (en or Din)begin if (en)Dout= Din ; else Dout = 8bzz
4、zzzzzz; end endmoduletimescale 1 ps/ 1 psmodule tri_74244_vlg_tst();reg eachvec;reg 7:0 Din;reg en;wire 7:0 Dout;tri74244.vttimescale 1 ps/ 1 psmodule tri_74244_vlg_tst();reg eachvec;reg 7:0 Din;reg en;wire 7:0 Dout;tri_74244 i1 ( .Din(Din), .Dout(Dout), .en(en);integer i; initial begin i=0; Din=8b0
5、0000000; en=0; en=1; #30 en=0; #40 en=1;end initial begin for(i=0;i10;i=i+1) begin #10 Din=i; end end endmoduletri74244功能仿真(2)ALUALU.bdfmodolue_74181 使用quartus库中的74181模块转换为verilog文件即可de2_4de2_4.vmodule de2_4(en,in,out); input 2:1 in ; input en; output 4:1 out ; reg 4:1 out ; always (en or in) if (en
6、) case (in) 2b00:out=4b0001; 2b01:out=4b0010; 2b10:out=4b0100; 2b11:out=4b1000; default:out=4b0000; endcase else out=4b0000; endmodulede2_4.vttimescale 1 ns/ 1 psmodule de2_4_vlg_tst();reg eachvec;reg en;reg 2:1 in; wire 4:1 out; de2_4 i1 ( .en(en), .in(in), .out(out);initial begin en=0;endinitial b
7、egin # 10 en=1;endinitial begin # 5 in=2b00;#15 in=2b01;#15 in=2b10;#15 in=2b11;#40 $finish;endinitial$monitor($time,en=%b in=%b out=%b,en,in,out); endmodulereg8reg8.vmodule reg8 ( T3,DOUT ,D ); input T3 ; wire T3 ; input 7:0 D ; wire 7:0 D ; output 7:0 DOUT ; reg 7:0 DOUT ; always ( posedge T3 ) be
8、gin DOUT = D ; end endmodule reg8.vttimescale 1 ps/ 1 psmodule reg8_vlg_tst();reg eachvec;reg 7:0 D;reg T3;wire 7:0 DOUT;reg8 i1 ( .D(D), .DOUT(DOUT), .T3(T3);integer i;initialbegin T3=0; D=8d0;end alwaysbegin #5 T3= T3; end initial begin for(i=0;i11;i=i+1) begin #10 D=i; end end endmodulemux4_1mux4
9、_1.vmodule mux4_1( d1, d2, d3, d4, se1, se2, dout ); input 7:0d1; input 7:0d2; input 7:0d3; input 7:0d4; input se1; input se2; output dout; reg 7:0dout; always (d1 or d2 or d3 or d4 or se1 or se2) case(se2,se1) 2b00 : dout=d1; 2b01 : dout=d2; 2b10 : dout=d3; 2b11 : dout=d4; endcaseendmodulemux4_1.vt
10、timescale 1 ps/ 1 psmodule mux4_1_vlg_tst();reg eachvec;reg 7:0 d1;reg 7:0 d2;reg 7:0 d3;reg 7:0 d4;reg se1;reg se2;wire 7:0 dout;mux4_1 i1 ( .d1(d1), .d2(d2), .d3(d3), .d4(d4), .dout(dout), .se1(se1), .se2(se2);integer i,j;initial begin #10 d1=8b00000001; d2=8b00000010; d3=8b00000011; d4=8b00000100
11、; end initial begin #5 while(1) for(i=0;i2;i=i+1) for(j=0;j2;j=j+1) begin #5 se2=i; se1=j; end end endmoduleALU逻辑电路图逻辑功能表(1)写寄存器(例如:向通用寄存器R0-R3分别写入数据55H/AAH/03H/04H)T 3RDDRWSBUSABUSDBUS7.0功能(写R)0 011055H55HR00 1110AAHAAHR11 011003H03HR21 111004H04HR3(2)选择将R0送74181的A端口,R1送B端口,进行算术功能验算MCnS3.0RDRSDRWSB
12、USABUSDBUS7.00 100000001001550100010001001ff011111000100154(3)选择将R0送74181的A端口,R1送B端口,进行逻辑功能验算MCnS3.0RDRSDRWSBUSABUSDBUS7.01 000000001001AA100001000100100101111000100155当A=55H,B=AAH,S=00001111,M=0,CIN=1时仿真测试文件及功能仿真波形timescale 1 ns/ 1 psmodule alu_vlg_tst();reg T3;reg SBUS;reg DRW;reg ABUS;reg LDC;reg
13、 CIN;reg M;reg 1:0 RD;reg 1:0 RS;reg 3:0 S;reg 7:0 SD;wire 7:0 DBUS;wire C;alu i1 ( .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=2b00; SD=8b01010101; #10 RD=2b01; SD=8b101
14、01010;#10 RD=2b10; SD=8b00000011; #10 RD=2b11; SD=8b00000100; #10 RD=2b00; RS=2b01; SBUS=0; DRW=0; ABUS=1; CIN=1; LDC=1; M=0; end always begin #5 T3=T3; endinteger i;initial begin #40 S=4b0000; for(i=1;i16;i=i+1) #10 S=i; end initial $monitor($time,M=%b S=%b CIN=%b SD=%h DBUS=%h C=%b,M,S,CIN,SD,DBUS
15、,C);endmodule指令ADD R0,R1( R0+R1 R0)的仿真测试文件及功能仿真波形timescale 1 ns/ 1 psmodule alu_vlg_tst();reg T3;reg SBUS;reg DRW;reg ABUS;reg LDC;reg CIN;reg M;reg 1:0 RD;reg 1:0 RS;reg 3:0 S;reg 7:0 SD;wire 7:0 DBUS;wire C;alu i1 ( .ABUS(ABUS), .C(C), .CIN(CIN), .DBUS(DBUS), .DRW(DRW), .LDC(LDC), .M(M), .RD(RD),
16、.RS(RS), .S(S), .SBUS(SBUS), .SD(SD), .T3(T3);initial fork T3=0; SBUS=1; DRW=1; ABUS=0; RD=2b00; SD=8b00000111; #10 RD=2b01; #10 SD=8b00000001;#20 RD=2b00; #20 RS=2b01; #20 SBUS=0; #20 DRW=0; #20 ABUS=1; #20 CIN=1; #20 LDC=1; #20 M=0; #20 S=4b1001;#30 RD=2b00; #30 DRW=1; #40 DRW=0;join always begin
17、#5 T3=T3; endendmodule00ns DBUS=07H T3上升沿到来(5ns时)数据07H被写R010ns DBUS=01H T3上升沿到来(15ns时)数据01H被写R120ns DBUS= R0+R1=07+01=08H30ns T3上升沿到来(35ns)时DBUS数据08H被写R0,因此DBUS=R0+R1=08H+01H=09H(说明实现了R0+R1 R0)注意:此时M=0, S=1001,CIN=1(相当于C0=0),实现算术运算A+B指令SUB R0,R1( R0-R1 R0)的仿真测试文件及功能仿真波形timescale 1 ns/ 1 psmodule alu
18、_vlg_tst();reg T3;reg SBUS;reg DRW;reg ABUS;reg LDC;reg CIN;reg M;reg 1:0 RD;reg 1:0 RS;reg 3:0 S;reg 7:0 SD;wire 7:0 DBUS;wire C;alu i1 ( .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;
19、 ABUS=0; RD=2b00; SD=8b00000111; #10 RD=2b01; #10 SD=8b00000001; #20 RD=2b00; #20 RS=2b01; #20 SBUS=0; #20 DRW=0; #20 ABUS=1; #20 CIN=0; #20 LDC=1; #20 M=0; #20 S=4b0110; #30 RD=2b00; #30 DRW=1; #40 DRW=0;join always begin #5 T3=T3; endendmodule00ns DBUS=03H T3上升沿到来(5ns时)数据07H被写R010ns DBUS=01H T3上升沿
20、到来(15ns时)数据01H被写R120ns DBUS= R0-R1=07-01=06H30ns T3上升沿到来(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指令AND R0,R1( R0&R1 R0)的仿真测试文件及功能仿真波形timescale 1 ns/ 1 psmodule alu_vlg_tst();reg T3;reg SBUS;reg DRW;reg ABUS;re
21、g LDC;reg CIN;reg M;reg 1:0 RD;reg 1:0 RS;reg 3:0 S;reg 7:0 SD;wire 7:0 DBUS;wire C;alu i1 ( .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=2b00; SD=8b00000111; #10 RD=2b01;
22、#10 SD=8b00001001; #20 RD=2b00; #20 RS=2b01; #20 SBUS=0; #20 DRW=0; #20 ABUS=1; #20 CIN=1; #20 LDC=1; #20 M=1; #20 S=4b1011; #30 RD=2b00; #30 DRW=1; #38 S=4b0000; #40 DRW=0; join always begin #5 T3=T3; endendmodule00ns DBUS=00000111 T3上升沿到来(5ns时)数据00000111被写R010ns DBUS=00001001 T3上升沿到来(15ns时)数据00001
23、001被写R120ns DBUS= R0&R1=0000000130ns DRW=1 T3上升沿到来(35ns)时DBUS数据00000001被写R0,38 ns M=1,S=0000 DBUS=R0&R1=11111110H 实现了求反运算(说明已经实现了R0&R1 R0)(3)RAM4RAM4.bdfcnt256cnt256.vmodule cnt256(Q,DATA,LDN,reset,clk); output 7:0 Q;input 7:0 DATA;input LDN,reset,clk;reg 7:0 Q;always (posedge clk or negedge reset)
24、/clk上升沿触发begin if(!reset) /异步清零,低电平有效 Q=8b0; else if(!LDN) Q=DATA; /同步置数,低电平有效 else Q=Q+1; /计数endendmodule cnt256.vttimescale 1 ns/ 1 psmodule cnt256_vlg_tst();reg 7:0 DATA;reg LDN;reg clk;reg reset; wire 7:0 Q;cnt256 i1 ( .DATA(DATA), .LDN(LDN), .Q(Q), .clk(clk), .reset(reset);initial begin DATA=1h
25、A; clk=0; reset=1; LDN=1; DATA=8d00010010; #20 reset=0; #40 reset=1; #260 LDN=0; #80 LDN=1; end always begin #20 clk=clk; end endmoduleasdf 利用宏功能模块先生成单端口存储器,再用两单端口存储器进行连接生成双端口存储器RAM4仿真测试逻辑图双端口逻辑功能表(1)从左端口写存储器(在01H 单元中写入数据11H)(右端口为只读端口)T2 T3 MEMW SBUS LAR LPC MBUS CLR_ ARINC PCINC SD7.0 功能x 0 110 0 1
26、 0 0 0101HAR x1 10 0 0 1 0 0 1111H(01H)(地址线和数据线分时复用技术,先送地址,再送数据)用同样方法在02H 中写入22H (2)从左端口读存储器(从01H 中读出数据11H)(右端口为只读端口)T2 T3 MEMW SBUS LAR LPC MBUS CLR_ ARINC PCINC SD7.0 功能x 0 110 0 1 0 0 0101HAR x 00 0 0 11 0 0 xx (01H) DBUS(地址线和数据线分时复用技术,先送地址,再送数据)用同样方法读出02H 中的22H (3)从右端口读存储器(从01H 中读出数据11H)(右端口为只读端口)T2 T3 MEMW SBUS LAR LPC MBUS CLR_ ARINC PCINC SD7.0 功能x 0 10 10 1 0 0 01
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1