实验二 时序逻辑电路的设计[1]

合集下载

时序逻辑实验报告

时序逻辑实验报告

时序逻辑实验报告时序逻辑实验报告引言:时序逻辑是计算机科学中的重要概念,它描述了事件在时间上的顺序和发生关系。

在本次实验中,我们将探索时序逻辑的基本原理,并通过实际的电路设计和仿真来加深对其理解。

实验一:时钟信号的生成和分频时钟信号是时序逻辑中的基础,它提供了时间参考,使得电路中的各个元件能够按照特定的时间序列进行操作。

在本实验中,我们首先学习了如何通过计数器和分频器生成时钟信号。

通过调整分频器的参数,我们可以得到不同频率的时钟信号,并观察其对电路行为的影响。

实验二:时序逻辑电路的设计在本实验中,我们将学习如何设计时序逻辑电路。

时序逻辑电路通常由触发器、计数器、状态机等组成,它们能够根据输入信号的变化产生不同的输出。

我们将通过实际的案例来展示时序逻辑电路的设计过程,并使用仿真工具验证其正确性。

实验三:状态机的设计和实现状态机是时序逻辑中常用的模型,它描述了系统根据输入信号的变化而转换的状态。

在本实验中,我们将学习如何设计和实现状态机。

通过定义状态和状态转换条件,我们可以将复杂的系统行为转化为简单的状态转换图,并通过电路实现这些状态转换。

实验四:时序逻辑电路的故障排查时序逻辑电路的故障排查是电子工程师日常工作中的重要环节。

在本实验中,我们将学习如何通过逻辑分析仪和示波器等工具来排查时序逻辑电路的故障。

通过观察信号波形和逻辑分析结果,我们可以确定故障的原因,并采取相应的修复措施。

实验五:时序逻辑电路的应用时序逻辑电路在计算机科学和电子工程中有着广泛的应用。

在本实验中,我们将学习一些时序逻辑电路的典型应用,如计数器、时序多路复用器等。

通过实际的案例,我们可以更好地理解时序逻辑电路在实际系统中的作用和价值。

结论:通过本次实验,我们深入了解了时序逻辑的基本原理和应用。

我们学习了时钟信号的生成和分频,掌握了时序逻辑电路的设计和实现方法,学会了使用工具进行故障排查。

时序逻辑在现代电子系统中起着重要的作用,通过实验的学习,我们对其有了更深入的理解和应用能力。

EDA实验二 时序逻辑电路设计(有源程序)

EDA实验二 时序逻辑电路设计(有源程序)

EDA实验二时序逻辑电路设计一、实验目的1、熟悉EDA软件QuartusII的基本设计流程,包括设计输入、编译、综合、仿真;2、熟悉用EDA软件及FPGA器件实现数字电路设计的方法,包括引脚锁定,结构综合;3、熟悉用EDA实验箱对所设计的数字电路进行硬件验证的方法,包括验证方案。

二、实验平台1、硬件2、软件三、实验内容及结果记录1、HDL程序——十进制计数器1)程序代码module key_cnt(key,cnt); //定义模块名input key; //1端输入output reg [3:0] cnt; //4端输出always@(posedge key)beginif(cnt<4'd9) //如果输出值没有大于9cnt<= cnt + 1'b1; //输出值加1elsecnt<= 4'd0; //否则输出端归0endendmodule2)实验结果记录表2.1输入输出A0 Q3 Q2 Q1 Q02、HDL程序——0-9的计数器1)程序代码module number(in,reset,data_out, dig); //模块定义input in,reset; //输入输出定义output [7:0] data_out;output [7:0] dig = 8'b11111110;reg [7:0] data_out;reg [3:0]count ;always @ (posedge in or negedge reset)beginif (!reset) //异步清零begindata_out <= 8'b1111111;count <= 0;endelsebegin count <=count + 1; //计数case (count) //七段译码器4'b0000: data_out = 8'b11000000; // 显示0 4'b0001: data_out = 8'b11111001; // 显示1 4'b0010: data_out = 8'b10100100; // 显示2 4'b0011: data_out = 8'b10110000; // 显示3 4'b0100: data_out = 8'b10011001; // 显示4 4'b0101: data_out = 8'b10010010; // 显示5 4'b0110: data_out = 8'b10000011; // 显示6 4'b0111: data_out = 8'b11111000; // 显示7 4'b1000: data_out = 8'b10000000; // 显示8 4'b1001: data_out = 8'b10011000; // 显示9 default:data_out <= 8'b11000000;endcaseendendendmodule2)实验结果记录表2.2输入输出A1 A0 数码管显示。

时序逻辑电路实验报告

时序逻辑电路实验报告

时序逻辑电路实验报告一、实验目的1. 加深理解时序逻辑电路的工作原理。

2. 掌握时序逻辑电路的设计方法。

3. 掌握时序逻辑电路的功能测试方法。

二、实验环境1、PC机2、Multisim软件工具三、实验任务及要求1、设计要求:要求设计一个计数器完成1→3→5→7→9→0→2→4→6→8→1→…的循环计数(设初值为1),并用一个数码管显示计数值(时钟脉冲频率为约1Hz)。

2、实验内容:(1)按要求完成上述电路的功能。

(2)验证其功能是否正确。

四、实验设计说明(简述所用器件的逻辑功能,详细说明电路的设计思路和过程)首先根据题目要求(即要完成1到9的奇数循环然后再0到8的偶数循环)画出真值表,如下图。

画出真值表后,根据真值表画出各次态对应的卡诺图,如下图。

然后通过化简卡诺图,得到对应的次态的状态方程;然后开始选择想要用于实现的该电路的器件,由于老师上课时所用的例题是用jk触发器完成的,我觉得蛮不错的,也就选择了同款的jk触发器;选好器件之后,根据状态方程列出jk触发器的驱动方程。

然后根据驱动方程连接好线路图,为了连接方便,我也在纸上预先画好了连接图,以方便照着连接。

接下来的工作就是在multisim上根据画好的草图连接器件了,然后再接上需要的显示电路,即可完成。

五、实验电路(画出完整的逻辑电路图和器件接线图)六、总结调试过程所遇到的问题及解决方法,实验体会1、设计过程中遇到过哪些问题?是如何解决的?在设计过程中最大的问题还是忘记设计的步骤吧,因为老师是提前将实验内容已经例题讲解给我们听的,而我开始实验与上课的时间相隔了不短的时间,导致上课记下来的设计步骤忘得七七八八,不过好在是在腾讯课堂上得网课,有回放,看着回放跟着老师的思路走一遍后,问题也就迎刃而解了,后面的设计也就是将思路步骤走一遍而已,没再遇到什么困难。

2、通过此次时序逻辑电路实验,你对时序逻辑电路的设计是否有更清楚的认识?若没有,请分析原因;若有,请说明在哪些方面更加清楚。

时序实验报告总结

时序实验报告总结

时序实验报告总结时序实验报告总结时序实验是计算机科学中的一项重要实验,旨在通过设计和实现时序电路,来加深对数字电路和时序逻辑的理解。

本文将对我在时序实验中的学习和总结进行分享。

实验一:时序电路设计在时序电路设计实验中,我通过学习时序逻辑的基本概念和设计原理,成功完成了一个简单的时序电路设计。

通过该实验,我深入理解了时钟信号、触发器和状态机的概念,并学会了使用Verilog语言进行时序电路的建模和仿真。

实验二:时序电路优化时序电路优化实验是进一步提高时序电路设计能力的关键一步。

在该实验中,我通过对已有电路的分析和优化,实现了电路的性能提升。

通过优化电路的关键路径,我成功降低了电路的延迟,并提高了电路的工作速度。

实验三:时序电路测试时序电路测试是保证电路正确性的重要环节。

在该实验中,我学会了使用测试向量和模拟器对时序电路进行测试。

通过设计全面的测试用例和检查电路的输出波形,我成功发现和解决了电路中的一些问题,并提高了电路的稳定性和可靠性。

实验四:时序电路综合时序电路综合是将逻辑电路转化为物理电路的过程。

在该实验中,我学会了使用综合工具将Verilog代码转化为门级电路,并通过对综合结果的分析和优化,提高了电路的面积效率和功耗性能。

实验五:时序电路布局与布线时序电路布局与布线是将逻辑电路映射到芯片上的过程。

在该实验中,我学会了使用布局与布线工具对电路进行布局和布线,并通过对布局和布线结果的分析和优化,提高了电路的可靠性和稳定性。

实验六:时序电路验证时序电路验证是验证电路设计的正确性和可靠性的重要环节。

在该实验中,我学会了使用仿真和验证工具对电路进行验证,并通过对验证结果的分析和优化,提高了电路的正确性和稳定性。

通过以上实验,我深入了解了时序电路的设计、优化、测试、综合、布局与布线以及验证等方面的知识和技能。

通过实践和总结,我不仅提高了对时序电路的理解和掌握,还培养了问题解决和创新能力。

时序实验的学习过程中,我还遇到了一些挑战和困惑。

时序逻辑电路实验

时序逻辑电路实验

时序逻辑电路实验:实验(1) 计数器一、实验目的⒈熟悉计数器的设计方法及工作原理。

⒉了解同步计数器与异步计数器的区别。

⒊应用集成计数器构成所需的N进制计数器。

二、实验仪器与器件⒈数字逻辑实验箱。

⒉T078JK触发器、T077双D触发器、T210二—五—十进制集成计数器、T065 二输入端四与非门。

三、实验准备工作⒈复习计数器的工作原理及设计方法。

⒉预习集成T210计数器的引脚排列图及功能表。

四、实验内容及步骤⒈用T078JK触发器,设计一个同步五进制计数器。

在计数器的脉冲输入端,输入手动脉冲或连续脉冲,验证其逻辑功能。

⒉用T077双D触发器构成一个异步二—十进制计数器。

参考电路如图16-1。

通过数字实验箱中字符显示,验证其逻辑功能。

图16-1 用T077双D触发器构成异步二—十进制计数器⒊用集成T210(或T1290、T4290)二—五—十进制计数器,采用复0法,构成六进制计数器。

用复0法获得N进制计数器的方法:(1)按下列不等式求出所需计数器内触发器级数n。

2n-1≤N≤2n。

(2)写出N的二进制数代码。

(3)把计数列N时,触发器为1状态的输出端连接到一个与非门的输入端。

(4)把与非门的输出连至计数器的复0端。

(T210集成计数器内部已含有与非门。

将触发器为1 的输出端与R0(1)、R0(2)连接即可。

)例如:用T210集成计数器构成四进制计数器。

图16-1所示。

(参考教材)五、实验报告与要求画出设计的各个计数器电路图,写出必要的设计过程,并验证计数器的逻辑功能。

实验(2) 智力竞赛抢答器。

时序逻辑电路实验报告

时序逻辑电路实验报告

时序逻辑电路实验报告一、实验目的1.掌握同步计数器设计方法与测试方法。

2.掌握常用中规模集成计数器的逻辑功能和使用方法。

二、实验设备设备:THHD-2型数字电子计数实验箱、示波器、信号源器件:74LS163、74LS00、74LS20等。

三、实验原理和实验电路1.计数器计数器不仅可用来计数,也可用于分频、定时和数字运算。

在实际工程应用中,一般很少使用小规模的触发器组成计数器,而是直接选用中规模集成计数器。

2.(1) 四位二进制(十六进制)计数器74LS161(74LS163)74LSl61是同步置数、异步清零的4位二进制加法计数器,其功能表见表5.1。

74LSl63是同步置数、同步清零的4位二进制加法计数器。

除清零为同步外,其他功能与74LSl61相同。

二者的外部引脚图也相同,如图5.1所示。

表5.1 74LSl61(74LS163)的功能表3.集成计数器的应用——实现任意M进制计数器一般情况任意M进制计数器的结构分为3类,第一类是由触发器构成的简单计数器。

第二类是由集成二进制计数器构成计数器。

第三类是由移位寄存器构成的移位寄存型计数器。

第一类,可利用时序逻辑电路的设计方法步骤进行设计。

第二类,当计数器的模M较小时用一片集成计数器即可以实现,当M较大时,可通过多片计数器级联实现。

两种实现方法:反馈置数法和反馈清零法。

第三类,是由移位寄存器构成的移位寄存型计数器。

4.实验电路:十进制计数器同步清零法同步置数法六进制扭环计数器具有方波输出的六分频电路四、实验内容及步骤1.集成计数器实验(1)按电路原理图使用中规模集成计数器74LS163和与非门74LS00,连接成一个同步置数或同步清零十进制计数器,并将输出连接至数码管或发光二极管。

然后使用单次脉冲作为触发输入,观察数码管或发光二极管的变化,记录得到电路计数过程和状态的转换规律。

(2)根据电路图,首先用D触发器74LS7474构成一个不能自启的六进制扭环形计数器,同样将输出连接至数码管或发光二极管。

逻辑电路实验实验报告

逻辑电路实验实验报告

逻辑电路实验实验报告逻辑电路实验实验报告引言逻辑电路是现代电子技术中的重要组成部分,它在计算机、通信和控制系统等领域中起着至关重要的作用。

本次实验旨在通过实际操作,了解逻辑门电路的基本原理和应用,同时提高我们对数字电路设计的理解和能力。

实验一:逻辑门的基本原理逻辑门是数字电路中最基本的构建单元,它通过逻辑运算来实现不同的功能。

在本次实验中,我们首先学习了与门、或门和非门的基本原理。

与门是最简单的逻辑门之一,它的输出只有在所有输入都为1时才为1,否则为0。

通过实验,我们使用两个开关作为输入,一个LED灯作为输出,观察了与门的工作原理。

当两个开关同时闭合时,LED灯亮起,否则熄灭。

这说明了与门的逻辑运算规则。

类似地,我们还学习了或门和非门的原理。

或门的输出只有在任意一个输入为1时才为1,否则为0。

非门则是将输入信号取反,即输入为1时输出为0,输入为0时输出为1。

通过实验,我们对这两种逻辑门的工作原理有了更深入的了解。

实验二:逻辑门的组合应用在实验一中,我们学习了逻辑门的基本原理和功能。

在实验二中,我们进一步探讨了逻辑门的组合应用。

通过将多个逻辑门连接在一起,我们可以构建更复杂的数字电路。

在本次实验中,我们以一个简单的闹钟电路为例,通过组合应用与门、或门和非门,实现了闹钟的功能。

我们使用了几个开关作为输入,LED灯作为输出,通过不同的输入组合,控制LED灯的亮灭来模拟闹钟的工作状态。

这个实验让我们深刻认识到逻辑门的组合应用能够实现各种复杂的功能,如计算、控制和通信等。

在现代科技发展中,逻辑门的组合应用发挥着重要的作用,它们构成了计算机和其他电子设备的核心部分。

实验三:逻辑门的时序逻辑应用在实验一和实验二中,我们学习了逻辑门的基本原理和组合应用。

在实验三中,我们将进一步探索逻辑门的时序逻辑应用。

时序逻辑是指数字电路的输出不仅取决于当前的输入,还取决于之前的输入和输出状态。

在本次实验中,我们使用了一个触发器电路,通过观察其输出的变化,探究了时序逻辑的工作原理。

《FPGA系统设计》实验报告》时序逻辑电路的设计

《FPGA系统设计》实验报告》时序逻辑电路的设计

《FPGA系统设计》实验报告》时序逻辑电路的设计
一、设计任务
分别设计并实现锁存器、触发器的VHDL模型。

二、设计过程
1、同步锁存器:
同步锁存器是指复位和加载功能全部与时钟同步,复位端的优先级较高。

下图为同步锁存器的VHDL程序及模型:
2、异步锁存器:
异步锁存器,是指复位与时钟不同步的锁存器。

下图为同步锁存器的VHDL程序及模型:
3、D触发器:
D触发器是最常用的触发器。

下图为简单D触发器的VHDL 模型:
4、T触发器:
T触发器的特点是在时钟沿处输出信号发生翻转。


照有无复位、置位信号以及使能信号等,T触发器也有多种类型。

下图为带异步复位T触发器的VHDL模型:
5、JK触发器:
JK触发器中,J、K信号分别扮演置位、复位信号的角色。

为了更清晰的表示出JK触发器的工作过程,以下给出JK触发器的真值表(如表1所示)。

表1 JK触发器真值表
按照有无复位、置位信号,常见的JK触发器也有多种类型,下图带异步复位(clr)、置位(prn)的JK触发器的VHDL模型:
三.总结
本次实验中较为顺利,在第一次课的时间内我就已经完成了必做实验与选作实验。

在实验的过程中,在防抖电路处有了较大的困难。

由于仿真中不存在此问题,在实际操作中参数选择时遇到了一定的困难。

在反复比对效果之后,我
确定了电路的参数,实现了防抖功能。

通过这次实验,我对时钟脉冲、计数器等有了更加深入的认识与理解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二 时序逻辑电路的设计一、实验目的:1、 掌握时序逻辑电路的分析方法。

2、 掌握VHDL 设计常用时序逻辑电路的方法。

3、 掌握时序逻辑电路的测试方法。

4、 掌握层次电路设计方法。

5、 理解时序逻辑电路的特点。

二、实验的硬件要求:1、 EDA/SOPC 实验箱。

2、 计算机。

三、实验原理1、时序逻辑电路的定义数字逻辑电路可分为两类:组合逻辑电路和时序逻辑电路。

组合逻辑电路中不包含记忆单元(触发器、锁存器等),主要由逻辑门电路构成,电路在任何时刻的输出只和当前时刻的输入有关,而与以前的输入无关。

时序电路则是指包含了记忆单元的逻辑电路,其输出不仅跟当前电路的输入有关,还和输入信号作用前电路的状态有关。

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

同步时序电路的设计过程:(1)根据给定的逻辑功能建立原始状态图和原始状态表。

①明确电路的输入条件和相应的输出要求,分别确定输入变量和输出变量的数目和符号;②找出所有可能的状态和状态转换之间的关系;③根据原始状态图建立原始状态表;(2)状态化简---求出最简状态图。

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

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

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

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

根据状态数确定触发器的个数,nn M 221-≤∠(M 为状态数;n 为触发器的个数)。

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

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

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

3、时序逻辑电路的特点及设计时的注意事项①时序逻辑电路与组合逻辑电路相比,输出会延时一个时钟周期。

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

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

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

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

四、实验内容:1、 带异步清零和异步置数的十进制加法计数器设计。

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

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

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

图2.3 计数器仿真波形2、 数控分频器的设计。

要求:将10KHz 时钟信号分频,分别输出10Hz 、1kHz 、1250Hz 时钟信号,如图2.2所示。

分频的原理与计数器差不多,需要定义一个信号量来控制计数范围为分频数,另外控制在在一个计数周期内输出一段低电平“0”和另一段高电平“1”。

分频器部分源码如图2.4a 、图2.4b 所示:图2.1十进制加法计数器图2.2数控分频器用信号量Count1000控制计数范围为0~999,即一个计数周期为1000次。

前一半计数周期(0~499)输出0,后一半计数周期输出1,即占空比为50%;也可以调整占空比为其他值。

图2.4a 数控分频器VHDL代码如果用于计数的信号量定义为“std_logic_vector”类型的。

如“Count10”,也可以将其最高位作为分频后的时钟输出:即使用语句“Clk_1kHz<=Count10(3);”,此时输出时钟信号占空比是多少?是否可以改变?。

如果分频数为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个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。

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

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

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

如图2.6的简单代码即可实现:图2.6 八位数码管扫描代码SEL[2..0]的值即可确定数码管的位置,如要将“BCD码加法器”或“4位硬件乘法器”的结果用数码管显示,可以再设计一个组合逻辑电路,用于选通数码管,使各个数字或符号显示在对应位置,如图2.7所示。

图2.7 八位数码管选通注:图2.7的代码使用组合逻辑电路实现,如果用时序逻辑电路实现,则前几句应改为:为什么这里的CASE语句判断的是“SEL+1”?为了显示“×”号、“=”号、“消隐”,将BCD码扩展一位为5位,最高位为0即“00000”~“01111”表示原来的十六进制编码0~F,最高位为1的编码用于显示特殊字符,如“10000”用于“=”号,“10001”用于“×”号,“11111”表示“消隐”,译码模块代码做相应改变如图2.8所示:图2.8 扩展一位BCD码输入后的译码器代码③层次化电路设计及元件例化:a)任何一个电路都可以看作是一个“元件”,我们只需要关心它的功能,而不需要了解它的具体实现。

b) “元件”与其它电路的连接可以通过端口映射实现。

c) “元件”使用,可以通过“元件例化”实现,VHDL语言有专门的“元件例化”和“端口映射”语句。

操作步骤请参考“元件例化和调用的操作步骤”部分。

④将计数器、“BCD译码器”功能组合在一起,实现在数码管上显示计数结果,下载到实验箱进行测试。

如图2.9所示(图中div_1000是千分频器,因为直接使用1Hz时钟有时不太稳定):图2.9 在数码管上显示计数结果⑤将“BCD码加法器”(或“4位硬件乘法器”)、“BCD译码器”、“8位七段数码管扫描电路”的功能组合在一起,实现在数码管上显示结果,下载到实验箱进行测试。

如图2.10所示(注:图中“sel_time”模块和“deled”的BCD码扩展到5位,以显示“×”号、“=”号等特殊符号):图2.10 在数码管上显示乘法器结果4、4位硬件乘法器的流水线设计流水线结构因其高速性在很多数字电路中得到了广泛的应用,目前的DSP、ARM等器件也是基于流水线结构的。

本实验就是在掌握“4位硬件乘法器”实验的基础上,将其改为流水线结构,从而提高其运算速度。

流水线可以简单的理解为在时钟的作用下,每一拍完成一个简单运算。

需要注意的是,由于内部的运算都是在时钟作用下进行,所以涉及到运算的中间变量都必须定义成寄存器结构的。

另外对于一次运算可能要经过多个时钟周期才能得到结果,但是如果对于批量的数据,就可以认为是单周期得到运算结果。

所以流水线结构的乘法器在对于单个运算时它的高速性并不能得以体现,只有在批量数据运算过程中才能体现出其高速性。

本实验中的流水线乘法器针对无符号型的数据(对于有符号型的数据还必须进行符号扩张),大体上可以分为四拍,第一拍:取数据并作适当整理;第二拍:位乘法;第三步:加法第一步;第四拍:加法第二步,得到运算结果。

流水线结构的乘法器可以用下图2.11来简要表示:CLOCKSt ep1 St ep2 St ep3 St ep4L o adL o adL o adL o adXXXX+(1)+(1)+(1)+(1)+(2)+(2)+(2)+(2)图2.11 流水线结构乘法器示意图乘法器在时钟信号Clock的作用下,第一个时钟信号上升沿的时候第一拍先取数据,第二个时钟上升沿时候第一拍对取得的数据进行位乘,同时第二拍开始取数据,第三个时钟上升沿的时候第一拍进行第一步加法运算,第二拍进行位乘,同时第三拍开始取数据,第四个时钟上升沿的时候第一拍完成第二次加法并送出结果,第二拍则完成第一步加法,第三拍完成位乘,同时第四拍完成取数据,再往后走,会每一个时钟周期送出一个运算结果。

这就是为什么流水线结构的乘法器在单次运算的过程中它的高速性不能得到体现原因。

图2.12是流水线结构乘法器的主要源码,其中应定义Temp0、Temp1、Temp2、Temp3、Temp01、Temp23几个信号量存储中间结果。

图2.12 流水线结构乘法器的主要源码图2.13的仿真波形中,每个时钟周期改变一次输入,可以看到每个时钟周期出来一个输出结果,输出结果相比A 、B 延后3个时钟周期。

图2.13 流水线结构乘法器的仿真波形可以按图2.14连接电路测试,其中数码管扫描用1kHz 时钟,乘法器用1Hz 时钟,并用一个LED 指示灯显示时钟节拍;每一个时钟节拍改变一次输入,注意观察输出节拍。

图中“sel_time ”模块和“deled ”的BCD 码扩展到5位,以显示“×”号、“=”号等特殊符号。

B 与A(0)位乘的结果B 与A(1)位乘的结果B 与A(2)位乘的结果 B 与A(3)位乘的结果Temp01、Temp23比Temp0、Temp1、Temp2、Temp3延时一个时钟周期。

第一个时钟节拍后输出, Temp0、Temp1、Temp2、Temp3比A 和B 延时一个时钟周期m_Result 比Temp01、Temp23延时一个时钟周期,比A 和B 延时三个时钟周期,才能得到输出结果。

图2.14 流水线结构乘法器的测试电路5、4位硬件乘法器的状态机设计流水线乘法器速度快,但是占用资源较多,特别是当乘数的位数很大时。

如果乘法操作比较少,或对速度要求不高的应用,可以采用串行方式实现乘法器。

下面是用状态机实现串行乘法器的实例:①状态机可以模拟计算机CPU的运行机制,完成非常复杂的控制逻辑。

状态机有多种结构,有关状态机的知识请参考相关书籍,本例采用单进程状态机设计,比较易于消除毛刺,但输出结果会延时一个时钟周期。

②图2.15是本设计的状态图,一共4个状态,S0态接收输入,S1态将当前位加到m_result,S2态对A、B进行移位操作,S3态输出结果。

状态转换条件在后面的源码中讲述。

图2.15 串行乘法器的状态转换图③图2.17是状态机的VHDL实现源码,可以看到整个设计只用到一个8位加法电路,而“4位流水线乘法器”需要3个,当乘法位数很大时,串行加法器可以节约更多的硬件资源,但需要的时钟周期数更多。

相关文档
最新文档