收藏 分享(赏)

实验二 时序逻辑电路的设计.doc

上传人:HR专家 文档编号:7571884 上传时间:2019-05-21 格式:DOC 页数:13 大小:375KB
下载 相关 举报
实验二  时序逻辑电路的设计.doc_第1页
第1页 / 共13页
实验二  时序逻辑电路的设计.doc_第2页
第2页 / 共13页
实验二  时序逻辑电路的设计.doc_第3页
第3页 / 共13页
实验二  时序逻辑电路的设计.doc_第4页
第4页 / 共13页
实验二  时序逻辑电路的设计.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、实验二时序逻辑电路的设计一、实验目的:1、 掌握时序逻辑电路的分析方法。2、 掌握 VHDL 设计常用时序逻辑电路的方法。3、 掌握时序逻辑电路的测试方法。4、 掌握层次电路设计方法。5、 理解时序逻辑电路的特点。二、实验的硬件要求:1、 EDA/SOPC 实验箱。2、 计算机。三、实验原理1、时序逻辑电路的定义数字逻辑电路可分为两类:组合逻辑电路和时序逻辑电路。组合逻辑电路中不包含记忆单元(触发器、锁存器等) ,主要由逻辑门电路构成,电路在任何时刻的输出只和当前时刻的输入有关,而与以前的输入无关。时序电路则是指包含了记忆单元的逻辑电路,其输出不仅跟当前电路的输入有关,还和输入信号作用前电路的

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

3、励方程组和输出方程组画出逻辑图并检查自启动能力(3)状态编码(状态分配) 。给每个状态赋以二进制代码的过程。根据状态数确定触发器的个数, (M 为状态数;n 为触发器的个数) 。n21-(4)选择触发器的类型。(5)求出电路的激励方程和输出方程。(6)画出逻辑图并检查自启动能力。3、时序逻辑电路的特点及设计时的注意事项时序逻辑电路与组合逻辑电路相比,输出会延时一个时钟周期。时序逻辑电路一般容易消除“毛刺” 。用 VHDL 描述时序逻辑电路时,一般只需将时钟信号和异步控制(如异步复位)信号作为敏感信号。用 IF 语句描述时序逻辑电路时,异步控制逻辑应写在前面的分支中,最后一个ELSIF 分支作为

4、时钟边沿检测,后面不允许再有 ELSE 语句。不能同时使用时钟的上升沿和下降沿。四、实验内容:1、 带异步清零和异步置数的十进制加法计数器设计。如图 2.1 所示,clk 为时钟输入,Q 为十进制的 8421BCD 码输出,CO 为进位输出,CR 为异步清零, LD 为异步置数,CR 具有最高优先级, D 为 LD 有效时置入的数据。(CR、LD 一般用按钮控制,通常为低电平有效。 )下图是计数器 VHDL 代码及仿真波形,注意观察计数输出 Q、进位输出 CO 的变化情况,CR 和 LD 的控制作用。图 2.1 十进制加法计数器 图 2.2 数控分频器图 2.3 计数器 VHDL 代码及仿真波

5、形2、 数控分频器的设计。要求:将 10KHz 时钟信号分频,分别输出 10Hz、1kHz、1250Hz 时钟信号,如图 2.2所示。分频的原理与计数器差不多,需要定义一个信号量来控制计数范围为分频数,另外控制在在一个计数周期内输出一段低电平“0”和另一段高电平“1” 。分频器部分源码如图 2.4a、图 2.4b 所示:图 2.4a 数控分频器 VHDL 代码如果用于计数的信号量定义为“std_logic_vector”类型的。如“Count10” ,也可以将其最高位作为分频后的时钟输出:即使用语句“Clk_1kHz=Count10(3);” ,此时输出时钟信号占空比是多少?是否可以改变?。如

6、果分频数为 2n, “n 为整数” ,如 8 分频,Count8 定义为 “std_logic_vector”类型,使用下图的语句序列实现,更加简洁:图 2.4b 数控分频器 VHDL 代码同理, “Count8(1)”是几分频输出?“Count8(0)” 是几分频输出?3、 8 位七段数码管扫描电路设计。ABCDEFGdpSEL0SEL1SEL2图 2.5 八位数码管模块电路原理图 2.5 是实验箱中的八个数码管电路连接图,可以看到,八个数码管的a、b、c、d、e 、f 、g、h、dp 都连在了一起,8 个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。SEL20从“00

7、0” 、 “001”一直加到“111” ,则八个数码管依次从左到右显示。如果 SEL20变化频率很高,则数码管好像是“同时”显示的效果。要实现 8 位数码管扫描,首先应设计一个计数器,让 SEL 从“000” 、 “001”一直加到“111” ,实际上就是一个八进制计数器。如图 2.6 的简单代码即可实现:图 2.6 八位数码管扫描代码SEL20的值即可确定数码管的位置,如要将“BCD 码加法器”或“4 位硬件乘法器”的结果用数码管显示,可以再设计一个组合逻辑电路,用于选通数码管,使各个数字或符号显示在对应位置,如图 2.7 所示。图 2.7 八位数码管选通注:图 2.7 的代码使用组合逻辑电

8、路实现,如果用时序逻辑电路实现,则前几句应改为:为什么这里的 CASE 语句判断的是“SEL+1”?完整的代码如图 2.8:图 2.8 数码管扫描选通模块 VHDL 代码为了显示“”号、 “=”号、 “消隐” ,将 BCD 码扩展一位为 5 位,最高位为 0 即“00000”“01111”表示原来的十六进制编码 0F,最高位为 1 的编码用于显示特殊字符,如“10000”用于“=”号, “10001”用于“”号, “11111”表示“消隐” ,译码模块代码做相应改变如图 2.9 所示:图 2.9 扩展一位 BCD 码输入后的译码器代码层次化电路设计及元件例化:a)任何一个电路都可以看作是一个“

9、元件” ,我们只需要关心它的功能,而不需要了解它的具体实现。b)“元件”与其它电路的连接可以通过端口映射实现。c)“元件 ”使用,可以通过“元件例化”实现,VHDL 语言有专门的“元件例化”和“端口映射”语句。操作步骤请参考“元件例化和调用的操作步骤”部分。将“BCD 码加法器” (或“4 位硬件乘法器” ) 、 “BCD 译码器” 、 “8 位七段数码管扫描电路”的功能组合在一起,实现在数码管上显示结果,下载到实验箱进行测试。如图2.10 所示(注:图中“sel_time”模块和“deled ”的 BCD 码扩展到 5 位,以显示“”号、“=”号等特殊符号):图 2.10 在数码管上显示乘法

10、器结果4、 4 位硬件乘法器的流水线设计流水线结构因其高速性在很多数字电路中得到了广泛的应用,目前的 DSP、ARM 等器件也是基于流水线结构的。本实验就是在掌握“4 位硬件乘法器”实验的基础上,将其改为流水线结构,从而提高其运算速度。流水线可以简单的理解为在时钟的作用下,每一拍完成一个简单运算。需要注意的是,由于内部的运算都是在时钟作用下进行,所以涉及到运算的中间变量都必须定义成寄存器结构的。另外对于一次运算可能要经过多个时钟周期才能得到结果,但是如果对于批量的数据,就可以认为是单周期得到运算结果。所以流水线结构的乘法器在对于单个运算时它的高速性并不能得以体现,只有在批量数据运算过程中才能体

11、现出其高速性。本实验中的流水线乘法器针对无符号型的数据(对于有符号型的数据还必须进行符号扩张) ,大体上可以分为四拍,第一拍:取数据并作适当整理;第二拍:位乘法;第三步:加法第一步;第四拍:加法第二步,得到运算结果。流水线结构的乘法器可以用下图 2.11来简要表示:CLOCKStep1Step2Step3Step4LoadLoadLoadLoadXXXX+(1)+(1)+(1)+(1)+(2)+(2)+(2)+(2)图 2.11 流水线结构乘法器示意图乘法器在时钟信号 Clock 的作用下,第一个时钟信号上升沿的时候第一拍先取数据,第二个时钟上升沿时候第一拍对取得的数据进行位乘,同时第二拍开始

12、取数据,第三个时钟上升沿的时候第一拍进行第一步加法运算,第二拍进行位乘,同时第三拍开始取数据,第四个时钟上升沿的时候第一拍完成第二次加法并送出结果,第二拍则完成第一步加法,第三拍完成位乘,同时第四拍完成取数据,再往后走,会每一个时钟周期送出一个运算结果。这就是为什么流水线结构的乘法器在单次运算的过程中它的高速性不能得到体现原因。B 与 A(0)位乘的结果B 与 A(1)位乘的结果B 与 A(2)位乘的结果B 与 A(3)位乘的结果Temp01、Temp23 比Temp0、 Temp1、Temp2、Temp3 延时一个时钟周期。第一个时钟节拍后输出,Temp0、 Temp1、Temp2、Temp

13、3 比 A 和 B 延时一个时钟周期m_Result 比 Temp01、Temp23 延时一个时钟周期,比 A 和 B 延时三个时钟周期,才能得到输出结果。图 2.12 流水线结构乘法器的主要源码图 2.12 是流水线结构乘法器的主要源码,其中应定义Temp0、 Temp1、Temp2、Temp3、Temp01、Temp23 几个信号量存储中间结果。图 2.13 的仿真波形中,每个时钟周期改变一次输入,可以看到每个时钟周期出来一个输出结果,输出结果相比 A、 B 延后 3 个时钟周期。图 2.13 流水线结构乘法器的仿真波形可以按图 2.14 连接电路测试,其中数码管扫描用 1kHz 时钟,乘

14、法器用 1Hz 时钟,并用一个 LED 指示灯显示时钟节拍;每一个时钟节拍改变一次输入,注意观察输出节拍。图中“sel_time” 模块和“deled”的 BCD 码扩展到 5 位,以显示“”号、 “=”号等特殊符号。图 2.14 流水线结构乘法器的测试电路5、 4 位硬件乘法器的状态机设计流水线乘法器速度快,但是占用资源较多,特别是当乘数的位数很大时。如果乘法操作比较少,或对速度要求不高的应用,可以采用串行方式实现乘法器。下面是用状态机实现串行乘法器的实例:状态机可以模拟计算机 CPU 的运行机制,完成非常复杂的控制逻辑。状态机有多种结构,有关状态机的知识请参考相关书籍,本例采用单进程状态机

15、设计,比较易于消除毛刺,但输出结果会延时一个时钟周期。图 2.15 是本设计的状态图,一共 4 个状态,S0 态接收输入,S1 态将当前位加到m_result,S2 态对 A、B 进行移位操作, S3 态输出结果。状态转换条件在后面的源码中讲述。图 2.15 串行乘法器的状态转换图图 2.17 是状态机的 VHDL 实现源码,可以看到整个设计只用到一个 8 位加法电路,而“4 位流水线乘法器”需要 3 个,当乘法位数很大时,串行加法器可以节约更多的硬件资源,但需要的时钟周期数更多。图 2.16 是仿真波形,注意观察需要几个周期才能输出结果(与 A 的值有关) ,A、B 的值需要维持几个周期才能

16、保证结果的正确性?图 2.16 串行乘法器的仿真波形状态量一般采用枚举类型在 start 由 0 跳变到 1 时,转到 S1,开始进行乘法操作当 TempA 为 0 时,转到 S3,输出结果 如果 A 的当前位为1,将移位到当前位后的 B 累加到结果当 finish 跳变到 1 时,即可读取输出结果图 2.17 状态机结构乘法器 VHDL 代码电路测试方法与“流水线乘法器”相似。五、实验步骤:1首先打开 Quartus II 软件,新建工程。2按照自己的想法,编写原理图或 VHDL 文件程序。3对自己的设计进行编译并仿真。4仿真无误后,根据附录一的引脚对照表,对实验中用到的拨挡开关及 LED 进行管脚绑定,然后再重新编译一次。5用下载电缆通过 JTAG 接口将对应的 sof 文件下载到 FPGA 中(“计数器”和“分频器”只需仿真,不需要下载) 。6观察实验结果是否与自己的预期想法相吻合。六、实验报告要求1总结时序逻辑电路与组合逻辑电路的区别。2论述时序逻辑电路设计、分析和测试方法。3. 总结模块化层次电路设计的方法。4. 以单进程状态机为例总结状态机设计的几个要点。5. 分析三种乘法器的结构特点及各自的优势。

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报