您的当前位置:首页正文

基于VHDL的四路智力抢答器完整版

2020-04-18 来源:好走旅游网
通 信 工 程 专 业 课 程 设 计 Ⅱ

1 绪 论

1.1 EDA技术的发展

人类社会已进入到高度发达的信息化社会,信息社会的发展离不开电子产品的进步。现代电子产品在性能提高、复杂度增大的同时,价格却一直呈下降趋势,而且产品更新换代的步伐也越来越快,实现这种进步的主要原因就是生产制造技术和电子设计技术的发展。前者以微细加工技术为代表,目前已进展到深亚微米阶段,可以在几平方厘米的芯片上集成数千万个晶体管;后者的核心就是EDA技术。EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作:IC设计,电子电路设计以及PCB设计。没有EDA技术的支持,想要完成上述超大规模集成电路的设计制造是不可想象的,但是面对当今飞速发展的电子产品市场,设计师需要更加实用、快捷的EDA工具,使用统一的集体化设计黄精,改变传统的设计思路,将精力集中到设计构想、方案比较和寻找优化设计等方面,需要以最快的速度,开发出性能优良、质量一流的电子产品,对EDA技术提出了更高的要求。未来的EDA技术将在仿真、时序分析、集成电路自动测试、高速印刷版设计及开发操作平台的扩展等方面取得新的突破,向着功能强大、简单易学、使用方便的方向发展。

1.2 EDA技术的设计优势

传统的设计方法采用自底向上的设计方法,一般先按电子系统的具体功能要求进行功能划分,然后对每个子模块画出真值表,用卡诺图进行手工逻辑简化,写出布尔表达式,画出相应的逻辑线路图,再据此选择元器件,设计电路板,最后进行实测与调试,由于无法进行硬件系统功能仿真,如果某一过程存在错误,查找和修改十分不便,所以这是一种费时、费力的设计方法,而现代电子设计技术(EDA)是自顶向下且先进高效的。在电子产品的设计理念、设计方式、系统硬件构成、设计的重用性、知识产权、设计周期等方面,EDA技术具有一定的优势。所以本次设计的抢答器抛弃了传统的设计方法,选择了采用主流的EDA技术进行设计。

- 1 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

1.3 智能抢答器的市场现状

智力竞赛是“快乐学习”这一教育模式的典范,它采用在规定的一段时间内抢答和必答等方式,在给人们的生活带来乐趣的同时,也使参与者和观众在愉悦的氛围中学到一些科学知识和生活知识,因此很受大家的喜欢。但是,在这类比赛中,对于谁先谁后抢答,在何时抢答,如何计算答题时间等等问题,若是仅凭主持人的主观判断,就很容易出现误判。所以,我们就需要一种具备自动锁存,置位,清零等功能智能抢答器来解决这些问题。

智能竞赛抢答器是一种应用十分广泛的设备,在各种竞赛、抢答场合中,它都能客观、迅速地判断出最先获得发言权的选手。早期的抢答器只是由三个三极管、可控硅、发光管等器件组成的,能通过发光管的指示辨认出选手号码。现在大多数智能抢答器都是由单片机或数字集成电路构成的,并且新增了许多功能,如选手号码显示,抢按前或抢按后的计时,选手得分显示等功能。

- 2 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

2方案设计与论证

2.1抢答器系统设计要求

一般来说,设计一台智能抢答器,必须能够准确判断出第一位抢答者,并且通过数显、蜂鸣这些途径能让人们很容易得知谁是抢答成功者,并设置一定的回答限制时间,让抢答者在规定时间内答题,主持人根据答题结果评出最终赢家。所以我们在设计智能抢答器的模块需要满足鉴别、计时、数显、报警等功能,具体设计要求如下: (1)抢答器可容纳四组选手,并为每组选手设置一个按钮供抢答者使用;为主持人设置一个控制按钮,用来控制系统清零(组别显示数码管灭灯)和抢答开始。 (2)电路具有对第一抢答信号的锁存、鉴别和显示等功能。在主持人将系统复位并发出抢答指令后,蜂鸣器提示抢答开始,计时显示器显示初始时间并开始倒计时,若参赛选手按下抢答按钮,则该组别的信号立即被锁存,并在组别显示器上显示该组别,同时扬声器也给出音响提示,此时,电路具备自锁功能,使其他抢答按钮不起作用。 (3)如果无人抢答,计时器倒计时到零,蜂鸣器有抢答无效提示,主持人可以按复位键,开始新一轮的抢答。

(4)抢答器具有限时抢答的功能,且一次抢答的时间由主持人设定,本抢答时间设定为99秒。当主持人启动开始键后,要求计时器采用倒计时,同时倒计时到0秒时扬声器会发出声响提示。

(5)参赛选手在设定的时间内抢答,则抢答有效,定时器停止工作,根据抢答结果由数码管显示选手的组别,并一直保持到主持人将系统清零为止。

2.2 方案论证与选择

2.2.1 方案一

我们的第一种方案是考虑用“单片机”来实现其功能。在芯片选型方面可以考虑选择手头就有的STC89C52单片机作为控制器。STC89C52单片机的优点在于其价格便宜,购买方便;我们组员均有C语言基础,可使用C语言编程,移植性较好。缺点在于其系统设计方法为传统设计方法,相对落后;芯片引脚数量仅有40个,容量小,通用IO口少,不适合本设计规模,处理速度慢;个别组员没有该芯片的使用经验,预计

- 3 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

团队之间交流思想不太方便。 2.2.2 方案二

本项目也可以用EDA技术来实现其功能。在芯片选型方面可以考虑选择CPLD芯片作为微控制器。EDA自顶向下的设计方法比较先进;实验室有齐全的开发套件;组员们均系统学习过EDA基础课程,都有VHDL编程和实验经验,团队之间交流将会比较方便;芯片容量大,处理速度极快,管脚数目多达84个,IO口数目充足,适合本设计的规模。缺点在于设备相对昂贵,使用不当容易烧毁微处理器。 2.2.3 方案的选择

我们在比较了两种方案的优缺点基础上,结合自身实际情况,认为方案二更适合于抢答器的设计,因此我们采用方案二。

2.3系统总体设计思想

本设计为四路智能抢答器,所以这种抢答器要求有四路不同组别的抢答输入信号,并能识别最先抢答的信号,抢答器共有三个输出显示,选手代号、计数器的个位和十位,它们输出全部为BCD码输出,这样便于和显示译码器连接。当主持人按下控制键、选手按下抢答键或倒计时到时蜂鸣器短暂响起。对回答问题所用的时间进行计时、显示、超时报警、预置答题时间,同时该系统还应有复位、倒计时启动功能。

依据系统的设计要求可知,系统的输入信号有:四组的抢答按钮A、B、C、D。系统清零信号QDJB,系统时钟信号CLK,计分复位端JFRST,计时预置数控制端LDN,计时使能端EN,计时预置数调整按钮TA、TB。系统的输入信号有:四个组抢答成功与否的指示控制信号输出口LEDA,LEDB,LEDC,LEDD,四组抢答时的计时控制显示信号若干,抢答成功组别显示的控制信号若干。本系统应具有的功能有:第一抢答信号的鉴别和锁存功能;抢答计时功能;组别显示功能;蜂鸣器提示功能。根据以上的分析我们可以将本设计的整个系统分为四个模块:抢答鉴别模块QDJB;抢答计时模块JSQ;数码显示模块YMQ;报警模块BELL。对于需要显示的信息,需要增加或外接译码器,进行显示译码。抢答开始时主持人按下抢答复位键(QDRST),系统进入抢答状态,计时模块输出初始信号给数码显示模块并显示出初始值。当某参赛组抢先将抢答键按下时,系统将其余三路抢答信号封锁,同时扬声器发出声音提示,组别显示

- 4 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

模块送出信号给数码显示模块,从而显示出该抢答成功组台号,并一直保持到下一轮主持人将系统清零为止。主持人对抢答结果进行确认,随后,计时模块送出倒计时计数允许信号,开始回答问题,计时显示器则从初始值开始以计时。计时至0时,停止计时,扬声器发出超时报警信号,以中止未回答完问题。当主持人给出倒计时停止信号时,扬声器停止鸣叫。整个系统的组成框图如下图:

数码管显示电路模块 蜂鸣器 模块 组别显示 电路模块 声响控制 电路模块 抢答鉴别电路模块 计时 电路模块 A B C D RST CLK 图2-1系统的总体框图

- 5 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

3 单元模块电路的设计和实现

根据对抢答器的功能要求,把要设计的系统划分为四个功能模块:抢答信号鉴别模块、计时模块、数码显示模块和扬声器控制电路,具体的说,显示模块又包含最先抢答的组别显示电路、计时值显示电路。

3.1抢答鉴别模块的设计与实现

3.1.1 设计原理

本模块主要是对参与抢答的四组谁先抢答做出判断,将抢答成功者的组别号进行显示,同时,与选手对应的LED灯会亮起,蜂鸣器发出2-3秒鸣叫,表明抢答成功。用A、B、C、D分别代表参赛的四组,A1、B1、C1、D1则代表与之对应的各组的抢答按钮显示端,系统清零信号CLR,组别显示端G[3..0],则抢答鉴别模块的元件图如下图所示:

图3-1 鉴别模块元件框图

抢答开始后,当有小组按下抢答键,抢答信号判定电路QDJB通过缓冲输出信号的反馈将本参赛组抢先按下按键的信号锁存,并且以异步清零的方式将其他参赛组的锁存器清零,组别显示和计时会保存到主持人对系统进行清零操作时为止。A、B、C、D四组抢答从理论上来说,应该有16种可能情况,但是由于时钟信号的频率很高而且是在时钟信号上升沿的状况下才做出的鉴别,所以在这里四组同时抢答成功的可能性非常小,因此可以只设计四种情况,即A、B、C、D分别为0001、0010、0100、1000,这样使电路的设计得以简化。

- 6 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

3.1.2 功能仿真

利用MAX+plusII进行编译,综合,仿真,时序图如图3-1所示:

图3-1 抢答鉴别模块仿真时序图

如仿真图所示,当CLR=1时系统复位,使组别显示信号G=0000,各组的指示灯信号A1=0,B1=0,C1=0,D1=0;当CLR=0,即低电平有效,使其进入抢答鉴别状态,到CLK的上升沿到来时,以D组抢答成功为例,当输入信号为A=0,B=0,C=0,D=1,输出信号G=1000,D1=1,即为鉴别出D组抢答成功,同时屏蔽其他组的输入信号,以免发生错误。同理其他组别抢答成功也是这样的鉴别过程。通过分析,仿真完全符合预期所要达到的结果。

3.2 计时模块的设计与实现

3.2.1 设计原理

在计时模块的设计中设置了固定和可调的两个时间,固定时间为99秒,可调时间通过预置键SET来调节,计数时两个数码管QA,QB显示剩余时间,分别表示两位倒计时的个位和十位。当抢答鉴别模块成功判别出最先按下抢答按钮的参赛组后,在成功鉴别出哪组最先抢答后,主持人按下计时信号,则进入计时状态。计时模块开始工作从规定值开始以秒计时,计时至0秒时停止,此时蜂鸣器发出报警信号,提醒答题已终止。该系统输入信号有:系统清零信号CLR,计时预置控制端LDN,计时使能端EN,系统时钟信号CLK,计时预置数据调整按钮TA、TB。系统输出信号有:倒计时输出端QA[3..0]、QB[3..0]、蜂鸣器BELL。则计时模块的元件图如下图所示:

- 7 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

图3-2计时模块的元件图 3.2.2 计时模块的仿真

利用MAX+plusII进行编译,综合,仿真,时序图如图3-3所示:

图3-3 计时器模块仿真时序图

如仿真图所示,当计时复位信号CLR=1时,模块输出信号QA=0000 ,QB=0000。当预置数控制信号LDN=1可通过TA来调整QA,TA来一次高电平,则QA的数值就加1;用TB来调整QB,通过这两个调整信号可调整参赛者答题所需要的时间。在CLR=0,LDN=0,EN=1时,通过时钟信号CLK的上升沿来进行99秒到计时。通过分析,仿真完全符合预期所要达到的结果。

3.3 译码显示模块的设计与实现

3.3.1 设计原理

译码器的设计主要任务是显示组别和时间的工作状态,其主要原理是四位二进制BCD编码转换成七段二进制数字输出在数码管上,使观众能够更直观的看到比赛进程。译码显示模块的元件图如下图所示:

- 8 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

图3-4 译码显示模块的元件图

译码器的译码对照表3-1如下所示:

表3-1 译码器的译码对照表

显示的数字/字母 0 1 BCD编码 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 XXXX 七段共阳数码管2进制 1000000 1111001 0100100 0110000 0011001 0010010 0000010 1111000 0000000 0010000 1111111

2

3 4 5 6 7 8 9 X 在程序中只考虑0000-1001(即0-9)的情况,将其转化为相应的七段显示器的码字,其他情况不予考虑。 3.3.2 功能仿真

译码器的设计主要任务是将组别和时间的工作状态,翻译成3个信号数码管的工作状态。译码器的输入是由16进制数显示的。

利用MAX+plusII进行编译,综合,仿真,时序图如图3-5所示:

- 9 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

图3-5 译码器模块仿真时序图

如仿真图所示,AIN4为数字0-9时,DOUT7输出对应于译码对照表,AIN4为数字10-15时,DOUT7输出1111111,通过分析,仿真完全符合预期所要达到的结果。

3.4 报警模块的设计与实现

3.4.1 设计原理

报警器的设计主要是来提醒观众倒计时的开始和结束,哪位选手进行了抢答,在这几种情况下蜂鸣器会发出2-3秒的鸣叫,便于更好的判别比赛的情况。此模块和抢答鉴别模块、计时模块、蜂鸣器相连,用以实现其功能。则报警模块的元件图如下图所示:

图3-6 报警模块的元件图

该系统输入信号有系统时钟信号CLK,组别输入信号CHOS,输出信号SPEAK,用以连接蜂鸣器来进行报警。 3.4.2 功能仿真

利用MAX+plusII进行编译,综合,仿真,时序图如图3-7所示:

图3-7 报警器模块仿真时序图

- 10 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

如仿真图所示,当CHOS=0001即A组抢答时,蜂鸣器SPEAK=1进行2-3秒的鸣叫,通过分析,仿真完全符合预期所要达到的结果。

3.5抢答器系统的设计与实现

3.5.1 总体设计原理

本设计通过元器件图示连线的方法来实现,这种连线方法思路清晰可见,而且用的时候很简单方便,出现错误也很好检查,又由于本设计连线比较繁多复杂,所以采用总线模式连线,这样大大较少了由于连线带来的失误,便于很明了的看出各个模块之间的连接。以下为总体原理图:

图3-8 顶层元件图

本设计中,抢答器组别信号A、B、C、D为高电平时,其功能为有效状态。同样,系统清零信号CLR、预置及倒计时控制信号LDN,亦为高电平有效。当CLR有效时,抢答信号判别电路清零,为判别优先抢答信号做出准备。当计时使能端EN为低电平,预置时间设置信号LDN=1时,通过计时预置数据调整按钮TA、TB进行预置数。当计时使能端EN为高电平,有系统时钟信号CLK时,进行99秒倒计时。输入时钟CLK一方面作为扬声器控制电路的输入信号,另一方面作为抢答信号判别电路中锁存器时钟,为使扬声器音调较为悦耳,且是抢答判别电路有较高的准确度(对信号判别的最大误差是一个时钟周期),CLK信号频率高低应适中,可取500Hz-1KHz;同时CLK信号经过分

- 11 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

频后向倒计时电路提供信号。 3.5.2 功能仿真

利用MAX+plusII进行编译,综合,仿真,时序图如图3-9所示:

图3-9 总体仿真时序图

如图3-9所示,当CLR有效时,抢答信号判别电路清零,为判别优先抢答信号做出准备。当计时使能端EN为低电平,预置时间设置信号LDN=1时,通过计时预置数据调整按钮TA、TB进行预置数。当计时使能端EN为高电平,有系统时钟信号CLK时,进行99秒倒计时。输入时钟CLK一方面作为扬声器控制电路的输入信号,另一方面作为抢答信号判别电路中锁存器时钟,为使扬声器音调较为悦耳,且是抢答判别电路有较高的准确度,CLK信号频率高低应适中,可取500Hz-1KHz;同时CLK信号经过分频后向倒计时电路提供信号。通过分析,仿真完全符合预期所要达到的结果。

- 12 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

4硬件的测试和装调

4.1 程序的下载

在对总体原理图进行编译、综合,仿真后,经过检查排除仿真图中存在的问题,并确保功能符合预期设计目的后,即可将其下载到EDA试验开发板的CPLD芯片 EPM7128SLC84-15芯片来测试抢答器的系统功能,下载完成截图如下:

图4-1 程序下载完成图

4.2 系统安装与测试

程序的最终显示结果验证了设计思路的正确性,为了进一步从视觉上来观察实验现象,还需将设计编程下载到选定的目标器件中做进一步的硬件测试,以便最终了解设计的正确性。本次课程设计下载的目标器件为MAX7000S EPM7128SLC84-15。将各个模块按原理图方式连接在一块,构成一个完整的数字竞赛抢答器原理图模块结构。

测试时,首先将指拨开关全部拨到低电平,按下“QDRET”键,观察数码管,启动状态时选手编号、倒计时都显示0。然后拨动指拨开关“JSRET”, 启动99秒定时抢答,此时计时数码管上显示“99”,蜂鸣器发出鸣叫。再拨动指拨开关“EN”,99秒倒计时开始。在倒计时过程中拨动指拨开关PLAYER1,组别显示数码管上显示“1”,计分数码管由之前的倒计时回归到“00”,与此同时,与1号选手对应的LED灯闪了一下,并且

- 13 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

蜂鸣器发出了2-3秒的鸣叫,说明1号选手抢答成功。如果拨动其他组对应的指拨开关PLAYER2、 PLAYER3„数码管上显示数据不变,说明抢答电路已锁。本轮抢答结束后,按下“QDRET”键,数码管上显示都为0,然后按照步骤1依次往下,开始进行下一轮抢答。如果99秒倒计时过程中无人按下抢答键,则在倒计时为“00”时蜂鸣器发出鸣叫,表明本轮过程无人抢答。

- 14 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

结 论

按照任务要求,我们设计出的抢答器具备抢答鉴别、倒计时、数码管显示、报警提示等多种功能。本抢答器能够准确判断出第一位抢答者,并且通过数显、蜂鸣这些途径能让人们很容易得知谁是抢答成功者。根据不同比赛的需要,主持人可以预设一定的回答限制时间,让抢答者在规定时间内答题,主持人根据答题结果评出最终赢家。

设计制作过程中遇到的问题及解决方案: 1. VHDL语法使用不规范:

当我们编写软件程序的时,遇到了编译错误。细心阅读max+plus2错误提示和所编写的程序后发现是因为VHDL语法使用错误。最后经过翻阅EDA课本,熟悉相关语法后将其改正。

2. 抢答器项目设计规模过大,与现有CPLD芯片不匹配:

按照我们最初的设计方案来设计的话,抢答器还可以实现计分功能。但是当我们编写好程序后,一经编译就会出现工程与器件无法适配的问题。查找原因后发现是因为数码管显示分数功能占用芯片引脚过多,芯片无法匹配。最终我们去掉了计分功能,从而适配成功。

3. 引脚锁定不完整,最终编译无法通过:

处理了之前出现的几个问题后,在最后编译时未通过。细致查看了错误提示,发现是个别管脚未锁定的原因。我们最终把各个管脚锁定号码一一检查了一遍,从而通过了编译。

本设计有以下几个可以改进的地方:

1.预使本抢答器具有计分功能,可以使用引脚更多的CPLD芯片,即使用更多的数码管来实时显示每个抢答选手的得分情况。

2. 现有的声响提示模块发出的提示声音比较单调,不能满足现在的抢答比赛要求。通过适当添加几种语音芯片,就可以让蜂鸣器在不同的情况下发出美妙的声响,能为比赛增添不少乐趣。

3.在现有设计基础上使用无线电或红外技术,还可以使本项目升级为无线智能抢答器。

- 15 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

致 谢

在本次课程设计中经过各位同学的帮助和我的负责老师郑老师的耐心指导和热情帮助,以及图书馆大量的资料和学校提供的必要器材下才顺利完成的。从课题的选择到项目的最终完成,郑老师都始终给予我细心的指导和不懈的支持,以及我们组员的共同努力。同时实验室的开放也为同学们设计提供了实习场地。在此对侯宝生老师,郑争兵老师示忠心的感谢,对系上为我们提供这次机会表示感谢,这些不仅让我学到了很多知识,锻炼了自身的操作能力,更为以后的学习工作打下了良好的基础。

- 16 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

参考文献

[1]潘松,黄继业. EDA技术实用教程.第二版.[M].北京:科学出版社,2005. [2]龚尚福.微机原理与接口技术.第二版. [M] 西安:西安电子科技大学出版社,2008. [3]边计年,薛宏熙. 用VHDL设计电子线路. 清华大学出版社,2000

[4] 李伟英,谢完成.基于EDA技术的抢答器的设计与实现【J】.科学技术与实现, 2008.8(11).

[5]谭会生,瞿遂存.EDA技术综合应用实例与分析【M】.西安:西安电子科技大学出版社, 2004.

[6] VHDL程序设计http://wenku.baidu.com/view/e9ee4dfc700abb68a982fbe8.html [7] 基于CPLD的无线遥控抢答器设计

http://wenku.baidu.com/view/a2be28e8b8f67c1cfad6b850.html

- 17 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

附 录

附录A 各单元模块VHDL源程序

1、抢答鉴别模块VHDL源程序(QDJB.VHD)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY QDJB IS

PORT (CLR: IN STD_LOGIC; A, B, C, D: IN STD_LOGIC; A1, B1, C1, D1: OUT STD_LOGIC;

G: OUT STD_LOGIC_VECTOR (3 DOWNTO 0)); END QDJB;

ARCHITECTURE ART OF QDJB IS

CONSTANT W1: STD_LOGIC_VECTOR:=\"0001\"; CONSTANT W2: STD_LOGIC_VECTOR:=\"0010\"; CONSTANT W3: STD_LOGIC_VECTOR:=\"0100\"; CONSTANT W4: STD_LOGIC_VECTOR:=\"1000\"; BEGIN

PROCESS (CLR, A, B, C, D) VARIABLE LOCK : STD_LOGIC; BEGIN

IF (CLR='1') THEN G<=\"0000\";LOCK:='1';A1<='1'; B1<='1'; C1<='1'; D1<='1';

ELSIF (LOCK='1') THEN

IF(A='1'AND B='0'AND C='0'AND D='0') THEN

A1<='0'; B1<='1'; C1<='1'; D1<='1'; G<=W1;LOCK:='0'; ELSIF (A='0'AND B='1'AND C='0'AND D='0') THEN

A1<='1'; B1<='0'; C1<='1'; D1<='1'; G<=W2;LOCK:='0'; ELSIF (A='0'AND B='0'AND C='1'AND D='0') THEN

- 18 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

A1<='1'; B1 <='1'; C1<='0'; D1<='1'; G<=W3;LOCK:='0'; ELSIF (A='0'AND B='0'AND C='0'AND D='1') THEN

A1<='1'; B1 <='1'; C1<='1'; D1<='0'; G<=W4;LOCK:='0'; END IF; END IF; END PROCESS; END ART;

2、抢答计时模块VHDL源程序(JSQ.VHD) LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JSQ IS

PORT (CLR, LDN, EN, CLK: IN STD_LOGIC; TA, TB: IN STD_LOGIC; FLAG: IN STD_LOGIC; BELL: OUT STD_LOGIC;

QA: OUT STD_LOGIC_VECTOR (3 DOWNTO 0); QB: OUT STD_LOGIC_VECTOR (3 DOWNTO 0)); END JSQ;

ARCHITECTURE ART OF JSQ IS

SIGNAL DA: STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL DB: STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL GWYUZHI: STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL SWYUZHI: STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL N:INTEGER RANGE 0 TO 10; BEGIN

PROCESS (CLK,LDN,EN,CLR,TA,TB,FLAG)

VARIABLE TMPA: STD_LOGIC_VECTOR (3 DOWNTO 0); VARIABLE TMPB: STD_LOGIC_VECTOR (3 DOWNTO 0);

- 19 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

VARIABLE STAY,FINISH: STD_LOGIC; --倒计时停止标志 BEGIN

IF CLR='1' THEN TMPA:=\"1001\"; TMPB:=\"1001\"; SWYUZHI<=\"0000\"; GWYUZHI<=\"0000\";DA<=\"1001\"; DB<=\"1001\";

ELSIF CLK'EVENT AND CLK='1' THEN IF LDN='1' THEN IF TA='1' THEN

GWYUZHI<=GWYUZHI+\"0001\" ;BELL<='0'; IF GWYUZHI=\"1010\" THEN GWYUZHI<=\"0000\"; END IF; END IF; IF TB='1' THEN

SWYUZHI<=SWYUZHI+\"0001\";BELL<='0'; IF SWYUZHI=\"1010\" THEN SWYUZHI<=\"0000\"; END IF; END IF;

TMPA:=GWYUZHI;TMPB:=SWYUZHI;BELL<='0';STAY:='0'; ELSIF EN='1' AND STAY='0' THEN IF FLAG='1' THEN

TMPA:=\"0000\";TMPB:=\"0000\"; END IF;

IF TMPA=\"0000\" THEN TMPA:=\"1001\"; IF TMPB=\"0000\" THEN

STAY:='1';FINISH:='1';N<=N+1; IF SWYUZHI=\"0000\" THEN TMPB:=\"1001\";BELL<='1';

- 20 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

ELSE TMPB:=SWYUZHI;

TMPA:=GWYUZHI;BELL<='1'; END IF;

ELSE TMPB:=TMPB-\"0001\";BELL<='0'; END IF;

ELSE TMPA:=TMPA-\"0001\"; BELL<='0';

END IF;

ELSIF STAY='1' AND FINISH='1' THEN N<=N+1; IF N=4 THEN

BELL<='0';N<=0;FINISH:='0'; END IF; ELSIF EN='0' THEN STAY:='0'; END IF; END IF;

QA<=TMPA; QB<=TMPB; END PROCESS; END ART;

3、译码器VHDL源程序(YMQ.VHD) LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY YMQ IS

PORT (AIN4: IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT7: OUT STD_LOGIC_VECTOR (6 DOWNTO 0)); END YMQ;

ARCHITECTURE ART OF YMQ IS BEGIN

- 21 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

PROCESS (AIN4) BEGIN CASE AIN4 IS

WHEN \"0000\"=>DOUT7<=\"1000000\"; --0 WHEN \"0001\"=>DOUT7<=\"1111001\"; --1 WHEN \"0010\"=>DOUT7<=\"0100100\"; --2 WHEN \"0011\"=>DOUT7<=\"1111001\"; --3 WHEN \"0100\"=>DOUT7<=\"0110000\"; --4 WHEN \"0101\"=>DOUT7<=\"0011001\"; --5 WHEN \"0110\"=>DOUT7<=\"0000010\"; --6 WHEN \"0111\"=>DOUT7<=\"1111000\"; --7 WHEN \"1000\"=>DOUT7<=\"0000000\"; --8 WHEN \"1001\"=>DOUT7<=\"0010000\"; --9 WHEN OTHERS=>DOUT7<=\"1111111\"; END CASE; END PROCESS; END ART;

4、报警器VHDL源程序(BELL.VHD) LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY BELL IS PORT(CLK:IN STD_LOGIC; SPEAK:OUT STD_LOGIC;

CHOS: IN STD_LOGIC_VECTOR (3 DOWNTO 0)); END BELL;

ARCHITECTURE BEHAVE OF BELL IS SIGNAL N:INTEGER RANGE 0 TO 20; SIGNAL SAVE: STD_LOGIC;

- 22 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

BEGIN

PROCESS(CLK,CHOS) BEGIN

IF CHOS=\"0000\" THEN N<=0; SAVE<='0';

ELSIF CLK'EVENT AND CLK='1' THEN IF N<5 THEN CASE CHOS IS

WHEN \"1000\" => SAVE<='1';N<=N+1; WHEN \"0100\" => SAVE<='1';N<=N+1; WHEN \"0010\" => SAVE<='1';N<=N+1; WHEN \"0001\" => SAVE<='1';N<=N+1; WHEN OTHERS => NULL; END CASE; ELSE

SAVE<='0'; END IF; END IF; SPEAK<=SAVE; END PROCESS; END BEHAVE;

- 23 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

附录B 总体电路图

- 24 -

通 信 工 程 专 业 课 程 设 计 Ⅱ

附录C 器件清单

序号 1 2 3 4 5 6 7 8

名称 7段共阳极数码管 轻触开关 蜂鸣器 EDA开发板 并行下载线 电源 面包板 导线 数量 3个 2个 1个 1台 1条 1台 1个 1卷

- 25 -

因篇幅问题不能全部显示,请点此查看更多更全内容