MIPS单周期CPU实验报告 - 图文(4)

2019-08-31 13:23

计算机组成原理实验

19. PCout <= PCin; 20. end 21. end 22. endmodule

仿真截图:

(3)程序存储器(instruction memory) Verilog代码:

1. module IMemory( 2. input InsMemRW, 3. input [31:0] address, 4. output reg [31:0] DataOut 5. );

6. reg [7:0] mem [0:127]; 7. initial begin

8. DataOut = 32'b111111_0000000_0000000_0000000_00000;

9. $readmemb(\, mem); 10. end

11. always@(address or InsMemRW) begin 12. if(InsMemRW == 1) begin

13. DataOut[31:24] <= mem[address]; 14. DataOut[23:16] <= mem[address+1]; 15. DataOut[15:8] <= mem[address+2]; 16. DataOut[7:0] <= mem[address+3]; 17. end 18. end 19. endmodule

仿真截图:

(4)ALU Verilog代码:

计算机组成原理实验

1. module ALU(

2. input [2:0] ALUopcode, 3. input [31:0] rega, 4. input [31:0] regb, 5. output reg [31:0] result, 6. output zero, 7. output sign 8. );

9. assign zero = (result==0)?1:0; 10. assign sign = result[31];

11. always @( ALUopcode or rega or regb ) begin 12. case (ALUopcode)

13. 3'b000 : result = rega + regb; 14. 3'b001 : result = rega - regb; 15. 3'b010 : result = regb << rega; 16. 3'b011 : result = rega | regb; 17. 3'b100 : result = rega & regb;

18. 3'b101 : result = (rega < regb)?1:0; // 不带符号比较 19. 3'b110 : begin // 带符号比较

20. if (rega

26. 3'b111 : result = rega ^ regb; 27. endcase 28. end 29. endmodule

仿真截图:

(5)寄存器堆 Verilog代码:

计算机组成原理实验

1. module RegFile( 2. input CLK, 3. input RST, 4. input RegWre,

5. input [4:0] ReadReg1, 6. input [4:0] ReadReg2, 7. input [4:0] WriteReg, 8. input [31:0] WriteData, 9. output [31:0] ReadData1, 10. output [31:0] ReadData2 11. );

12. reg [31:0] regFile[1:31]; // 寄存器定义必须用reg 类型 13. integer i;

14. assign ReadData1 = (ReadReg1 == 0) ? 0 : regFile[ReadReg1]; // 读寄存器数

15. assign ReadData2 = (ReadReg2 == 0) ? 0 : regFile[ReadReg2]; 16. always @ (negedge CLK) begin // 必须用时钟边沿触发 17. if (RST==0) begin 18. for(i=1;i<32;i=i+1) 19. regFile[i] <= 0; 20. end

21. else if(RegWre == 1 && WriteReg != 0) begin 22. regFile[WriteReg] <= WriteData; 23. end 24. end 25. 26. endmodule

仿真截图:

(6)数据存储单元(Data Memory) Verilog代码:

1. module DataMemory( 2. input clk,

3. input [31:0] address, 4. input RD, 5. input WR,

计算机组成原理实验

6. input [31:0] DataIn, 7. output [31:0] DataOut 8. ); 9.

10. reg [7:0] ram[0:127]; 11. integer i; 12. initial begin;

13. for(i=0;i<128;i=i+1) 14. ram[i]<=0; 15. end 16. // output

17. assign DataOut[7:0] = (RD == 0)? ram[address+3]:8'bz; 18. assign DataOut[15:8] = (RD == 0)? ram[address+2]:8'bz; 19. assign DataOut[23:16] = (RD == 0)? ram[address+1]:8'bz; 20. assign DataOut[31:24] = (RD == 0)? ram[address]:8'bz; 21. // input

22. always@(negedge clk) begin 23. if(WR == 0) begin

24. if(address>=0 && address<128) begin 25. ram[address] <= DataIn[31:24]; 26. ram[address+1] <= DataIn[23:16]; 27. ram[address+2] <= DataIn[15:8]; 28. ram[address+3] <= DataIn[7:0]; 29. end 30. end 31. end 32. endmodule

仿真截图:

3.测试程序:

测试程序如下:

地址 汇编程序 指令代码 oprs(5) (6) 000001 010000 000000 000010 010001 00000 00000 00010 00011 00011 rt(5) rd(5)/immediate (16) 00001 00010 00001 00010 00010 0000 0000 0000 1000 0000 0000 0000 0010 00011 00000 000000 00101 00000 000000 00100 00000 000000 16进制数代码 0401 0008 4002 0002 0041 1800 0862 2800 4462 2000 0x00000000 addi $1,$0,8 0x00000004 ori $2,$0,2 0x00000008 add $3,$2,$1 0x0000000C sub $5,$3,$2 0x00000010 and $4,$5,$2 计算机组成原理实验

0x00000014 or $8,$4,$2 0x00000018 sll $8,$8,1 0x0000001C bne $8,$1,-2 (≠,转18) 0x00000020 slt $6,$2,$1 0x00000024 slt $7,$6,$0 0x00000028 addi $7,$7,8 0x0000002C beq $7,$1,-2 (≠,转28) 0x00000030 sw $2,4($1) 0x00000034 lw $9,4($1) 0x00000038 bgtz $9,2 (=0) 0x0000003C addi $9,$0,15 0x00000040 j 0x00000038 0x00000044 halt 机器代码(.roe):

010010 011000 110001 011100 011100 000001 110000 100110 100111 110010 000001 111000 111111 00100 00000 01000 00010 00110 00111 00111 00001 00001 01001 00000 00010 01000 00001 00001 00000 00111 00001 00010 01001 00000 01001 01000 00000 000000 01000 00001 000000 1111 1111 1111 1110 00110 00000 000000 00111 00000 000000 0000 0000 0000 1000 1111 1111 1111 1110 0000 0000 0000 0100 0000 0000 0000 0100 0000 0000 0000 0010 0000 0000 0000 1111 4882 4000 6008 4040 C501 FFFE 7041 3000 70C0 3800 04E1 0008 C0E1 FFFE 9822 0000 9C29 0004 C920 0002 0409 000F E000 000E FC00 0000 00 0000 0000 0000 0000 0000 1110 00 0000 0000 0000 0000 0000 0000

仿真截图:

(1)addi $1, $0, 8 至 bne $1, $8, -2


MIPS单周期CPU实验报告 - 图文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:北师大版六年级数学下册第三单元教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: