ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:649.44KB ,
资源ID:20086888      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20086888.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(EDA13周实验文本输入方式设计数字逻辑电路Word格式文档下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

EDA13周实验文本输入方式设计数字逻辑电路Word格式文档下载.docx

1、理解组合逻辑电路的设计概念应该分两个层次:(1)设计的电路在功能上是完整的,能够满足所有设计要求;(2)考虑到成本和设计复杂度,设计的电路应该是最简单的,设计最优化是设计人员必须努力达到的目标。在设计组合逻辑电路时,首先需要对实际问题进行逻辑抽象,列出真值表,建立起逻辑模型;然后利用代数法或卡诺图法简化逻辑函数,找到最简或最合理的函数表达式;根据简化的逻辑函数画出逻辑图,并验证电路的功能完整性。设计过程中还应该考虑到一些实际的工程问题,如被选门电路的驱动能力、扇出系数是否足够,信号传递延时是否合乎要求等。组合电路的基本设计步骤可用图2.2来表示。组合逻辑电路的特点及设计时的注意事项a)组合逻辑

2、电路的输出具有立即性,即输入发生变化时,输出立即变化。(实际电路中还要考虑器件和导线产生的延时)。b)组合逻辑电路设计时应尽量避免直接或间接的反馈,以免出现不确定的状态或形成振荡。如右图设计的基本触发器,当输入S、R从“00”变为“11”时,无法确定Q和Q的值。c)组合逻辑电路容易出现“毛刺”,这是由于电路“竞争冒险”产生的。如图2.3所示,图中与门的两个输入分别由信号 A 经过不同路径传递而来。按照理想情况分析,电路输出端应该始终为 L=A A =0。考虑到信号在逻辑门中的传输延迟,A 到达与门输入端的时间始终落后于 A。图 2.3(b)的波形显示,信号 A的四次变化都产生了竞争。但这四次竞

3、争引起的结果是不一样的。第一次和第三次竞争造 成输出错误,第二次和第四次竞争则没有造成输出错误。换言之,只有第一次和第三次竞争引起了冒险,产生了尖峰干扰。图 2.3 竞争冒险实例由于“毛刺”的影响,应避免使用组合逻辑电路直接产生时钟信号,也应避免将组合逻辑电路的输出作为另一个电路的异步控制信号。d)用VHDL描述组合逻辑电路时,所有的输入信号都应放在敏感信号表中。e)用IF语句和CASE语句描述电路分支时,一定要列举出所有输入状态(一般在最后加上“else”或“when others”分支),否则在综合时将引入LATCH,使电路输出出现延时。2、时序逻辑电路时序逻辑电路的定义同步时序逻辑电路的

4、设计方法同步时序逻辑电路的设计是分析的逆过程,其任务是根据实际逻辑问题的要求,设计出能实现给定逻辑功能的电路。同步时序电路的设计过程:(1)根据给定的逻辑功能建立原始状态图和原始状态表。a)明确电路的输入条件和相应的输出要求,分别确定输入变量和输出变量的数目和符号;b)找出所有可能的状态和状态转换之间的关系;c)根据原始状态图建立原始状态表;(2)状态化简-求出最简状态图。合并等价状态,消去多余状态的过程称为状态化简。等价状态:在相同的输入下有相同的输出,并转换到同一个次态去的两个状态称为等价状态。(3)状态编码(状态分配)。给每个状态赋以二进制代码的过程。根据状态数确定触发器的个数,(M为状

5、态数;n为触发器的个数)。(4)选择触发器的类型。(5)求出电路的激励方程和输出方程。(6)画出逻辑图并检查自启动能力。时序逻辑电路的特点及设计时的注意事项a)时序逻辑电路与组合逻辑电路相比,输出会延时一个时钟周期。b)时序逻辑电路一般容易消除“毛刺”。c)用VHDL描述时序逻辑电路时,一般只需将时钟信号和异步控制(如异步复位)信号作为敏感信号。d)用IF语句描述时序逻辑电路时,异步控制逻辑应写在前面的分支中,最后一个ELSIF分支作为时钟边沿检测,后面不允许再有ELSE语句。e)不能同时使用时钟的上升沿和下降沿。3、VHDL语言简介VHDL设计文件的基本结构一些约定 实体、信号、文件等的命名

6、 注释的使用 书写代码时使用层次缩进格式 一个文件中只定义一个实体,实体名与文件名一致 尽量不使用“变量”,而使用“信号” 不使用硬件无法实现的一些语句,如断言语句、等待语句等使用原理图工具栏的“block tool”生成设计文件的框架 使用“Edit”菜单中的“Insert Template”插入设计模版四、实验内容:1、 设计一个BCD码加法器。BCD码是二进制编码的十进制码,也就是用4位二进制数来表示十进制中的09这十个数。由于4位二进制数有00001111共16种组合,而十进制数只需对应4位二进制数的10种组合,故从4位二进制数的16种组合中取出10种组合来分别表示十进制中的09,则有

7、许多不同的取舍方式,于是便形成了不同类型的BCD码。本实验我们只针对最简单的情况,也是最常见的BCD码,就是用4位二进制的00001001来表示十进制的09,而丢弃4位二进制的10101111共6种组合,这样一来,就相当于用4位二进制的09对应十进制的09。这样的BCD码进行相加时会出现两种可能,一种可能是当两个BCD码相加的值小于10时,结果仍旧是正确的BCD码;另外一种可能是当两个码相加的结果大于或者等于10时,就会得到错误的结果,这是因为4位二进制码可以表示015,而BCD码只取了其中的09的原因。对于第二种错误的情况,有一个简单的处理方法就是作加6处理,就会得到正确的结果。下面举例说明

8、第二种情况的处理过程。假如A=(7)10=(0111)2=(0111)BCD,B=(8)10=(1000)2=(1000)BCD,那么A+B=(15)10=(1111)2(0001 0101)BCD。但是对于(1111)2+(0110)2=(0001 0101)2=(0010 0001)BCD。因此在程序设计时要注意两个输入的BCD码相加结果是否会出现大于或等于10的情况,如果是则必须作加6的修正处理。BCD码加法器的VHDL源码如下:仿真时注意引脚的数据类型都设置为十六进制格式,如图2.4所示图2.4 BCD码加法器的功能仿真波形2、 带异步清零和异步置数的十进制加法计数器设计。图2.5十进

9、制加法计数器如图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.8 BCD码译码器VHDL代码及仿真波形4、 用数码管显示计数结果将2和3设计的电路生成符号“counter10”和“deled”,新建一个原理图作为顶层实体,按图2

10、.9连接电路。图2.9 在数码管上显示计数器输出结果管脚绑定:Clk:系统时钟源D3.0:拨档开关K1K4LD、CR:按键S1、S2Ledag7.0:七段码管dpGFEDCBACO:LED指示灯5、 8位七段数码管扫描电路设计图2.10是实验箱中的八个数码管电路连接图,可以看到,八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。SEL2.0从“000”、“001”一直加到“111”,则八个数码管依次从左到右显示。如果SEL2.0变化频率很高,则数码管好像是“同时”显示的效果。要实现8位数码管扫描,首先应设计一个

11、计数器,让SEL从“000”、“001”一直加到“111”,实际上就是一个八进制计数器。如图2.11的简单代码即可实现:图2.11 八位数码管扫描代码SEL2.0的值即可确定数码管的位置,如要将“BCD码加法器”的结果用数码管显示,可以再设计一个组合逻辑电路,用于选通数码管,使各个数字或符号显示在对应位置,如图2.12所示。图2.12 八位数码管选通注:图2.12的代码使用组合逻辑电路实现,如果用时序逻辑电路实现,则前几句应改为:为什么这里的CASE语句判断的是“SEL+1”?完整的代码如图2.13:图2.13 数码管扫描选通模块VHDL代码为了显示“”号、“=”号、“消隐”,将“000010

12、01”表示“09”,“1001”以上的编码用于表示特殊符号,如“1011”用于“=”号,“1010”用于“”号,“1111”表示“消隐”,译码模块代码做相应改变如图2.14a所示:图2.14a 加入特殊符号编码后的译码器代码也可以将BCD码扩展一位为5位,最高位为0即“00000”“01111”表示原来的十六进制编码0F,最高位为1的编码用于显示特殊字符,如“10000”用于“=”号,“10001”用于“”号,“11111”表示“消隐”,译码模块代码做相应改变如图2.14b所示。此时图2.13 数码管扫描选通模块中的端口BCD_OUT也应改为5位。图2.14b 扩展一位BCD码输入后的译码器代

13、码将“BCD码加法器”、“BCD译码器”、“8位七段数码管扫描电路”的功能组合在一起,实现在数码管上显示结果,下载到实验箱进行测试。如图2.15所示:图2.15 在数码管上显示BCD码加法器结果6、 乘法器的几种设计方法组合逻辑电路实现4位硬件并行乘法器。实现并行乘法器的方法有很多种,但是归结起来基本上分为两类,一类是靠组合逻辑电路实现,另一类通过流水线结构实现。组合逻辑电路结构的并行乘法器的最大优点就是速度快,但是当位数很大时占用的逻辑资源较多。下面就组合逻辑电路实现无符号数乘法的方法作详细介绍。假如有被乘数A和乘数B,首先用A与B的最低位相乘得到S1,然后再把A左移1位与B的第2位相乘得到

14、S2,再将A左移3位与B的第三位相乘得到S3,依此类推,直到把B的所有位都乘完为止,然后再把乘得的结果S1、S2、S3相加即得到相乘的结果。需要注意的是,具体实现乘法器是,并不是真正的去乘,而是利用简单的判断去实现,举个简单的例子。假如A左移n位后与B的第n位相乘,如果B的这位为1,那么相乘的中间结果就是A左移n位后的结果,否则如果B的这位为0,那么就直接让相乘的中间结果为0即可。待B的所有位相乘结束后,把所有的中间结果相加即得到A与B相乘的结果。4位并行乘法器的VHDL代码如图2.16所示图2.16 4位并行乘法器的VHDL代码乘法器的功能仿真波形如图2.17(注意:三个端口数据类型设置为U

15、nsigned Decimal),图中可以看出,乘法结构的输出没有延时(实际情况应有一定的器件延时,可以通过时序仿真看到)。图2.17 4位并行乘法器仿真波形4位并行乘法器测试电路与图2.15测试BCD码加法器的电路相似。4位硬件乘法器的流水线设计流水线结构因其高速性在很多数字电路中得到了广泛的应用,目前的DSP、ARM等器件也是基于流水线结构的。本实验就是在掌握“4位硬件乘法器”实验的基础上,将其改为流水线结构,从而提高其运算速度。流水线可以简单的理解为在时钟的作用下,每一拍完成一个简单运算。需要注意的是,由于内部的运算都是在时钟作用下进行,所以涉及到运算的中间变量都必须定义成寄存器结构的。

16、另外对于一次运算可能要经过多个时钟周期才能得到结果,但是如果对于批量的数据,就可以认为是单周期得到运算结果。所以流水线结构的乘法器在对于单个运算时它的高速性并不能得以体现,只有在批量数据运算过程中才能体现出其高速性。本实验中的流水线乘法器针对无符号型的数据(对于有符号型的数据还必须进行符号扩张),大体上可以分为四拍,第一拍:取数据并作适当整理;第二拍:位乘法;第三步:加法第一步;第四拍:加法第二步,得到运算结果。流水线结构的乘法器可以用下图2.18来简要表示:图2.18 流水线结构乘法器示意图乘法器在时钟信号Clock的作用下,第一个时钟信号上升沿的时候第一拍先取数据,第二个时钟上升沿时候第一

17、拍对取得的数据进行位乘,同时第二拍开始取数据,第三个时钟上升沿的时候第一拍进行第一步加法运算,第二拍进行位乘,同时第三拍开始取数据,第四个时钟上升沿的时候第一拍完成第二次加法并送出结果,第二拍则完成第一步加法,第三拍完成位乘,同时第四拍完成取数据,再往后走,会每一个时钟周期送出一个运算结果。这就是为什么流水线结构的乘法器在单次运算的过程中它的高速性不能得到体现原因。图2.19 流水线结构乘法器的主要源码图2.19是流水线结构乘法器的主要源码,其中应定义Temp0、Temp1、Temp2、Temp3、Temp01、Temp23几个信号量存储中间结果。图2.20的仿真波形中,每个时钟周期改变一次输

18、入,可以看到每个时钟周期出来一个输出结果,输出结果相比A、B延后3个时钟周期。图2.20 流水线结构乘法器的仿真波形可以按图2.21连接电路测试,其中数码管扫描用1kHz时钟,乘法器用1Hz时钟,并用一个LED指示灯显示时钟节拍;每一个时钟节拍改变一次输入,注意观察输出节拍。图中“sel_time”模块和“deled”的BCD码扩展到5位,以显示“”号、“=”号等特殊符号。图2.21 流水线结构乘法器的测试电路4位硬件乘法器的状态机设计流水线乘法器速度快,但是占用资源较多,特别是当乘数的位数很大时。如果乘法操作比较少,或对速度要求不高的应用,可以采用串行方式实现乘法器。下面是用状态机实现串行乘

19、法器的实例:状态机可以模拟计算机CPU的运行机制,完成非常复杂的控制逻辑。状态机有多种结构,有关状态机的知识请参考相关书籍,本例采用单进程状态机设计,比较易于消除毛刺,但输出结果会延时一个时钟周期。图2.22是本设计的状态图,一共4个状态,S0态接收输入,S1态将当前位加到m_result,S2态对A、B进行移位操作,S3态输出结果。状态转换条件在后面的源码中讲述。图2.22 串行乘法器的状态转换图图2.23是状态机的VHDL实现源码,可以看到整个设计只用到一个8位加法电路,而“4位流水线乘法器”需要3个,当乘法位数很大时,串行加法器可以节约更多的硬件资源,但需要的时钟周期数更多。图2.24是

20、仿真波形,注意观察需要几个周期才能输出结果(与A的值有关),A、B的值需要维持几个周期才能保证结果的正确性?图2.24 串行乘法器的仿真波形测试电路如图2.25所示。图2.25 串行乘法器的测试电路五、实验步骤:1首先打开Quartus II软件,新建工程。2按照自己的想法,编写原理图或VHDL文件程序。3对自己的设计进行编译并仿真。4仿真无误后,根据附录一的引脚对照表,对实验中用到的外设资源进行管脚绑定,然后再重新编译一次。5用下载电缆通过JTAG接口将对应的sof文件下载到FPGA中。6观察实验结果是否与自己的预期想法相吻合。六、实验报告要求1记录并分析仿真结果。2总结时序逻辑电路与组合逻辑电路的区别。3. 总结模块化层次电路设计的方法。4. 以单进程状态机为例总结状态机设计的几个要点。5. 分析三种乘法器的结构特点及各自的优势。

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

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