• 全部考试
  • 考试报名
  • 考试时间
  • 成绩查询
  • 网络课程
  • 考试真题
  • 模拟试题
  • 公文文档
  • 文档大全
  • 作文大全
  • 范文大全
  • 招聘大全
  • 当前位置: 勤学考试网 > 招聘大全 > 正文

    计算机组成原理实验三【计算机组成原理实验报告材料1-单周期】

    时间:2020-06-30 07:45:57 来源:勤学考试网 本文已影响 勤学考试网手机站

     计算机组成原理实验报告

     单周期处理器开发

     

     

      Q:1064950364

     2015.05.12

     文档目录:

     功能设计说明

     模块化和层次化设计说明

     具体模块定义

     测试代码及结果

     实验完成时间安排

     心得体会

     功能设计说明

     1. 完成的指令集:

     a) add,sub,and,or,slt,lw,sw,beq 和J 指令。

     b) 不支持溢出。

     2. 处理器为单周期设计。

     3. 功能模块统一采用书上201页的图4-24设计,信号控制采用书上的193页图4-12和200页图4-22的真值表进行化简。

     模块化和层次化设计说明

     具体模块定义

     数据通路:

     1)PC模块定义:

     (1) 基本描述

     PC 主要功能是完成输出当前指令地址。复位后,PC指向0x0000_0000,此处为第一条指令的地址。

     (2) 模块接口

     

     信号名

     方向

     描述

     [31:0]address

     I

     输入的指令地址

     clk

     I

     时钟信号

     rst

     I

     复位信号

     [31:0]out

     O

     输出的指令地址

     (3)功能定义

     序号

     功能名称

     功能描述

     1

     复位

     rst=1时,将out置为0X0000_0000

     2

     输出指令地址

     时钟信号到来时,将address赋给out

     2)NPC模块定义:

     (1) 基本描述

     NPC 主要功能是根据当前指令是否为beq指令,输出下一条指令的地址。该模块调用了MUX模块。

     (2) 模块接口

     

     信号名

     方向

     描述

     [15:0]imaddr

     I

     指令的低16位

     zero

     I

     ALU计算结果:

     1表示当前两寄存器(rs,rt)值相等;

     0表示不相等。

     br

     I

     是否为beq指令。1是0否

     [31:0]pc

     I

     输入当前指令地址

     [31:0]npc

     O

     输出下一条指令地址

     (3)功能定义

     序号

     功能名称

     功能描述

     1

     输出指令地址

     根据zero与br的值输出下一条指令的地址。

     3)ALU模块定义:

     (1) 基本描述

     实现加、减、与、或、小于则赋1五种计算。

     (2) 模块接口

     

     信号名

     方向

     描述

     [2:0]aluctrl

     I

     ALU控制信号

     [31:0]A

     I

      rs寄存器的值

     [31:0]B

     I

     rt寄存器的值

     zero

     O

     B=0,则zero=1;

     否则zero=0.

     [31:0]result

     O

     Alu计算输出的结果。

     (3)功能定义

     序号

     功能名称

     功能描述

     1

     输出计算结果

     根据alu控制信号,输出A与B的计算结果

     2

     输出zero

     若result=0

     则输出zero=1,否则输出zero=0。

     4)MUX模块定义:

     (1) 基本描述

     实现32位和5位二选一数据选择器

     (2) 模块接口

     信号名

     方向

     描述

     S

     I

     MUX控制信号

     [31:0]d0/

     [4:0]d0

     I

      MUX输入

     [31:0]d1/

     [4:0]d1

     I

     MUX输入

     [31:0]y/

     [4:0]y

     O

     MUX输出

     (3)功能定义

     序号

     功能名称

     功能描述

     1

     输出d0,或d1的值

     S为0,y=d0;

     S为1,y=d1.

     5)EXT模块定义:

     (1) 基本描述

     将输入的16位地址按符号位扩展为32位。

     (2) 模块接口

     信号名

     方向

     描述

     [15:0]addrin

     I

     输入的16位地址

      [31:0]addrout

     O

      输出的32位地址

     (3)功能定义

     序号

     功能名称

     功能描述

     1

     输出扩展的32位地址.

     将addrin扩展为32位的addrout.

     6)regfile模块定义:

     (1) 基本描述

      根据输入的两个寄存器地址,输出相应寄存器的值,根据寄存器写信号和寄存器地址,将输入的数据选择写入寄存器。

      (2) 模块接口

     信号名

     方向

     描述

     clk

     I

     时钟信号

     [4:0]rreg1

     I

      Rs寄存器地址

     [4:0]rreg2

     I

     Rt寄存器地址

     [31:0]rdata1

     O

     Rs寄存器值

     [31:0]rdata2

     O

     Rt寄存器值

     regw

     I

     写寄存器信号

     [4:0]wreg

     I

     Rt写寄存器地址

     [31:0]wdata

     I

     写入寄存器的信号

     (3)功能定义

     序号

     功能名称

     功能描述

     1

     读寄存器数据

     读rs、rt寄存器的数据

     2

     向寄存器写入数据

     根据写信号向寄存器选择写入数据

     7)im_4k模块定义:

     (1) 基本描述

      指令存大小为4K,初始化从code.txt载入指令。根据输入的指令地址,输出当前位置存储的指令。

      (2) 模块接口

     信号名

     方向

     描述

     [9:0]addr

     I

     指令地址

     [31:0]dout

     O

      指令

     (3)功能定义

     序号

     功能名称

     功能描述

     1

     载入指令

     初始化载入code.txt中的指令

     2

     输出指令

     根据输入的指令地址,输出当前指令

     8)dm_4k模块定义:

     (1) 基本描述

      “数据存”大小为4K,根据输入的地址读出“数据存”中的数据,并根据数据写信号,将输入的数据选择写入“数据存”中。

      (2) 模块接口

     信号名

     方向

     描述

     clk

     I

     时钟信号

     [9:0]addr

     I

      数据地址

     [31:0]din

     I

     写入的数据

      we

     I

     数据存写信号

     [31:0]dout

     O

     读出的数据

     (3)功能定义

     序号

     功能名称

     功能描述

     1

     读数据存数据

     根据输入的数据地址,读出数据存的数据,读出的数据不一定被使用,只有lw指令才会使用。

     2

     向数据存写入数据

     在时钟信号到来时,根据写数据信号,将输入的数据选择写入数据存中。

     9)Jump模块定义:

     (1) 基本描述

      将输入的低26位指令左移两位,高四位加上pc+4的高4位,组成32位地址输出。

      (2) 模块接口

     信号名

     方向

     描述

     [25:0]addrin

     I

     低26位指令

     [31:0]pc

     I

      当前PC

     [31:0]addrout

     O

     计算出的32位地址

     (3)功能定义

     序号

     功能名称

     功能描述

     1

     输出J跳转地址

     输出计算得到的32位地址,为J指令要跳转的地址。

     10) ALUCtrl模块定义:

     (1) 基本描述

      根据指令的低6位(function字段)和输入的aluop控制信号,利用真值表化简输出三位的ALU控制信号。真值表利用书上193页图4-12.

      (2) 模块接口

     信号名

     方向

     描述

     [5:0]func

     I

     指令低6位

     [1:0]aluop

     I

      Aluop控制信号

     [2:0]aluctrl

     O

      Alu控制信号

     (3)功能定义

     序号

     功能名称

     功能描述

     1

      输出ALU控制信号

     利用真值表化简输出ALU控制信号。

     11) controller模块定义:

     (1) 基本描述

      根据输入的指令高6位(Op字段),利用真值表化简,输出RegDst,ALUSrc,MemtoReg,RegWrite,MemWrite,

     Branch,J,ALUOp控制信号。真值表采用书上200页图4-22,再加上J指令的输入输出。其中高阻状态设为0。MemRead信号可以省略。

      (2) 模块接口

     信号名

     方向

     描述

     [5:0]Op

     I

     指令高6位

      RegDst

     O

      Rd寄存器控制信号

      ALUSrc

     O

      ALU数据来源控制信号

      MemtoReg

     O

      数据存数据写入寄存器控制信号

      RegWrite

     O

      寄存器写控制信号

      MemWrite

     O

      数据存写控制信号

      Branch

     O

      Beq指令控制信号

     J

     O

      J指令控制信号

     [1:0]ALUOp

     O

      ALUOp控制信号

     (3)功能定义

     序号

     功能名称

     功能描述

     1

     输出各种控制信号

     根据输入的OP,利用真值表化简,输出各种控制信号。

     测试代码及结果

     测试代码及结果:

     在regfile模块初始化了17($s1),18($s2),20($s4)号寄存器的值分别为8、4、12.

     add $s3,$s2,$s1 //$s3=4+8=12

     sub $s5,$s4,$s3 //$s5=12-12=0

     beq $s3,$s4,LI //$s3==$s4,跳到LI

     sw $s2,1($s1)

     lw $s3,1($s1)

     LI:and $s5,$s4,$s3 //$s5=$s4 & $s3=12

     or $s5,$s3,$s1 //$s5=$s4 | $s3=12

     slt $s5,$s3,$s1 //$s3>$s1,$s5=0

     sw $s2,1($s1) //存入4

     lw $s3,1($s1) //载入4到$s3

     j LI //跳转

     生成的16进制文件(code.txt): // add $s3,$s2,$s1

     0293a822 // sub $s5,$s4,$s3 // beq $s3,$s4,LI

     ae320001 // sw $s2,1($s1)

     8e330001 //lw $s3,1($s1)

     0293a824 // LI:and $s5,$s4,$s3

     0271a825 // or $s5,$s3,$s1

     0271a82a // slt $s5,$s3,$s1

     ae320001 // sw $s2,1($s1)

     8e330001 // lw $s3,1($s1) //j LI

     实验完成时间安排

     实验前2小时看了Verilog语法,并用ModelSim跑了PPT给的counter程序。

     实验课上跟着老师写了各个模块,至此各个模块已经基本写完。

     中午用了不到1小时写了控制信号及顶层模块,只剩下测试工作。

     中午用了大概半小时时间测试程序可以运行,完成调试。

     总体完成时间在10小时以。

     6、心得体会

      通过该实验,对硬件编程有了更深入的理解。之前参加学校的PLD比赛赛前培训(后来时间太紧,比赛放弃),使用过Vivado跑了一段测试程序,当时对仿真一块还不太懂,此次实验更加深了理解。对单周期处理器的认识也更深刻了。开发初期,受c语言开发的限制,老是想不通这些模块的调用参数是如何传递的。后来想到Verilog有wire型变量,其实就可以将其想象成一条条真实的线,各个模块就是各个真实的器件,这些器件用线连接起来才可以工作。于是,便突破了思想局限,顺利完成了实验。使用开发工具多了,渐渐就会发现这些工具都小异,所以上手也会很快。

    相关热词搜索: 周期 原理 实验 计算机 材料

    • 考试时间
    • 范文大全
    • 作文大全
    • 课程
    • 试题
    • 招聘
    • 文档大全

    推荐访问