Java教程

从零开始的MIPS之旅-2

本文主要是介绍从零开始的MIPS之旅-2,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

  • 简介
  • 一、模块框图
  • 二、控制详解
    • 三、辅助输出
      • 1.零标志
      • 2.进位或借位标志
      • 3.溢出标志
      • 4.符号标志
  • 总结


简介

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


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

一、模块框图

ALU主框图
这是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运算法则
0000A + B(无符号)
0001A - B(无符号)
0010A << B(无符号)
0011A >> B(无符号)
0100A + B(有符号)
0101A - B(有符号)
0110A << B(有符号)
0111A >> B(有符号)
1000A & B
1001A | B
1010A < B
1011A ^ B
1100A & B
1101A | B
1110A < B
1111A ^ B

三、辅助输出

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


1.零标志

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

四则或布尔位符号位方式位零标志意义
0000A == B
0001
0010A中有效信息可能全部被移除
0011
0100A == B(无溢出)
0101
0110A中有效信息可能全部被移除
且A为正数
0111
1000A与B可以相互屏蔽
1001A == B == 32‘b0
1010A >= B
1011A == B
1100A与B可以相互屏蔽
且A与B不同时为负
1101A == B == 32‘b0
1110A >= B
1111A == B

2.进位或借位标志

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

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

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

ALU 控制码carry_out 置1条件
000033位加法器的最高位为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
0000
11
0100
1
100
1
1101
10
备注:
  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
1100sign为高电平表示A与B均为负数
1101sign为高电平表示A与B至少一个为负数
1110sign为高电平表示A为正数,B为负数
1111sign为高电平表示A与B有一个正数和一个负数

总结

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

这篇关于从零开始的MIPS之旅-2的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!