基于Verilog的单周期CPU设计

目录

1             实验项目名称:... 5

2             实验内容和目标... 5

2.1        实验内容... 5

2.2        实验目标... 5

3             实验器材原件设备... 5

4             实验原理:... 5

4.1        单周期CPU.. 5

4.2        MIPS指令格式... 6

4.3        指令集... 6

4.4        指令处理流程... 7

5             实验内容... 8

5.1        PC寄存器... 8

5.2        PCadd. 10

5.3        指令存储器INSTMEM... 11

5.4        控制单元CONUNIT.. 13

5.5        寄存器堆REGFILE.. 16

5.6        ALU.. 22

5.7        数据存储器DATAMEM... 24

5.8        选择器MUX.. 26

5.8.1      MUX4X32. 26

5.8.2      MUX2X5. 27

5.8.3      MUX2X32. 28

5.8.4      MUX32X32. 30

5.9        移位器SHIFTER.. 32

5.9.1      SHIFTER32_L2. 32

5.9.2      SHIFTER_FOR_J 33

5.10      扩展模块EXT16T32. 34

5.11      SingleCycleCPU(整合部件) 35

6             指令分析... 35

6.1        代码及元件图... 35

6.2        根据波形图分析指令... 38

6.2.1      Addi 38

6.2.2      Add. 39

6.2.3      Sub. 40

6.2.4      And. 41

6.2.5      Or 42

6.2.6      Andi 43

6.2.7      Ori 44

6.2.8      J 45

6.2.9      Beq. 46

6.2.10    Bne. 46

6.2.11    Sw.. 46

6.2.12    Lw.. 47

7             封装... 48

7.1        代码和测试文件... 48

7.1.1      代码... 48

7.1.2      测试文件... 50

7.2        元件图... 50

7.3        波形图... 51

8             结论和体会... 51

8.1        体会感悟... 51

8.2        对本实验过程及方法、手段的改进建议... 51

  1. 实验项目名称

单周期CPU的设计

  1. 实验内容和目标
    1. 实验内容
  1. 本实例所设计CPU的指令格式的拟定;
  2. 基本功能部件的设计与实现;
  3. CPU各主要功能部件的设计与实现;
  4. CPU的封装;
  5. 对各个单元组合而成的CPU进行指令测试,配合使用模拟仿真,了解指令和数据在各个单元中的传输过程及方向。
    1. 实验目标

至少支持addsubandoraddiandiorilwswbeqbnej十二条指令。

  1. 实验器材原件设备
  1. 操作系统:Win 10;
  2. 开发平台:Vivado 2019.2;
  3. 编程语言:VerilogHDL硬件描述语言
  1. 实验原理:
    1. 单周期CPU

单周期(Single Cycle)CPU是指CPU从取出1条指令到执行完该指令只需1个时钟周期。电平从低到高变化的瞬间称为时钟上升沿,两个相邻时钟上升沿之间的时间间隔称为一个时钟周期。时钟周期一般也称振荡周期(如果晶振的输出没有经过分频就直接作为CPU的工作时钟,则时钟周期就等于振荡周期。若振荡周期经二分频后形成时钟脉冲信号作为CPU的工作时钟,这样,时钟周期就是振荡周期的两倍。)

    1. MIPS指令格式

MIPS指令系统结构有MIPS-32和MIPS-64两种。本实验的MIPS指令选用MIPS-32。以下所说的MIPS指令均指MIPS-32。MIPS的指令格式为32位,以下为MIPS指的3种格式。

R型指令的op均为0,具体操作由func指定。rs和rt是源寄存器号,rd是目的寄存器号。移位指令中使用sa指定移位位数。

I型指令的低16位是立即数,计算时需扩展到32位,依指令的不同需进行零扩展和符号扩展。

J型指令的低26位是地址,是用于产生跳转的目标地址。

    1. 指令集

本实验中共需要完成12条指令,其中R指令4条,I指令7条,J指令1条,他们的指令结构如下图所示:

R型指令

指令

[31:26]

[25:21]

[20:16]

[15:11]

[10: 6]

[5:0]

功能

Add

000000

rs

rt

rd

000000

100000

寄存器加

Sub

000000

rs

rt

rd

000000

100010

寄存器减

And

000000

rs

rt

rd

000000

100100

寄存器与

Or

000000

rs

rt

rd

000000

100101

寄存器或

I型指令

Addi

001000

rs

rt

immediate

立即数加

Andi

001100

rs

rt

immediate

立即数与

Ori

001101

rs

rt

immediate

立即数或

Lw

100011

rs

rt

offset

取数据

Sw

101011

rs

rt

offset

存数据

Beq

000100

rs

rt

offset

相等转移

Bne

000101

rs

rt

offset

不等转移

J型指令

J

000010

address

跳转

    1. 指令处理流程

单周期CPU指从取出一条指令到执行该条指令只需要一个时钟周期。整个过程可以分为:取指、译码、执行、访问、写回,这五个阶段(并不是所有指令都会完全执行这五个阶段)

  1. 取指令(IF):根据程序计数器PC中的指令地址,从指令存储器中取出一条指令,同时PC根据指令字长度自动递增产生下一条指令所需要的指令地址,但遇到“地址转移”指令时,则控制器把“转移地址”送入PC,当然得到的“地址”需要做些变换才送入PC。
  2. 指令译码(ID):对取指令操作中得到的指令进行分析并译码,确定这条指令需要完成的操作,由指令的[15-12]位产生相应的操作控制信号,用于驱动执行状态中的各种操作。
  3. 指令执行(EXE):根据指令译码得到的操作控制信号,具体地执行指令动作,然后转移到结果写回状态。
  4. 存储器访问(MEM):所有需要访问存储器的操作都将在这个步骤中执行,该步骤给出存储器的数据地址,把数据写入到存储器中数据地址所指定的存储单元或者从存储器中得到数据地址单元中的数据。
  5. 结果写回(WB):指令执行的结果或者访问存储器中得到的数据写回相应的目的寄存器中。

  1. 实验内容

CPU的电路包括数据路径(Data path)和控制部件(Control Unit)两大部分。下面先给出单周期CPU的总体设计图,再分别介绍每个路径和控制部件的设计。

    1. PC寄存器

  1. 模块功能:

存储下一条要执行指令的地址。对于单周期CPU存储的是当前执行指令的地址。

  1. 实现思路:

为实现稳定输出,在时钟信号的上升沿更新,而且需要一个控制信号,在控制信号为0的时候初始化PC寄存器,即全部置零。

  1. 引脚及控制信号:

Clk:时钟周期,输入信号

Reset:控制信号,输入信号

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值