加减运算电路实验
实验原理
加减运算
加法运算是最基本的算术运算,其运算速度对计算机的运行速度有着重要影响。4位的加法器可以用4个全加器级联构成,由于存在进位链的传递延时,运算速度随着精度的提高(位数增加)而降低。所以实际的并行加法器并不会采用全加器级联的方法,而是采用先行进位加法器。在硬件描述语言中,可以直接用“+”号描述并行加法器,综合工具会自动使用库中的先行进位加法器,无需设计者描述先行进位的实现细节。
计算机中的带符号整数通常采用补码表示,因为补码可以连同符号位一起参加运算,这样就可以用二进制加法器完成补码加法运算,并且补码的减法也可以转换为加法,只需要在加法器的基础上增加求补电路就可以实现减法,无需为减法设计专门的电路。
图 1是一种基本的加减运算电路,用M控制异或门实现求补运算,当M=0时做加法运算,M=1时做减法运算。该电路还产生S、Z、O、C四个运算结果的特征标志位,通常用于数值大小的比较判断。
比较运算
在计算机软件程序设计中,常常需要比较两个变量的数值大小。实现两个数大小比较的最直接的做法就是将这两个数相减,根据减法的结果判断两者的大小。例如,若X<Y,则X-Y的结果一定为负,因此依据符号标志就可以判断;但是若运算结果溢出,则恰恰相反。表 1给出了两个带符号数依据减法运算结果的标志位比较大小的判断条件。而两个无符号数的相减,则可依据是否有借位来判断两个数的大小。表 2给出了无符号数比较大小的判断条件。
大小关系 | 判定条件 |
---|---|
X>Y |
OF⊕SF=0 且ZF=0 |
X≥Y |
OF⊕SF =0 |
X=Y |
ZF=1 |
X≠Y |
ZF=0 |
X<Y |
OF⊕SF =1 |
X≤Y |
OF⊕SF =1 或ZF=1 |
大小关系 | 判定条件 |
---|---|
X>Y |
CF=0 且ZF=0 |
X≥Y |
CF=0 |
X=Y |
ZF=1 |
X≠Y |
ZF=0 |
X<Y |
CF=1 |
X≤Y |
CF=1 或ZF=1 |
参考设计
logic [3:0] A, B, F; logic C0, C4; logic sign, zero, overflow, carryOut; assign A = X; assign B = Y ^ {4{M}}; assign C0 = M; assign {C4,F} = A + B + C0; assign sign = F[3]; assign zero = ~|F; (1) assign overflow = ~A[3] & ~B[3] & F[3] | A[3] & B[3] & ~F[3]; (2) assign carryOut = (M==1'b0) ? C4 : ~C4; (3)
实验任务
1. 理解参考设计
阅读理解例 1代码,通过实验验证电路功能,并完成以下练习。
(1)该电路是否既可以进行无符号数的加减运算,也可以进行带符号数的加减运算?通过实验数据举例说明。
(2)例 1中标记①的语句是零标志的生成代码,说明 |F
实现的逻辑函数。
(3)标记②的语句是溢出标志的生成代码,使用的是加法器的输入A和B的符号位,既可以用于X+Y也可以用于X-Y。如果使用原始输入X和Y的符号位,减法运算时溢出标志位的逻辑表达式是什么?用HDL描述并在后面的任务2中验证。
(4)标记③的语句是进位标志的生成代码,M=0和M=1分别对应减法运算和减法运算,说明减法运算时借位与进位标志的关系。
2. 设计任务:加减和比较运算电路
按照图 2原理设计加减和比较运算电路,具体要求如下。
(1)图 2的B输入端电路包含与或门构成的二选一多路器,请参照“三态门与多路器实验”中学习的与或门多路器的描述方法。 该电路的特点是可以通过M0和M1的控制在B输入端产生“全0”和“全1”数据(与Y输入数据无关),用于一些特殊的功能,例如将X输入端的数据传送到F输出端。
图 2电路的特点是可以通过M0和M1的控制在B输入端产生“全0”和“全1”数据(与Y输入数据无关),用于实现一些特殊的运算功能,例如,当M0=0、M1=0、M2=0时,B=0、C0=0,F=A+B+C0=A=X,实现的运算是F=X,即将输入X传送到F输出。 |
M2 | M1 | M0 | 运算 | 功能描述 |
---|---|---|---|---|
0 |
0 |
0 |
F=X |
传送X(MOVX) |
0 |
0 |
1 |
||
0 |
1 |
1 |
||
1 |
0 |
0 |
||
1 |
1 |
0 |
(4)在实验系统上验证表 3列出的运算。
(5)在实验系统上验证比较运算。
验证比较运算时M0~M2须设置为减法运算。 |