• 单周期CPU设计的理论基础


     写在前面:本博客内容为本人老师原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文!

    本博客全网唯一合法URL:http://www.cnblogs.com/acm-icpcer/p/9291767.html

    1.指令集设计:

    CPU的指令类型根据其操作的不同,可以分为下面七类。

    (1)计算类指令(Computational)

    计算类指令用于执行算术操作,乘/除,逻辑操作和对寄存器进行移位操作。这些指令有两种类型:寄存器类型和立即数类型。寄存器类型的指令使用两个源寄存器的值作为源操作数,立即数类型使用一个寄存器和立即数作为源操作数。根据操作的不同,这些指令分为下面4种:

    (2)Load/Store指令

    Load和Store指令都为立即数(I-type)类型,用来在存储器和通用寄存器之间的储存和装载数据。值得一提的是MIPS指令集只有该类指令访问内存,而其他指令都在寄存器之间进行,所以指令的执行速度较高。该类指令只有基址寄存器的值加上扩展的16位有符号立即数一种寻址模式,数据的存取方式可以是字节(byte)、字(word)和双字(Double word)。

    指令格式:

    (3)跳转/分支指令(jump & branch)

    跳转和分支指令改变程序流。所有的跳转和分支指令都会产生的一个延迟槽(delay slot)。紧跟着跳转/分支指令后的指令(delay slot中的指令)也被执行,然后在跳转目的的第一条指令从存储器中取出并执行,这是在指令的流水线执行时获得更高效率。

    (4)寄存器传送指令

    寄存器传送指令用来在系统的通用寄存器(GPR)、乘除法专用寄存器(HI、LO)之间传送数据,这些指令分为有条件传送和无条件传送2种类型。

     

    (5)专用指令

    专用指令用来产生软件中断,当执行这类指令的时候,CPU产生异常并转入中断处理程序。这些指令有系统调用(Syscall),暂停(Break)和Trap指令等,主要用于软件的异常处理。

     

    (6)协处理器指令

    协处理器指令对协处理器进行操作。协处理器的Load和Store指令是立即数类型,每个协处理器指令的格式依协处理器不同而不同。

     

    (7)系统控制协处理器(CP0)指令

    系统控制协处理器(CP0)指令执行对CP0寄存器的操作来控制处理器的存储器并执行异常处理。

    本实验设计只选取了20条典型的MIPS指令来描述CPU逻辑电路的设计方法。下表列出了本实验的所涉及到的20条MIPS指令。

    20条MIPS指令

    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

    寄存器或

    Xor

    000000

    rs

    rt

    rd

    000000

    100110

    寄存器异或

    Sll

    000000

    00000

    rt

    rd

    sa

    000000

    左移

    Srl

    000000

    00000

    rt

    rd

    sa

    000010

    逻辑右移

    Sra

    000000

    00000

    rt

    rd

    sa

    000011

    算术右移

    Jr

    000000

    rs

    rt

    rd

    000000

    001000

    寄存器跳

    I型指令

    Addi

    001000

    rs

    rt

    immediate

    立即数加

    Andi

    001100

    rs

    rt

    immediate

    立即数与

    Ori

    001101

    rs

    rt

    immediate

    立即数或

    Xori

    001110

    rs

    rt

    immediate

    立即数异或

    Lw

    100011

    rs

    rt

    offset

    取数据

    Sw

    101011

    rs

    rt

    offset

    存数据

    Beq

    000100

    rs

    rt

    offset

    相等转移

    Bne

    000101

    rs

    rt

    offset

    不等转移

    Lui

    001111

    00000

    rt

    immediate

    设置高位

    J型指令

    J

    000010

    address

    跳转

    Jal

    000011

    address

    调用

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

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

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

    2.总体电路设计:

    本实验所设计的单周期CPU的总体电路结构如图所示。

     

    本实验所设计的CPU主要组成部分有:运算器(ALU)、控制器(Control Unit)、寄存器堆(Register Files)、取指电路及相关基础部件(如选择器)等构成。

    具体的代码实现请看:

    Verilog HDL语言实现的单周期CPU设计(全部代码及其注释)

    tz@COI HZAU

    2018/7/10

  • 相关阅读:
    centos7安装supervisor
    redis4.0 cluster搭建
    网易cetus数据库中间件安装-读写分离版本
    mongodb副本集基于centos7部署
    C# 单例模式实现
    HttpWebRequest的GET和POST方法
    C#中$的用法
    判断一个表是否存在
    C# 继承的一些解释
    C# 虚方法和抽象方法
  • 原文地址:https://www.cnblogs.com/acm-icpcer/p/9291767.html
Copyright © 2020-2023  润新知