Verilog实验三原理2:ALU工作原理 (1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ALU工作原理
ALU是算术逻辑运算单元,能执行的功能包含算术运算(加减乘除)以及逻辑运算(与、或、异或、或非、移位等)。

一、基本电路结构分析
图中A(31:0)和B(31:0)分别代表2个32位的操作数,A与B进行何种操作由控制信号ALU_operation(2:0)决定,两个操作数进行ALU算术逻辑运算操作后的结果输出至32位res(31:0)端口。

图中各逻辑运算组件功能如下:
1)and32组件:对A与B 进行逻辑“与”操作。

2)or32组件:对A与B 进行逻辑“或”操作。

3)ADC32组件:对A与B 进行算术“加”操作。

4)xor32组件:对A与B 进行逻辑“异或”操作。

5)nor32组件:对A与B 进行逻辑“或非”操作。

6)srl32组件:对操作数B 进行移位操作。

Ø问题:为什么图中四则运算实现电路没有减法和乘除法部分?
答:因为在计算机中,减法是通过补码的加法来实现的,乘除法是通过加法和移位操作来实现的。

二、如何确定操作数A与B是执行何种运算操作
对操作数A与B进行何种操作,由3根控制信号ALU_operation(2:0)决定。

ALU_operation(2:0) 连接至下图8选1多路选择器MUX8T1控制信号线上。

多路选择器原理:
左边的8根输入线I0~I7代表输入数据,右边的o线代
表输出数据,括号(31:0)代表输入与输出数据为32位。

上面s(2:0)代表3位控制信号:
•当s(2:0) = 000时,输出o = I0.
•当s(2:0) = 001时,输出o = I1.
•当s(2:0) = 010时,输出o = I2.
•当s(2:0) = 011时,输出o = I3. 依次类推.
由于输入有8根线,因此,控制信号s需要3根选择线。

由于ALU_operation(2:0)连接至多路选择器的控制信号线s(2:0)上,因此,ALU_operation(2:0)的不同取值将决定多路选择器的输出,也即决定ALU电路的最终输出结果res(31:0)。

当ALU_operation(2:0)= 000,多路选择器s(2:0) = 000,此时,ALU输出res(31:0) = I0(31:0) = A&B,即ALU_operation(2:0)= 000对应逻辑“与”运算.
依次类推:
•ALU_operation(2:0) = 000,res(31:0) = I0(31:0) = A&B,执行与运算。

•ALU_operation(2:0) = 001,res(31:0) = I0(31:0) = A|B,执行或运算。

•ALU_operation(2:0) = 010,res(31:0) = I0(31:0) = A+B,执行加法运算。

•ALU_operation(2:0) = 011,res(31:0) = I0(31:0) = A⊕B,执行异或运算。

•ALU_operation(2:0) = 100,res(31:0) = I0(31:0) = A nor B,执行或非运算。

•ALU_operation(2:0) = 101,res(31:0) = I0(31:0) = B>>1,执行移位运算。

•ALU_operation(2:0) = 110,res(31:0) = I0(31:0) = A+B,执行加法运算。

Ø问题:为什么“ADC带进位加法”运算的结果会同时连接到多路选择器的两个输入端I2与I6?
或者说,为什么ALU_operation(2:0) = 010或110时,均对应ADC带进位加法运算?
答:因为在计算机中,减法也是通过加法来运算的,即加法与减法操作均通过“ADC带进位加法”组件来计算,因此,两者共用同一个运算结果输出端口。

三、ADC组件是如何实现对A与B进行加法或减法操作的?
1. ADC电路接口如下所示:
C0代表进位值,S(32:0)代表输出。

即:S = A+B+C0.
2.ADC电路原理
在电路连接上,ALU_operation(2:0)的最高位信号线ALU_operation[2]连接至
图中所示的信号线s上(图下左图所示,信号线s= ALU_operation[2]),信号线
s通过信号线扩展器从1位扩展为32位So(31:0),扩展器的原理如下右图所示。

So(31:0)再与操作数B(31:0)做异或,并将异或的结果连接至ADC的输入端B。

根据之前分析可知,当进行ADC运算时,ALU_operation(2:0)的值为010或110,其中一个为加法操作,另一个位减法操作。

究竟010代表减法还是110代表减法是由MIPS CPU的指令语法格式规定的。

如果学习MIPS CPU指令格式相关知识,可以明确知道是哪种答案。

但在没有学习相关理论知识的前提下,我们如何直接通过电路来找出正确的答案?下面我们对这个问题进行分析。

1)假设110代表减法,即ALU_operation(2:0) = 110时ADC执行减法操作,下面来论证此假设是否正确。

ALU_operation(2:0) = 110,则最高位信号线ALU_operation[2] = 1,则信号扩展器的输入端s=1,则So(31:0)=1111…111。

此情况下,操作数B与So(31:0)进行xor异或,得到B反(可此电路可看出,计算机中反码是通过原码与全1进行异或得到)。

此外,由于s=1,则ADC进位值C0为1。

因此,ADC输出值为(如下图所示):
S = A+B 反+C 0 = A+ B 反+1 = A + B 补 = A-B.
可看出,此时执行的是A-B 操作,验证了假设前提ALU_operation(2:0) = 110
代表减法操作的正确性。

2)既然ALU_operation(2:0) = 110代表减法操作,那ALU_operation(2:0) = 010代表加法操作。

下面来进一步论证此结论是否正确。

当ALU_operation(2:0) = 010时,最高位信号线ALU_operation[2] = 0,则信号扩展器的输入端s=0,则So(31:0)=0000…000。

此情况下,操作数B 与So(31:0)进行xor 异或,得到的值为B 本身。

此外,由于s=0,则ADC 进位值C 0为0。

因此,ADC 输出值为(如下图所示):
S = A+B+C 0 = A+ B+0 = A + B.
可看出,此时执行的是A+B 操作,验证无误。

问题:在前面我们提到,图中and32代表逻辑“与”操作器件、or32代表逻辑“或”操作器件、ADC代表带进位加法器件,图中这些器件的功能是如何
确定的?是由其名字来确定的,还是由其外观图的形状来确定的?
如何思考这个问题,下面演示一种思维方式。

分析1)是否是由其名字来确定的?
分析:这种可性能不大。

原因分析如下:
a)如果用名字and32、or32等来表示其逻辑功能,则每个逻辑功能对应的命名需要有非常严格标准的规范。

给这些器件命令时,需严格按照这些规范来命名,稍有偏差,器件的逻辑功能便无法发挥作用。

目前还没发现存在这种命名规范,且用命名来定义逻辑功能不方便,用户需要大量记忆,实用性不强。

b)有些复杂一点的逻辑功能难以通过命名来表述,例如,某器件的功能是执行:(((A&B)|C)^B)+D,其逻辑功能无法通过一个简单的名字来描述。

分析2)是否由其外观图形状来确定?
分析:可能性不大,原因分析如下:
a)道理同上,复杂一点的逻辑功能难以通过外观图来表述,例如,某器件的功能是执行:(((A&B)|C)^B)+D,其逻辑功能无法通过画一个外观图来描述。

b)可尝试修改一下图中and32器件的外观图,例如将一条直线拉成斜线,再重新综合与实现。

如果修改外观图后,整个系统的功能没有发生改变,则说明逻辑功能与外观图没有直接联系。

c)在第一个实验中曾讲解过,外观图是通过装载sym符号表并将符号表拖出来形成的。

而且符号表对应于C语言中的函数名,其并没有实现C语言函数的函数体。

由此可知,外观图不能决定器件的逻辑功能。

竟然器件逻辑功能不是由器件名字决定,也不是由器件的符号表外观图决定,那究竟是由什么决定的?
回答:在实验一中讲解过,.sym文件对应于C语言函数名,.v文件对应于函数体及函数申明,ngc文件对应于函数库。

因此可知,器件逻辑功能要么由.v文件直接实现。

如果.v文件未空,则也可装载.ngc库文件,由.ngc文件来实现。

因此,查看文件and32.v中内容,发现其中内容如下:
module and32( input [31:0] A, // 定义输入接口A
input [31:0] B, // 定义输入接口B
output [31:0] res // 定义输出接口res
);
assign res = A&B; // 函数体实现,输出res为A与B逻辑与实现。

Endmodule
也就是说,ALU中and32器件的逻辑功能是由其verilog编程来实现的。

相关文档
最新文档