基于与非门和D触发器的32位加法器的FPGA设计.docx

上传人:b****4 文档编号:11600011 上传时间:2023-03-20 格式:DOCX 页数:15 大小:1.99MB
下载 相关 举报
基于与非门和D触发器的32位加法器的FPGA设计.docx_第1页
第1页 / 共15页
基于与非门和D触发器的32位加法器的FPGA设计.docx_第2页
第2页 / 共15页
基于与非门和D触发器的32位加法器的FPGA设计.docx_第3页
第3页 / 共15页
基于与非门和D触发器的32位加法器的FPGA设计.docx_第4页
第4页 / 共15页
基于与非门和D触发器的32位加法器的FPGA设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于与非门和D触发器的32位加法器的FPGA设计.docx

《基于与非门和D触发器的32位加法器的FPGA设计.docx》由会员分享,可在线阅读,更多相关《基于与非门和D触发器的32位加法器的FPGA设计.docx(15页珍藏版)》请在冰豆网上搜索。

基于与非门和D触发器的32位加法器的FPGA设计.docx

基于与非门和D触发器的32位加法器的FPGA设计

基于与非门和D触发器的32位加法器

 

【摘要】这次的课程设计的任务是设计一个输入范围为-(230-1)~(230-1)的加法器。

利用拨码开关输入二进制补码,再将二进制补码转化为串行信号,经过一位全加器后得到计算结果,再将计算结果转化为并行信号输出,并利用LED灯显示计算结果的二进制补码。

本次设计通过开关的闭合和断开来代表电平的高低,继而代表代表1和0来输入所要计算的十进制数的补码。

将并行输入转化为串行输出的模块和将串行输入转化为并行输出的模块是由与非门和D触发器构成的移位寄存器。

但是,这样并不能保证输出的稳定,所以我们在串入并出的移位寄存器的每个输出后面各加了一个D触发器,只有当32位补码全部并出时,D触发器才会触发,将结果显示,其余时候D触发器将保持上一个输出结果。

这样就能确保计算结果的稳定显示。

而控制并入串出信号的加载和最后结果稳定显示的控制电路是由与非门和D触发器构成的模32计数器,每次计32个时钟上升沿时便会产生一个上升沿。

用来控制移位寄存器移位动作和计数器的时钟信号,是由NE555电路产生的1KHz的脉冲信号。

【关键词】32位加法器:

移位寄存器;计数器;NE555

 

一、设计目的与要求

1、设计目的

1)掌握计数器、移位寄存器的电路设计与工作原理。

2)学会分析各模块之间的时延关系,并调节各个模块之间的时延关系。

3)掌握信号并入串出和串入并出的工作原理。

4)了解时钟信号的产生。

2、设计要求

设计一个输入范围为-(230-1)~(230-1)的加法器。

具体要求如下:

1)只能使用与非门和D触发器。

2)用两组拨码开关分别输入两个加数的二进制补码。

3)用二极管稳定显示计算结果的二进制补码。

4)利用Multisim设计仿真。

二、设计思路

我们将加法器可以分为3级:

第一级是并入串出模块;第二级是加法运算模块(一位全加器);第三级是串入并出模块。

第一级模块负责将拨码快关的并行输入转化为串行输出,作为第二级输入,输入到第二级加法运算模块,得到一个串行输出的计算结果,将该结果作为第三级输入,再由第三级模块转化为并行输出,最后由LED显示。

并且,三个模块由同一个时钟信号(1KHz脉冲信号)进行控制。

32进制计数器用来控制并入串出模块并行信号的加载和串入并出模块并行信号的稳定输出,具体就是当计数器计满32个时钟周期时,并入串出模块加载信号,同时串入并出模块输出信号。

根据思路,我们设计了模块电路,如图2-1所示

图2-1加法器整体架构

虽然题目要求的输入范围为-(230-1)~(230-1),只需输入31位二进制位即可,但是考虑到最后的计算结果可能会出现32位二进制位(产生进位),为了对进位处理方便,同时也为了加载并行信号和输出并行信号的同步,我们也将输入扩展为32位,其中第31位和第32位同时为00或11,可以用一个拨码开关同时控制。

三、单元模块的设计

1、脉冲发生器设计

一开始我们想使用晶振电路来产生时钟脉冲,但是经过仿真之后发现晶振电路产生的脉冲频率过高,无法产生我们所需的1KHz的脉冲信号。

经过查找资料,我们决定使用LM555CN来产生1KHZ的脉冲信号。

仿真电路如图3-1所示。

图3-1脉冲发生器电路

该电路产生的时钟周期与R65、C1有关,时钟周期的计算公式为:

占空比为50%。

我们选用760Ω的电阻和1uF的电容,产生约1KHz的时钟信号。

电路稳定之后产生的波形图如图3-2所示。

图3-2时钟信号波形图

从图3-2的波形图中可以看出,产生的时钟信号的周期约为1ms,满足我们的要求。

所以我们最后采用了这种时钟信号发生电路。

2、32进制计数器设计

我们希望能够产生一个控制信号使输出部分的锁存器恰好能把移位寄存器的数据存起来,由此我们需要一个计数器,让它在计数第32次产生这个信号。

因为是同步电路,所以计数器也需要用同步计数器,我们采用的是带串行使能逻辑的同步五位二进制计数器。

电路参考教材逻辑图,如图3-3所示。

图3-3带有串行使能逻辑的同步4位二进制计数器

而T触发器可以由D触发器和异或门构成,如图3—4所示。

图3-4由D触发器实现T触发器逻辑图

异或门由式子A⊕B=A’B*AB’=[(A’B)’*(AB’)’]’决定。

总的电路图如图3-5所示:

图3-5带串行功能的同步5位二进制计数器

而要实现32进制计数器,只需把五位输出与起来,当五个D触发器输出为11111时,计数器才会输出1,即可得到需要的控制信号。

一开始我们采用的如图图3-6所示电路,

图3-6计数器输出部分电路

按这种结构,第五位D触发器的输出所经过的与非门个数少,用示波器测试,出现了静态冒险,如图3-7中所示。

该冒险会使得控制信号不准确,需要消除。

图3-7计数器中的静态冒险

为此我们在第五个信号的路径上加上了四个与非门后(因为前面四个信号在最后与起来时也只经过了四个与非门),冒险消失了,电路图和仿真波形图如图3-8、3-9所示。

图3-8

图3-9

但是我们希望得到的是当计满32时输出高电平,但该波形图显示的是低电平,回查电路,发现最后少加一个反相器,所以我们就在电路最后加入一个与非门,来实现所需目的。

具体电路和波形图如图3-10和图3-11所示

图3-10图3-11

3、并入串出模块设计

并入串出机构我们参考教材,如图3-12所示。

图3-12并入串出移位寄存器的结构

根据图3-12,我们用Multisim搭建了并入串出模块的仿真电路。

局部电路如图3-13所示。

图3-13并入串出移位寄存器局部(8位)

从图3-11可以看出,当第32个时钟上升沿到来时,计数器的上升沿也到来,并且维持高电平一个时钟周期,等到下一个时钟上升沿到来时,计数器才变为低电平。

所以,当计数器上升沿来时,时钟信号的上升沿也到来,将第32位二进制位输出。

之后计数器信号为高电平,将拨码开关的信号传输到对应D触发器的输入端。

待下一个时钟信号来时,再将D触发器的输入端信号传输到对应D触发器输出端,之后每次时钟上升沿到来时,便产生一次移位,知道移位31次之后在加载信号,依次循环。

当开关输入并行信号为10000000100000001000000010000000时,波形图如图3-14所示。

图3-14并行信号10000000100000001000000010000000对应的串行信号波形

从图中可以看出,时序与我们分析的相同,满足我们的要求,可以使用。

4、运算模块设计

运算模块我们使用移位全加器电路来时先,与普通的一位全加器不同之处在于,进位输出接了一个D触发器。

电路如图3-15所示。

图3-15运算模块电路

当两个加数时钟上升沿来时,一位X、Y输入,同时进位输出端的D触发器也打开,将上一位的进位信号输入到第二个半加器中进行计算,得到本位进位输出和本位和输出。

其中本位进位输出传输到D触发器U265A的输入端,等待下一个时钟上升沿的到来,本位和输出传输到串入并出模块的输入端,等待下一一个时钟上升沿的到来。

但是从电路我们可以很明显的看到,上一位的进位输出要比X、Y更快来到第二级半加器,存在冒险。

为检测是否存在冒险,我们令输入X=1,Y=3,借助示波器查看输出波形,波形如图3-16所示:

图3-16运算模块波形图

从图3-16不难看出每当有进位输入是,就会产生冒险。

但是,因为时钟周期为1ms,远远大于冒险存在的时长,所以当下一个时钟上升沿到来时,运算模块已经将正确结果稳定地传输到串入并出模块的输入端,并不会影响输出结果。

因此,我们在本次设计中,忽略此冒险,认为该模块电路可用。

5、串入并出模块设计

并入串出结构我们采用D触发器级联的方式,将上一级输出当做下一级的输入。

这样的输出结果会随时钟信号的到来而不停地移位,但是我们希望该模块能够稳定输出正确结果,移位过程中,一直保持上一次计算的结果。

因此,我们在每个D触发器的输出端再接一个D触发器,与前面时钟信号控制D触发器不同,这些D触发器由计数器的信号控制,当计数器上升沿来时,将D触发器打开,输出当前结果,其余时候D触发器关闭,保持上一个状态的输出。

具体电路如图3-17所示。

图3-17串入并出模块电路

分析该电路,我们发现,当并入串出模块输出Xi、Yi时,在下一个时钟上升沿到来时,计算结果Si已经传输到串入并出模块的输入端。

当下一个时钟上升沿到来时,并入串出模块输出Xi+1、Yi+1,此时Si才串入并出模块的第一个。

以此类推,当并入串出模块输出X31、Y31时,计数器信号到来,并入串出模块加载信号,串入并出模块只有S0~S31的输出,少输出一位。

这与我们所希望的加载信号与输出结果同时进行不符,所以我们要让控制串入并出的计数器信号延迟一个时钟周期,于是我们在该模块的计数器信号输入端接了一个反相器,使得上升沿延迟一个时钟周期,从而实现我们的预期效果,结果仿真,确实能实现结算结果的稳定输出,如图3-18所示。

四、总电路的设计

X97

总电路如图4-1所示。

该电路与图2-1所示的加法器整体架构的各模块的位置均相同。

其中X97指示灯用来显示计数器是否计满32,当计满32时,指示灯点亮。

这就意味着并入串出模块开始加载并行信号,同时串入并出模块也将计算结果稳定输出。

因为时钟周期远大于运算模块的传播延时,所以不需要担心新旧两个信号会产生干扰的问题。

强调一点,输入与输出由上至下为二进制数最高位到最低位。

五、设计总结

本次设计中,我们可以实现本次课程设计的要求。

在设计过程中,加深了对时序电路的分析与理解。

但是这个课程设计也存在一些不足。

我们采用的是1KHz的低频时钟信号,远远大于各个器件、模块的延时,因此这个电路对时序的要求不太严格。

所以对于在运算模块的冒险我们没有进行处理,但是,一旦频率提高之后,冒险很有可能会被当做一位运算结果输出,使得运算逻辑发生错误。

同时若频率过高,可能会出现计算结果还未输出,输入就已经到来的情况,这样也会使得计算结果出现错误。

同时,1KHz脉冲发生器模块的在开始的一段时间无法正常起振,得等一段时间才能正常工作,到目前为止,我们还无法分析出原因。

本次实验我们本来打算用数码管显示结果对应的十六进制数,译码模块也设计好了,但是因为电脑性能的原因,无法加载到电路中,是个遗憾。

以后对电路进行改进时,可以考虑将各模块进行化简,从而减少元件的数量。

这样或许能将译码模块加到电路中。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1