1. 处理器的设计步骤
<1> 分析指令系统,得出对数据通路的要求。所谓数据通路,就是指令所要操作的数据,需要通过怎样的电路结构。
<2> 为数据通路选择合适的组件,例如加法器、寄存器等
<3> 连接组件,建立数据通路
<4> 分析每条指令的实现,以确定控制信号
<5> 集成控制信号,形成完整的控制逻辑
2. 简化的MIPS指令系统
我们为了学习的目的,只考虑以下几个MIPS指令,
2.1 无符号加法和减法指令
addu rd,rs,rt
subu rd,rs,rt
2.2 立即数的逻辑或
ori rt,rs,imm16
2.3 lw和sw指令
lw rt,imm16(rs)
sw rt,imm16(rs)
2.4 条件分支
beq rs,rt,imm16
3. 指令的含义
3.1 指令位域的分解
对于R型指令,
对于I型指令,
因此,我们需要一个支持可读的指令存储器,不需要写入功能,只读就行,输入给指令存储器一个32-bit的地址,就能输出对应地址的32-bit指令。因此还需要一个32-bit寄存器,存储这个指令的地址,即程序计数器PC。
3.2 指令的操作
分析addu和subu指令的操作,执行这两条指令需要,
<1> 一组存放数据的32-bit通用寄存器,在MIPS中一共有32个这样的寄存器,称为寄存器堆
<2> 可以同时读取两个寄存器的内容,rs和rt
<3> 可以改写一个寄存器的内容,rd或rt(rt是因为ori指令的结果会改写rt寄存器的值)
<4> 将16-bit立即数扩展为32-bit,扩展方式为零扩展
<5> 提供加、减、逻辑或这三种功能的运算器
<6> 运算的操作数可以是寄存器,也可以是扩展后的立即数
<7> 一个存放数据的存储器,可读可写,地址和数据都是32-bit
<8> 对16-bit立即数进行扩展,扩展方式为符号扩展
<9> 比较两个数,判断是否相等
<10> PC寄存器支持两种自增方式,加4或加一个立即数
3.3 指令系统的需求
<1> 算术逻辑单元ALU,支持加、减、或、比较相等,操作数是2个32-bit的数,可以来自寄存器,也可以是扩展后的立即数
<2> 立即数扩展部件,16-bit扩展为32-bit,可以是零扩展或符号扩展
<3> 程序计数器PC,32-bit寄存器,支持两种加法,加4或加立即数
<4> 寄存器堆,32个32-bit寄存器,支持读操作,可以同时读2个寄存器rs和rt,支持写寄存就,1次可以写1个rt或rd,俗称两读一写的寄存器堆
<5> 两个存储器,一个是只读的指令存储器,地址和数据都是32-bit,一个是数据存储器,可读可写,地址和数据也都是32-bit。注意这两个存储器对应CPU内部的指令和数据Cache。
3.5 寄存器堆
<1> busA, busB: 两组32-bit的数据输出
<2> busW: 32-bit数据输入
寄存器的读写控制:
<1> Ra(5-bit): 选中对应编号的寄存器,将其内容放在busA上
<2> Rb(5-bit): 选中对应编号的寄存器,将其内容放在busB上
<3> Rw(5-bit): 选中对应编号的寄存器,在时钟信号上升沿到来时,如果写使能WriteEnable信号为高电平,即写使能有效,就把busW的内容写入寄存器。
<4> 注意:读寄存器是不受时钟信号控制的,只要有Ra或Rb,其内容就会出现在busA和busB上
3.6 存储器
存储器功能和寄存器堆的功能类似,可以理解为一读一写。