实验BCD码加法器Word文件下载.docx

上传人:b****3 文档编号:15145381 上传时间:2022-10-28 格式:DOCX 页数:15 大小:530.90KB
下载 相关 举报
实验BCD码加法器Word文件下载.docx_第1页
第1页 / 共15页
实验BCD码加法器Word文件下载.docx_第2页
第2页 / 共15页
实验BCD码加法器Word文件下载.docx_第3页
第3页 / 共15页
实验BCD码加法器Word文件下载.docx_第4页
第4页 / 共15页
实验BCD码加法器Word文件下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

实验BCD码加法器Word文件下载.docx

《实验BCD码加法器Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验BCD码加法器Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。

实验BCD码加法器Word文件下载.docx

①组合逻辑电路的定义

通常组合逻辑电路可以用图1.1所示结构来描述。

其中,X0、X1、…、Xn为输入信号,L0、L1、…、Lm为输出信号。

输入和输出之间的逻辑函数关系可用式1.1表示:

②组合逻辑电路的设计方法

组合逻辑电路的设计任务是根据给定的逻辑功能,求出可实现该逻辑功能的最合理组合电路。

理解组合逻辑电路的设计概念应该分两个层次:

(1)设计的电路在功能上是完整的,能够满足所有设计要求;

(2)考虑到成本和设计复杂度,设计的电路应该是最简单的,设计最优化是设计人员必须努力达到的目标。

在设计组合逻辑电路时,首先需要对实际问题进行逻辑抽象,列出真值表,建立起逻辑模型;

然后利用代数法或卡诺图法简化逻辑函数,找到最简或最合理的函数表达式;

根据简化的逻辑函数画出逻辑图,并验证电路的功能完整性。

设计过程中还应该考虑到一些实际的工程问题,如被选门电路的驱动能力、扇出系数是否足够,信号传递延时是否合乎要求等。

组合电路的基本设计步骤可用图1.2来表示。

③组合逻辑电路的特点及设计时的注意事项

a)组合逻辑电路的输出具有立即性,即输入发生变化时,输出立即变化。

(实际电路中还要考虑器件和导线产生的延时)。

b)组合逻辑电路设计时应尽量避免直接或间接的反馈,以免出现不确定的状态或形成振荡。

如右图设计的基本触发器,当输入~S、~R从“00”变为“11”时,无法确定Q和~Q的值。

c)组合逻辑电路容易出现“毛刺”,这是由于电路“竞争-冒险”产生的。

如图1.3所示,图中与门的两个输入分别由信号A经过不同路径传递而来。

按照理想情况分析,电路输出端应该始终为L=A·

~A=0。

考虑到信号在逻辑门中的传输延迟,~A到达与门输入端的时间始终落后于A。

图3.2-1(b)的波形显示,信号A的四次变化都产生了竞争。

但这四次竞争引起的结果是不一样的。

第一次和第三次竞争造成输出错误,第二次和第四次竞争则没有造成输出错误。

换言之,只有第一次和第三次竞争引起了冒险,产生了尖峰干扰。

图2.3竞争-冒险实例

由于“毛刺”的影响,应避免使用组合逻辑电路直接产生时钟信号,也应避免将组合逻辑电路的输出作为另一个电路的异步控制信号。

d)用VHDL描述组合逻辑电路时,所有的输入信号都应放在敏感信号表中。

e)用IF语句和CASE语句描述电路分支时,一定要列举出所有输入状态(一般在最后加上“else”或“whenothers”分支),否则在综合时将引入LATCH,使电路输出出现延时。

2、时序逻辑电路

①时序逻辑电路的定义

②同步时序逻辑电路的设计方法

同步时序逻辑电路的设计是分析的逆过程,其任务是根据实际逻辑问题的要求,设计出能实现给定逻辑功能的电路。

同步时序电路的设计过程:

 

(1)根据给定的逻辑功能建立原始状态图和原始状态表。

a)明确电路的输入条件和相应的输出要求,分别确定输入变量和输出变量的数目和符号;

b)找出所有可能的状态和状态转换之间的关系;

c)根据原始状态图建立原始状态表;

(2)状态化简---求出最简状态图。

合并等价状态,消去多余状态的过程称为状态化简。

等价状态:

在相同的输入下有相同的输出,并转换到同一个次态去的两个状态称为等价状态。

(3)状态编码(状态分配)。

给每个状态赋以二进制代码的过程。

根据状态数确定触发器的个数,(M为状态数;

n为触发器的个数)。

(4)选择触发器的类型。

(5)求出电路的激励方程和输出方程。

(6)画出逻辑图并检查自启动能力。

③时序逻辑电路的特点及设计时的注意事项

a)时序逻辑电路与组合逻辑电路相比,输出会延时一个时钟周期。

b)时序逻辑电路一般容易消除“毛刺”。

c)用VHDL描述时序逻辑电路时,一般只需将时钟信号和异步控制(如异步复位)信号作为敏感信号。

d)用IF语句描述时序逻辑电路时,异步控制逻辑应写在前面的分支中,最后一个ELSIF分支作为时钟边沿检测,后面不允许再有ELSE语句。

e)不能同时使用时钟的上升沿和下降沿。

3、VHDL语言简介

①VHDL设计文件的基本结构

②一些约定

◆实体、信号、文件等的命名

◆注释的使用

◆书写代码时使用层次缩进格式

◆一个文件中只定义一个实体,实体名与文件名一致

◆尽量不使用“变量”,而使用“信号”

◆不使用硬件无法实现的一些语句,如断言语句、等待语句等

③使用原理图工具栏的“blocktool”生成设计文件的框架

④使用“Edit”菜单中的“InsertTemplate……”插入设计模版

四、实验内容:

1、设计一个BCD码加法器。

BCD码是二进制编码的十进制码,也就是用4位二进制数来表示十进制中的0~9这十个数。

由于4位二进制数有0000~1111共16种组合,而十进制数只需对应4位二进制数的10种组合,故从4位二进制数的16种组合中取出10种组合来分别表示十进制中的0~9,则有许多不同的取舍方式,于是便形成了不同类型的BCD码。

本实验我们只针对最简单的情况,也是最常见的BCD码,就是用4位二进制的0000~1001来表示十进制的0~9,而丢弃4位二进制的1010~1111共6种组合,这样一来,就相当于用4位二进制的0~9对应十进制的0~9。

这样的BCD码进行相加时会出现两种可能,一种可能是当两个BCD码相加的值小于10时,结果仍旧是正确的BCD码;

另外一种可能是当两个码相加的结果大于或者等于10时,就会得到错误的结果,这是因为4位二进制码可以表示0~15,而BCD码只取了其中的0~9的原因。

对于第二种错误的情况,有一个简单的处理方法就是作加6处理,就会得到正确的结果。

下面举例说明第二种情况的处理过程。

假如A=(7)10=(0111)2=(0111)BCD,B=(8)10=(1000)2=(1000)BCD,那么A+B=(15)10=(1111)2≠(00010101)BCD。

但是对于(1111)2+(0110)2=(00010101)2=(00100001)BCD。

因此在程序设计时要注意两个输入的BCD码相加结果是否会出现大于或等于10的情况,如果是则必须作加6的修正处理。

BCD码加法器的VHDL源码如下:

仿真时注意引脚的数据类型都设置为十六进制格式,如图2.4所示

图2.4BCD码加法器的功能仿真波形

2、带异步清零和异步置数的十进制加法计数器设计。

图2.5十进制加法计数器

如图2.5所示,clk为时钟输入,Q为十进制的8421BCD码输出,CO为进位输出,CR为异步清零,LD为异步置数,CR具有最高优先级,D为LD有效时置入的数据。

(CR、LD一般用按钮控制,通常为低电平有效。

下图是计数器VHDL代码及仿真波形,注意观察计数输出Q、进位输出CO的变化情况,CR和LD的控制作用。

图2.6计数器VHDL功能仿真波形

3、BCD码译码器设计。

图2.7七段数码管译码器原理图

源码如下:

图2.8BCD码译码器VHDL代码及仿真波形

4、用数码管显示计数结果

将2和3设计的电路生成符号“counter10”和“deled”,新建一个原理图作为顶层实体,按图2.9连接电路。

图2.9在数码管上显示计数器输出结果

管脚绑定:

Clk:

系统时钟源

D[3..0]:

拨档开关K1~K3

LD、CR:

按键S1、S2

Ledag[7..0]:

七段码管dpGFEDCBA

CO:

LED指示灯

5、8位七段数码管扫描电路设计

①图2.10是实验箱中的八个数码管电路连接图,可以看到,八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。

SEL[2..0]从“000”、“001”一直加到“111”,则八个数码管依次从左到右显示。

如果SEL[2..0]变化频率很高,则数码管好像是“同时”显示的效果。

②要实现8位数码管扫描,首先应设计一个计数器,让SEL从“000”、“001”一直加到“111”,实际上就是一个八进制计数器。

如图2.11的简单代码即可实现:

图2.11八位数码管扫描代码

SEL[2..0]的值即可确定数码管的位置,如要将“BCD码加法器”的结果用数码管显示,可以再设计一个组合逻辑电路,用于选通数码管,使各个数字或符号显示在对应位置,如图2.12所示。

图2.12八位数码管选通

注:

图2.12的代码使用组合逻辑电路实现,如果用时序逻辑电路实现,则前几句应改为:

为什么这里的CASE语句判断的是“SEL+1”?

完整的代码如图2.13:

图2.13数码管扫描选通模块VHDL代码

为了显示“+”号、“=”号、“消隐”,将“0000~1001”表示“0~9”,“1001”以上的编码用于表示特殊符号,如“1011”用于“=”号,“1010”用于“+”号,“1111”表示“消隐”,译码模块代码做相应改变如图2.14a所示:

图2.14a加入特殊符号编码后的译码器代码

也可以将BCD码扩展一位为5位,最高位为0即“00000”~“01111”表示原来的十六进制编码0~F,最高位为1的编码用于显示特殊字符,如“10000”用于“=”号,“10001”用于“×

”号,“11111”表示“消隐”,译码模块代码做相应改变如图2.9b所示。

此时图2.13数码管扫描选通模块中的端口BCD_OUT也应改为5位。

图2.14b扩展一位BCD码输入后的译码器代码

③将“BCD码加法器”、“BCD译码器”、“8位七段数码管扫描电路”的功能组合在一起,实现在数码管上显示结果,下载到实验箱进行测试。

如图2.15所示:

图2.15在数码管上显示BCD码加法器结果

五、实验步骤:

1.首先打开QuartusII软件,新建工程。

2.按照自己的想法,编写原理图或VHDL文件程序。

3.对自己的设计进行编译并仿真。

4.仿真无误后,根据附录一的引脚对照表,对实验中用到的外设资源进行管脚绑定,然后再重新编译一次。

5.用下载电缆通过JTAG接口将对应的sof文件下载到FPGA中。

6.观察实验结果是否与自己的预期想法相吻合。

六、实验报告要求

1.记录并分析仿真结果。

2.总结时序逻辑电路与组合逻辑电路的区别。

3.总结模块化层次电路设计的方法。

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

当前位置:首页 > 解决方案 > 学习计划

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

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