算术逻辑单元实验

实验目的

  1. 理解算术逻辑单元电路结构。

  2. 理解零标志和符号标志的含义。

  3. 学会使用Digital仿真软件的层次化设计方法。

  4. 进一步熟悉Digital仿真软件的电路测试。

实验原理

计算机除了能够进行加减运算,还要能够进行逻辑运算。实现加减运算和逻辑运算的电路称为算术逻辑单元(ALU,Arithmetic Logic Unit)。图 1是一个简单ALU的设计,虚线框内是前面实验完成的加减运算电路,只是简化了画法,将4位数据用一根较粗的信号线表示;增加了与(AND)、或(OR)、异或(XOR)逻辑运算,并通过一个四选一多路器选择运算的功能。

op alu 1
图 1. 简单ALU原理图

该ALU电路没有用非门实现逻辑非(NOT)运算,这是因为异或1可以实现取反。通过使Y各位全为1,选择异或运算可以实现对X的非运算。

图 1电路还产生S、Z、O、C四个运算结果的特征标志,通常用于数值大小的比较判断,在后面的实验中将会用到。这四个标志的含义如下。

  • SF(Sign Flag):符号标志。

    SF=1表示结果为负数,SF=0表示结果为正数。

  • ZF(Zero Flag):零标志。

    ZF=1表示结果为零,ZF=0表示结果非零。

  • OF(Overflow Flag):溢出标志。

    OF=1表示结果溢出,OF=0表示结果不溢出;。

  • CF(Carry Flag):进位标志。

    CF=1表示有进位,CF=0表示没有进位。

OF和CF由加法器产生,在前面的实验中已经完成。这个实验还需要完成符号标志和零标志的检测电路。 因为运算结果的最高位就是符号位,所以符号标志的生成逻辑非常简单,逻辑方程如下:

SF=FS

一种简单的零标志生成方法是,将运算结果的每一位进行或运算,如果结果为0,则零标志为1。以4位二进制为例,产生零标志的逻辑方程如下:

ZF
进位标志和溢出标志必须由加法电路产生,而零标志和符号标志通常根据ALU的运算结果产生。如果逻辑运算的结果为零,零标志也会为1。

预习要求

  1. 理解实验原理。

  2. 阅读第一章Digital仿真软件使用指南的“层次化设计”。

实验任务

1.设计任务

理解实验原理,按照图 1设计电路。其中加减运算电路使用前面实验完成的,将其作为子电路。 有关添加子电路的方法,请参考第一章Digital仿真软件使用指南的“层次化设计”。 MUX多路器组件曾在多路选择器实验中使用过,这里要将选择位的位数设置为2,以构成4选1多路器。

  1. 添加子电路前,先保存当前电路文件,并且保证子电路文件在同一文件夹或子文件夹内。

  2. 子电路应事先调试通过,起码没有连接错误。

2.测试任务

  1. 编写测试数据。

    测试数据应覆盖ALU的各项运算功能。算术运算可参考加减运算电路实验的验证任务,包括标志位的测试。逻辑运算除了测试与、或、异或运算外,也要测试逻辑非运算。测试数据样式见例 1

    例 1. ALU测试数据举例
    X	    Y	    M	S1	S0	F	    S	Z	O	C
    0b0011	0b0101	0	0	0	0b1000	1	0	1	0
  2. 执行测试。

    保存测试结果数据用于实验报告的实验结果分析。

    测试的目的是检查逻辑设计错误而非连接错误。若要检查电路连接是否有误,可在执行测试前先启动仿真;若启动仿真出错,可根据报错信息改正连接错误。
  3. 实验结果分析

    对测试结果数据进行分析并给出结论。

    算术运算可参考加减运算电路实验的验证任务要求和记录表样式。