从零开始的MIPS之旅-2

目录


简介

往后几篇文章主要介绍ALU的实现方法。
我们计划设计一个32位的ALU。有两根32位宽的数据输入总线,一根32位宽的数据输出总线。在输入端,我们不准备添加carry in数据输入。
在输出端,我们计划添加四根辅助数据线。四根数据线分别为zero-零标志、carry_out-进位或借位标志、OF-溢出标志、sign-符号标志。
在控制端,我们计划使用4位宽的控制线。控制线的低2位控制ALU在对应模式下的运算方式,2位控制ALU是否处于有符号的运算模式,3位即最高位控制ALU处于四则运算模式还是布尔运算模式。


本篇文章主要介绍ALU的框图、控制和辅助输出。

一、模块框图

从零开始的MIPS之旅-2
这是ALU的主框图,各线含义如下:

线名 类别 位宽 功能
inputA 数据线 32 输入一个被操作数A
inputB 数据线 32 输入一个被操作数B
operation 控制线 4 控制ALU的运算模式和方式
output 数据线 32 输出ALU的主要运算结果
zero 数据线 1 标志运算结果为全0
carry_out 数据线 1 标志运算结果有进位或借位
OF 数据线 1 标志有符号模式运算结果溢出
sign 数据线 1 标志有符号模式运算结果的符号

备注:

  1. 被操作数A、B是否为有符号数不影响operation的2位对ALU是否处于有符号的运算模式的控制。
  2. operation的2位不强制影响output的符号位。
  3. 当ALU处于无符号运算模式时,OF和sign均强制处于低电平。
  4. 当ALU处于有符号运算模式时,carry_out强制处于低电平。

二、控制详解

控制线operation对ALU运算模式和方式的控制可由下表确定。

四则或布尔位 符号位 方式位 ALU运算法则
0 0 00 A + B(无符号)
0 0 01 A - B(无符号)
0 0 10 A << B(无符号)
0 0 11 A >> B(无符号)
0 1 00 A + B(有符号)
0 1 01 A - B(有符号)
0 1 10 A << B(有符号)
0 1 11 A >> B(有符号)
1 0 00 A & B
1 0 01 A | B
1 0 10 A < B
1 0 11 A ^ B
1 1 00 A & B
1 1 01 A | B
1 1 10 A < B
1 1 11 A ^ B

三、辅助输出

本ALU设置了四根辅助输出数据线,分别为zero-零标志、carry_out-进位或借位标志、OF-溢出标志、sign-符号标志。
以下将详细介绍各辅助输出数据线在ALU不同工作模式、方式下,随输入数据A, B的变化情况。


1.零标志

ALU处于任意工作模式或方式下,当32位主要输出数据总线output各位都为0时,零标志输出高电平,否则输出低电平。
零标志位在ALU处于不同工作模式或方式下代表的意义不同,大致如下表:

四则或布尔位 符号位 方式位 零标志意义
0 0 00 A == B
0 0 01
0 0 10 A中有效信息可能全部被移除
0 0 11
0 1 00 A == B(无溢出)
0 1 01
0 1 10 A中有效信息可能全部被移除
且A为正数
0 1 11
1 0 00 A与B可以相互屏蔽
1 0 01 A == B == 32‘b0
1 0 10 A >= B
1 0 11 A == B
1 1 00 A与B可以相互屏蔽
且A与B不同时为负
1 1 01 A == B == 32‘b0
1 1 10 A >= B
1 1 11 A == B

2.进位或借位标志

进位或借位标志carry_out仅在ALU处于如下的工作模式及方式时不被强制置为低电平:

  1. 四则无符号工作模式中的加法、减法工作方式。对应ALU控制码分别为0000、0001.
  2. 布尔工作模式中的小于比较工作方式。对应ALU控制码分别为1010、1110.

以上四种工作方式中,进位或借位标志carry_out被置为高电平的条件如下表:

ALU 控制码 carry_out 置1条件
0000 33位加法器的最高位为1
0001
1010 整体而言A < B
1110

备注:

  1. ALU的控制码为0001时,需要取得B的反码,同时增加一个符号位,故此处使用了33位的加法器。
  2. 整体而言A < B的判断方式将在之后的电路实现部分详细说明。

3.溢出标志

溢出标志仅在ALU处于四则有符号工作模式中的加法、减法工作方式时不被强制置为低电平。对应ALU控制码分别为0100、0101.
当ALU控制码为0100时,说明ALU在进行四则有符号加法。OF随输入数据A, B的变化情况如下表:

A 的符号位 B 的符号位 output 的符号位 OF
0 0 0 0
1 1
0 1 0 0
1
1 0 0
1
1 1 0 1
1 0
备注:
  1. 当OF为高电平时,主要数据输出output的数值是不可靠的。

4.符号标志

当ALU处于无符号工作模式时,符号标志sign强制置为低电平。当ALU处于有符号工作模式时,符号标志sign与主要数据输出output的最高位电平一致。
当ALU处于四则有符号加法或减法工作方式时,确定sign是不难的。
当ALU处于四则有符号左移或右移工作方式时,A的符号位并不参与位移动操作。
当ALU处于布尔工作模式时,A与B的符号位均参与相关操作。
当ALU处于不同的工作模式或方式时,符号标志sign的意义不尽相同,具体可参考下表:

ALU控制码 符号标志意义
0100 主要输出数据output的符号
0101
0110 输入数据A的符号
0111
1100 sign为高电平表示A与B均为负数
1101 sign为高电平表示A与B至少一个为负数
1110 sign为高电平表示A为正数,B为负数
1111 sign为高电平表示A与B有一个正数和一个负数

总结

本文首先介绍了ALU的模块框图,给出了各输入数据线、输出数据线、控制线的信息。然后介绍了ALU在控制线输入不同控制码时,所处的不同工作模式和方式。最后详细介绍了各辅助输出数据线,包括数据线的含义、随控制码及输入数据A与B的变化方式、数据线输出高或低电平的意义。

上一篇:浅谈机组


下一篇:前端三大框架