1、基于与非门和 D 触发器的 32 位加法器组员:杨吕鹏张光银邓文俊指导老师:周鹰【摘要】这次的课程设计的任务是设计一个输入范围为-(2 30-1)(2 30-1)的加法器。利用拨码开关输入二进制补码,再将二进制补码转化为串行信号,经过一位全加器后得到计算结果,再将计算结果转化为并行信号输出,并利用LED 灯显示计算结果的二进制补码。本次设计通过开关的闭合和断开来代表电平的高低,继而代表代表 1 和 0来输入所要计算的十进制数的补码。将并行输入转化为串行输出的模块和将串行输入转化为并行输出的模块是由与非门和 D 触发器构成的移位寄存器。但是,这样并不能保证输出的稳定,所以我们在串入并出的移位寄存
2、器的每个输出后面各加了一个 D 触发器,只有当 32 位补码全部并出时,D 触发器才会触发,将结果显示,其余时候 D 触发器将保持上一个输出结果。这样就能确保计算结果的稳定显示。而控制并入串出信号的加载和最后结果稳定显示的控制电路是由与非门和 D 触发器构成的模 32 计数器,每次计 32 个时钟上升沿时便会产生一个上升沿。用来控制移位寄存器移位动作和计数器的时钟信号,是由 NE555 电路产生的 1KHz 的脉冲信号。【关键词】32 位加法器:移位寄存器;计数器;NE555一、设计目的与要求1、设计目的1)掌握计数器、移位寄存器的电路设计与工作原理。2)学会分析各模块之间的时延关系,并调节各
3、个模块之间的时延关系。3)掌握信号并入串出和串入并出的工作原理。4)了解时钟信号的产生。2、设计要求设计一个输入范围为-(2 30-1)(2 30-1)的加法器。具体要求如下:1)只能使用与非门和 D 触发器。2)用两组拨码开关分别输入两个加数的二进制补码。3)用二极管稳定显示计算结果的二进制补码。4)利用 Multisim 设计仿真。二、设计思路我们将加法器可以分为 3 级:第一级是并入串出模块;第二级是加法运算模块(一位全加器) ;第三级是串入并出模块。第一级模块负责将拨码快关的并行输入转化为串行输出,作为第二级输入,输入到第二级加法运算模块,得到一个串行输出的计算结果,将该结果作为第三级
4、输入,再由第三级模块转化为并行输出,最后由 LED 显示。并且,三个模块由同一个时钟信号(1KHz 脉冲信号)进行控制。32 进制计数器用来控制并入串出模块并行信号的加载和串入并出模块并行信号的稳定输出,具体就是当计数器计满 32 个时钟周期时,并入串出模块加载信号,同时串入并出模块输出信号。根据思路,我们设计了模块电路,如图 2-1 所示图 2-1 加法器整体架构虽然题目要求的输入范围为-(2 30-1)(2 30-1) ,只需输入 31 位二进制位即可,但是考虑到最后的计算结果可能会出现 32 位二进制位(产生进位) ,为了对进位处理方便,同时也为了加载并行信号和输出并行信号的同步,我们也
5、将输入扩展为 32 位,其中第 31 位和第 32 位同时为 00 或 11,可以用一个拨码开关同时控制。三、单元模块的设计1、脉冲发生器设计一开始我们想使用晶振电路来产生时钟脉冲,但是经过仿真之后发现晶振电路产生的脉冲频率过高,无法产生我们所需的 1KHz 的脉冲信号。经过查找资料,我们决定使用 LM555CN 来产生 1KHZ 的脉冲信号。仿真电路如图 3-1 所示。图 3-1 脉冲发生器电路该电路产生的时钟周期与 R65、C1 有关,时钟周期的计算公式为:T=20.693占空比为 50%。我们选用 760 的电阻和 1uF 的电容,产生约 1KHz 的时钟信号。电路稳定之后产生的波形图如
6、图 3-2 所示。图 3-2 时钟信号波形图从图 3-2 的波形图中可以看出,产生的时钟信号的周期约为 1ms,满足我们的要求。所以我们最后采用了这种时钟信号发生电路。2、32 进制计数器设计我们希望能够产生一个控制信号使输出部分的锁存器恰好能把移位寄存器的数据存起来,由此我们需要一个计数器,让它在计数第 32 次产生这个信号。因为是同步电路,所以计数器也需要用同步计数器,我们采用的是带串行使能逻辑的同步五位二进制计数器。电路参考教材逻辑图,如图 3-3 所示。图 3-3 带有串行使能逻辑的同步 4 位二进制计数器而 T 触发器可以由 D 触发器和异或门构成,如图 34 所示。图 3-4 由
7、D 触发器实现 T 触发器逻辑图异或门由式子 ABAB*AB=(AB)*(AB)决定。总的电路图如图 3-5 所示:图 3-5 带串行功能的同步 5 位二进制计数器而要实现 32 进制计数器,只需把五位输出与起来,当五个 D 触发器输出为11111 时,计数器才会输出 1,即可得到需要的控制信号。一开始我们采用的如图图 3-6 所示电路,图 3-6 计数器输出部分电路按这种结构,第五位 D 触发器的输出所经过的与非门个数少,用示波器测试,出现了静态冒险,如图 3-7 中所示。该冒险会使得控制信号不准确,需要消除。图 3-7 计数器中的静态冒险为此我们在第五个信号的路径上加上了四个与非门后(因为
8、前面四个信号在最后与起来时也只经过了四个与非门) ,冒险消失了,电路图和仿真波形图如图 3-8、 3-9 所示。图 3-8图 3-9但是我们希望得到的是当计满 32 时输出高电平,但该波形图显示的是低电平,回查电路,发现最后少加一个反相器,所以我们就在电路最后加入一个与非门,来实现所需目的。具体电路和波形图如图 3-10 和图 3-11 所示图 3-10 图 3-113、并入串出模块设计并入串出机构我们参考教材,如图 3-12 所示。图 3-12 并入串出移位寄存器的结构根据图 3-12,我们用 Multisim 搭建了并入串出模块的仿真电路。局部电路如图3-13 所示。图 3-13 并入串出
9、移位寄存器局部(8 位)从图 3-11 可以看出,当第 32 个时钟上升沿到来时,计数器的上升沿也到来,并且维持高电平一个时钟周期,等到下一个时钟上升沿到来时,计数器才变为低电平。所以,当计数器上升沿来时,时钟信号的上升沿也到来,将第 32 位二进制位输出。之后计数器信号为高电平,将拨码开关的信号传输到对应 D 触发器的输入端。待下一个时钟信号来时,再将 D 触发器的输入端信号传输到对应D 触发器输出端,之后每次时钟上升沿到来时,便产生一次移位,知道移位 31次之后在加载信号,依次循环。当开关输入并行信号为10000000100000001000000010000000 时,波形图如图 3-1
10、4 所示。图 3-14 并行信号 10000000100000001000000010000000 对应的串行信号波形从图中可以看出,时序与我们分析的相同,满足我们的要求,可以使用。4、运算模块设计运算模块我们使用移位全加器电路来时先,与普通的一位全加器不同之处在于,进位输出接了一个 D 触发器。电路如图 3-15 所示。图 3-15 运算模块电路当两个加数时钟上升沿来时,一位 X、Y 输入,同时进位输出端的 D 触发器也打开,将上一位的进位信号输入到第二个半加器中进行计算,得到本位进位输出和本位和输出。其中本位进位输出传输到 D 触发器 U265A 的输入端,等待下一个时钟上升沿的到来,本位
11、和输出传输到串入并出模块的输入端,等待下一一个时钟上升沿的到来。但是从电路我们可以很明显的看到,上一位的进位输出要比 X、Y 更快来到第二级半加器,存在冒险。为检测是否存在冒险,我们令输入 X=1,Y=3 ,借助示波器查看输出波形,波形如图 3-16 所示:图 3-16 运算模块波形图从图 3-16 不难看出每当有进位输入是,就会产生冒险。但是,因为时钟周期为1ms,远远大于冒险存在的时长,所以当下一个时钟上升沿到来时,运算模块已经将正确结果稳定地传输到串入并出模块的输入端,并不会影响输出结果。因此,我们在本次设计中,忽略此冒险,认为该模块电路可用。5、串入并出模块设计并入串出结构我们采用 D
12、 触发器级联的方式,将上一级输出当做下一级的输入。这样的输出结果会随时钟信号的到来而不停地移位,但是我们希望该模块能够稳定输出正确结果,移位过程中,一直保持上一次计算的结果。因此,我们在每个 D 触发器的输出端再接一个 D 触发器,与前面时钟信号控制 D 触发器不同,这些 D 触发器由计数器的信号控制,当计数器上升沿来时,将 D 触发器打开,输出当前结果,其余时候 D 触发器关闭,保持上一个状态的输出。具体电路如图 3-17 所示。图 3-17 串入并出模块电路分析该电路,我们发现,当并入串出模块输出 Xi、Y i 时,在下一个时钟上升沿到来时,计算结果 Si 已经传输到串入并出模块的输入端。
13、当下一个时钟上升沿到来时,并入串出模块输出 Xi+1、Y i+1,此时 Si 才串入并出模块的第一个。以此类推,当并入串出模块输出 X31、Y 31 时,计数器信号到来,并入串出模块加载信号,串入并出模块只有 S0S31 的输出,少输出一位。这与我们所希望的加载信号与输出结果同时进行不符,所以我们要让控制串入并出的计数器信号延迟一个时钟周期,于是我们在该模块的计数器信号输入端接了一个反相器,使得上升沿延迟一个时钟周期,从而实现我们的预期效果,结果仿真,确实能实现结算结果的稳定输出,如图 3-18 所示。四、总电路的设计总电路如图 4-1 所示。该电路与图 2-1 所示的加法器整体架构的各模块的
14、位置均相同。其中 X97 指示灯用来显示计数器是否计满 32,当计满 32 时,指示灯点亮。这就意味着并入串出模块开始加载并行信号,同时串入并出模块也将计算结果稳定输出。因为时钟周期远大于运算模块的传播延时,所以不需要担心新旧两个信号会产生干扰的问题。强调一点,输入与输出由上至下为二进制数最高位到最低位。五、设计总结本次设计中,我们可以实现本次课程设计的要求。在设计过程中,加深了对时序电路的分析与理解。但是这个课程设计也存在一些不足。我们采用的是 1KHz 的低频时钟信号,远远大于各个器件、模块的延时,因此这个电路对时序的要求不太严格。所以对于在运算模块的冒险我们没有进行处理,但是,一旦频率提高之后,冒险很X97有可能会被当做一位运算结果输出,使得运算逻辑发生错误。同时若频率过高,可能会出现计算结果还未输出,输入就已经到来的情况,这样也会使得计算结果出现错误。同时,1KHz 脉冲发生器模块的在开始的一段时间无法正常起振,得等一段时间才能正常工作,到目前为止,我们还无法分析出原因。本次实验我们本来打算用数码管显示结果对应的十六进制数,译码模块也设计好了,但是因为电脑性能的原因,无法加载到电路中,是个遗憾。以后对电路进行改进时,可以考虑将各模块进行化简,从而减少元件的数量。这样或许能将译码模块加到电路中。