资源描述
课 程 设 计
课 题 数字式竞赛抢答器
学 院 电气与信息工程学院
摘 要
当今的社会竞争日益激烈,选拔人才,评选优胜,知识竞赛之类的活动愈加频繁,那么也就必然离不开抢答器。而现在的抢答器有着数字化,智能化的方向发展,这就必然提高了抢答器的成本。鉴于现在小规模的知识竞赛越来越多,操作简单,经济实用的小型抢答器必将大有市场。
本课程设计设计的八路数字式抢答器由抢答鉴别模块、抢答计时模块、计分模块、译码显示模块组成。基于FPGA,经过程序设计、调试、仿真、下载和软硬件联合调试等工作,实现了抢答功能。
本方案具有的优点是:随着EDA技术的高速发展,电子系统的设计技术和工具发生了深刻的变化,大规模可编程逻辑器件CPLD/FPGA的出现,给设计人员带来了诸多方便。利用它进行产品开发,不仅修改方便、开发周期短、仿真方便、可靠性高,而且具有完全的知识产权。不足之处是:成本比基于基本IC器件开发的多路智力抢答器高,要有较高的软件开发平台,并要求初学者能熟练掌握开发平台的使用。
- 41 -
一、我的设计实现的功能:
基本功能:
1. 八路智力抢答器,同时供8个选手参赛,编号分别为1到8。每位选手用一个答题按钮和LED灯,选手按下时其灯亮。
2. 给主持人一个控制开关,实现系统的清零和抢答的开始。
3. 具有数据锁存和显示功能。抢答开始后,如果有选手按下了抢答按钮,其编号立即锁存并显示在LCD液晶显示屏上。此外,禁止其他选手再次抢答。选手的编号一直保存直到主持人清除。
扩展功能:
1. 具有提前抢答的鉴别功能,在主持人抢答使能键没按下之前的抢答会被判无效并且蜂鸣器响。
2. 具有定时抢答功能,可由主持人设定抢答时间。当抢答开始后。定时其开始倒计时,并显示在LCD上。
3. 具有计分功能,初始每位选手100分,以后按选手答题情况可以加分和减分,并将每位选手的得分在LCD上显示。
二、设计原理框图:
八路智能抢答器系统可分为三个大的功能模块,抢答鉴别模块,计时模块和译码显示模块。
它们之间的控制关系如图1所示:
抢答按钮
组别显示
控制电路
分数显示
定时
第一信号鉴别
计分电路
计时电路
主持人按钮
时间显示
时间设定
图1 抢答器基本原理
当主持人设置答题时间后,启动开始抢答按键时,抢答鉴别模块进入工作状态,选手可以进行抢答,有选手抢答,则抢答鉴别模块锁存该选手的号码,其他选手抢答无效,同时,译码显示选手编号,当定时器时间减少到0秒时,表示抢答时间到,选手抢答无效。抢答选手的号码和抢答时间的倒计时分别通过译码电路显示在数码管上。若有选手选中,则选中后开始答题,剩余答题时间译码显示,规定时间内答完题,主持人按键决定是否加分或减分。
三.系统实现
3.1基于硬件电路实现
3.1.1 抢答器组成具体框图
按照框图,根据功能指标的要求,可以确定各个电路的组成:
抢答电路由优先编码电路74LS148,锁存器74LS279组成。
定时电路由秒脉冲产生电路NE555,同步计数器74LS192组成。
报警电路由脉冲产生电路NE555,扬声器组成。
控制电路用 单稳态触发器74LS121和一些门电路实现。
抢答器具体框图2.2 抢答器框图组成
图如下图2所示:
图2抢答器具体框图
抢答按钮
优先编码电路74LS148
主持人控制开关
时序控制电路
报警电路
NE555
秒脉冲产生电路NE555
同步计数器74LS192
显示电路(七段显示器)
译码电路74LS48
单稳态触发器74LS121
二进制/BCD编码转化电路
锁存器74LS279
译码电路74LS48
显示电路(七段显示器)
3.1.2原理简述
定时抢答器的总体框图如上图所示,它由主体电路和扩展电路两部分组成。
主体电路完成基本的抢答功能,即开始抢答后,当选手按动抢答键时,能显示选手的编号,同时能封锁输入电路,禁止其他选手抢答。扩展电路完成定时抢答的功能。
定时抢答器的工作过程是:接通电源时,节目主持人将开关置于“清除”位置,抢答器处于禁止工作状态,编号显示器灭灯,定时器倒计时。当定时时间到,却没有选手抢答时,系统报警,并封锁输入电路,禁止选手超时后抢答。
当选手在定时时间内按动抢答键时,抢答器要完成以下四项工作: ①优先缎电路立即分辨出抢答者的编号,并由锁存器进行锁存,然后由译码显示电路显示编号;②扬声器发出短暂声响,提醒节目主持人注意;③控制电路要对输入编码电路进行封锁,避免其他选手再次进行抢答;④控制电路要使定时器停止工作,时间显示器上显示剩余的抢答时间,并保持到主持人将系统清零为止。当选手将问题回答完毕,主持人操作控制开关,使系统回复到禁止工作状态,以便进行下一轮抢答。
3.1.3 元器件介绍
优先编码器 74LS148
编码器在同一时刻内只允许对一个信号进行编码,否则输出的代码会发生混乱。
优先编码器既在同一时间内,当有多个输入信号请求编码时,只对优先级别高的信号进行编码的逻辑电路,称为优先编码器。常用的集成优先编码器有74LS148(8线-3线)和74LS147(10线-4线)两种制式。
优先编码器是较常用的编码器,下面以74LS148为例,介绍它的逻辑功能。此芯片为8线-3线优先编码器。图3.1(a)是其功能简图,图3.1(b)是管脚引线图,表3.1是其真值表。
图3 74SL148芯片
表1 74SL148功能表
74LS148的输入端和输出端低电平有效。图1-1(a)是其功能简图,图中电源和地未画, ~是输入信号,~为三位二进制编码输出信号,=1时,编码器禁止编码,当=0时,允许编码。是技能输出端,只有在=0,而~均无编码输入信号时为0。为优先编码输出端,在=0而~的其中之一有信号时,=0。~各输入端的优先顺序为:级别最高,级别最低。如果=0(有信号),则其它输入端即使有输入信号,均不起作用,此时输出只按编码,=000。优先编码被广泛用于计算机控制系统中,当有多个外设申请中断时,优先编码器总是给优先级别高的设备先编码。
译码器及应用
译码与编码是相反的过程,是将二进制代码表示的特定含义翻译出来的过程。能实现译码功能的组合逻辑电路称为译码器。
集成译码器可分为三种,即:二进制译码器、二-十进制译码器和显示译码器。
二进制译码器:将输入的二进制代码的各种状态按特定含义翻译成对应输出信号的电路。也称为变量译码器。若输入端有n位,代码组合就有2的n次方个,当然可译出2的n次方个输出信号。
显示译码器:由译码输出和显示器配合使用,最常用的是BCD七段译码器。其输出是驱动七段字形的七个信号,常见产品型号有74LS48、74LS47等。
目前用于电子电路系统中的显示器件主要有发光二极管组成的各种显示器件和液晶显示器件,这二种显示器件都有笔划段和点阵型两大类。笔划段型的由一些特定的笔划段组成,以显示一些特定的字型和符号;点阵型的由许多成行成列的发光元素点组成,由不同行和列上的发光点组成一定的字型、符号和图形。它们的示意图见图3.2。
图4 LED显示器件
LED显示器件
LED显示器件如图4所示:
LED是LIGHT EMITTING DIODE的缩写,直译为光发射二极管,中文名为发光二极管。由于作为单个发光元素LED发光器件的尺寸不能做的太小,对于小尺寸的LED显示器件,一般是笔划段型的,广泛用于显示仪表之中;大型尺寸的一般是点阵型器件,往往用于大型的和特大型的显示屏中。
LED显示器件有共阴极和共阳极两类。
LED发光二极管由砷化镓、磷砷化镓等半导体材料制成。LED显示器件的供电电压仅几伏,可以和TTL集成电路匹配,单个发光二极管的电流从零点几毫安到几个毫安。它是一种主动发光器件,周围光线越暗,发光显得越明亮,有红、绿、黄、橙、蓝等几种颜色。
字符显示器:分段式显示是将字符由分布在同一平面上的若干段发光笔划组成。电子计算器,数字万用表等显示器都是显示分段式数字。而LED数码显示器是最常见的。通常有红、绿、黄等颜色。LED的死区电压较高,工作电压大约1.5~3V,驱动电流为几十毫安。图1-2是七段LED数码管的引线图和显示数字情况。74LS47译码驱动器输出是低电平有效,所以配接的数码管须采用共阳极接法;而74LS48译码驱动器输出是高电平有效,所以,配接的数码管须采用共阴极接法。数码管常用型号有BS201、BS202等。
BCD显示译码驱动器
上面提到,74LS48是输出高电平有效的中规模集成BCD七段显示译码驱动器,它的功能简图和管脚引线图如图3.2.2所示。图5 BCD七段显示译码驱动器
a bc de f g
74LS48
A3 A2 A1 A0
计数器
十进制计数器品种很多,有十进制加法计数器、十进制减法计数器和十进可逆计数器,下面仅以74LS192同步十进制可逆计数器为例。介绍它的功能特点。74LS192是属8421BCD码,它的功能真值表如表3.3所示。
是异步清零端,且高电平有效。
是并行置数端,低电平有效,且在有效。
和是两个时钟脉冲,当,时钟脉冲由端接入。并且时,74LS192处于加法计数状态;当脉冲从端输入,且时,74LS192处于减法计数状态;时,计数器处于保持状态。
表2 真值表
是进位端,是借位端。
计数器选用汇总规模集成电路74LS192进行设计较为简便,74LS192是十进制可编程同步加锁计数器,它采用8421码二-十进制编码,并具有直接清零、置数、加锁计数功能。
图2-3是74LS192外引脚及时序波形图。图中、分别是加计数、减计数的时钟脉冲输入端(上升沿有效)。
是异步并行置数控制端(低电平有效), 、分别是进位、借位输出端(低电平有效),CR是异步清零端,D3-D0是并行数据输入殿,Q3-Q0是输出端。
74192的功能表见下表2-1所示。其工作原理是:当=1,CR=0时,若时钟脉冲加到端,且=1。
74SL192外引脚及时序波形图如图6所示:
则计数器在预置数的基础上完成加计数功能,当加计数到9时,端发出进位下跳变脉冲;若时钟脉冲加到端,且 =1,则计数器在预置数的基础上完成减计数功能,当减计数到0时, 端发出借位下跳变脉冲。由74LS192构成的三十进制递减计数器,其预置数为N=(00110000)= (30)10。它的计数原理是 : 只有当低位 端发出借位脉冲时 , 高位计数器才作减计数。当高、低位计数器处于全零 , 且 为 0 时 , 置数端 =0, 计数器完成并行置数 , 在 端的输入时钟脉冲作用下 , 计数器再次进入下一循环减计数。
图6 74LS192外引脚及时序波形图
74LS192是同步十进制可逆计数器,其逻辑符号和引脚排列如图7(a)、(b)所示。
Q3 Q2 Q1 Q0
74LS192
D3 D2 D1 D0
CR
CPU
CPD
LD
(a)
(b)
74LS192
1
2
3
4
5
6
7
8
16
15
14
13
12
11
10
9
VCC D0 CR BO CO LD D2 D3
D1 Q1 Q0 CPD CPU Q2 Q3 GND
74LS192具有下述功能:
①异步清零:CR=1,Q3Q2Q1Q0=0000
②异步置数:CR=0,=0,Q3Q2Q1Q0=D3D2D1D0
③保持: CR=0,=1,CPU=CPD=1,Q3Q2Q1Q0保持原态
④加计数:CR=0, =1,CPU=CP,CPD=1,Q3Q2Q1Q0按加法规律计数
⑤减计数:CR=0, =1,CPU=1,CPD= CP,Q3Q2Q1Q0按减法规律计数
利用集成计数器芯片可方便地构成任意(N)进制计数器。
方法:
①反馈归零法:是利用计数器清零端的清零作用,截取计数过程中的某一个中间状态控制清零端,使计数器由此状态返回到零重新开始计数。把模数大的计数器改成模数小的计数器。
关键:是清零信号的选择与芯片的清零方式有关。异步清零方式以N作为清零信号或反馈识别码,其有效循环状态为0~N-1;同步清零方式以N-1作为反馈识别码,其有效循环状态为0~N-1。还要注意清零端的有效电平,以确定用与门还是与非门来引导。
②反馈置数法:是利用具有置数功能的计数器,截取从Nb到Na之间
N个有效状态构成N进制计数器。其方法是当计数器的状态循环到N
时,由Na构成的反馈信号提供置数指令,由于事先将并行置数数据输
端置成了Nb的状态,所以置数指令到来时,计数器输出端被置成Nb
再来计数脉冲,计数器在Nb基础上继续计数直至 Na,又进行新一轮
数、计数。
关键:是反馈识别码的确定与芯片的置数方式有关。异步置数方式以Na =Nb+N作为反馈识别码,其有效循环状态为Nb~Na;同步置数方式以Na =Nb+N-1作为反馈识别码,其有效循环状态为Nb~Na。还要注意置数端的有效电平,以确定用与门还是与非门来引导。
555定时器
555定时器(又称时基电路)是一个模拟与数字混合型的集成电路。按其工艺分双极型和CMOS型两类,其应用非常广泛。
图8是555定时器内部组成框图。它主要由两个高精度电压比较器A1、A2,一个RS触发器,一个放电三极管和三个5KΩ电阻的分压器而构成。
它的各个引脚功能如下:
图8 555定时器内部组成
1脚:外接电源负端VSS或接地,一般情况下接地。
8脚:外接电源VCC,双极型时基电路VCC的范围是4.5 ~ 16V,CMOS型时基电路VCC的范围为3 ~ 18V。一般用5V。
3脚:输出端Vo
2脚:低触发端
6脚:TH高触发端
4脚:是直接清零端。当端接低电平,则时基电路不工作,此时不论、TH处于何电平,时基电路输出为“0”,该端不用时应接高电平。
5脚:VC为控制电压端。若此端外接电压,则可改变内部两个比较器的基准电压,当该端不用时,应将该端串入一只0.01μF电容接地,以防引入干扰。
7脚:放电端。该端与放电管集电极相连,用做定时器时电容的放电。
在1脚接地,5脚未外接电压,两个比较器A1、A2基准电压分别为的情况下,555时基电路的功能表如表3示。
表3 555时基电路的功能表
ui1
ui2
uO
T的工作状态
0
1
1
1
1
×
×
0
1
1
0
0
导通
截止
截止
导通
导通
3.1.4 单元电路设计
抢答电路
参考电路如图9所示。该电路完成两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作。工作过程:开关S置于“清除”端时,RS触发器的 Q端为0,4个触发器输出置0,使74LS148的Q=0,使之处于工作状态。当开关S置于“开始”时,抢答器处于等待工作状态,当有选手将键按下时(如按下S5),74LS148的输出 经RS锁存后,1Q=1, 74LS48处于工作状态,4Q3Q2Q=101,经译码显示为“5”。此外,1Q=1,使74LS148 =1,处于禁止状态,封锁其他按键的输入。当按键松开即按下时,74LS148的 此时由于仍为1Q=1,使 Q=1,所以74LS148仍处于禁止状态,确保不会出二次按键时输入信号,保证了抢答者的优先性。如有再次抢答需由主持人将S开关重新置“清除”然后再进行下一轮抢答。
图9 抢答电路
定时电路
由节目主持人根据抢答题的难易程度,设定一次抢答的时间,通过预置时间电路对计数器进行预置,计数器的时钟脉冲由秒脉冲电路提供。可预置时间的电路选用十进制同步加减计数器74LS192进行设计,具体电路如图10所示:
图10 定时电路
报警电路
由555定时器和三极管构成的报警电路如图4.3所示。其中555构成多谐振荡器,振荡频率fo=1.43/[(RI+2R2)C],其输出信号经三极管推动扬声器。PR为控制信号,当PR为高电平时,多谐振荡器工作,反之,电路停振。具体电路如图11所示:
图11 定时电路
时序控制电路
时序控制电路是抢答器设计的关键,它要完成以下三项功能:
①主持人将控制开关拨到"开始"位置时,扬声器发声,抢答电路和定时电路进人正常抢答工作状态。
②当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作。
③当设定的抢答时间到,无人抢答时,扬声器发声,同时抢答电路和定时电路停止工作。
3.2基于VHDL语言实现
本方案主要使用VHDL语言编写程序,来实现系统的功能。利用Altum Designer 6.0软件来实现程序设计和仿真,最后下载到FPGA芯片中,完成系统的功能要求。
3.2.1 基本原理
本系统共由抢答鉴别模块(jdjb.vhdl)、计时模块(js.vhdl)、计分模块(jf.vhdl)和LCD译码显示模块等四部分组成。
抢答过程:主持人按下系统复位键(RST),系统进入抢答状态,计时模块和计分模块输出初始信号给数码显示模块并显示出初始值。当某参赛组抢先将抢答键按下时,系统将其余七路抢答信号封锁,组别显示模块送出信号给数码显示模块,从而显示出该抢答成功组别号,并一直保持到下一轮主持人将系统清零为止。随后,计时模块送出倒计时计数允许信号,开始回答问题,计时显示器则从初始值开始以计时,在规定的时间内根据答题的正误来确定加分或减分,并通过数码显示模块将成绩显示出来。计时至0时,停止计时,以中止未回答完问题。若参赛者在规定时间内回答完为题,主持人可给出倒计时计数停止信号。主持人按下复位键,即RST为高电平有效状态,清除前一次的抢答组别,又可开始新的一轮的抢答。
3.2.2子模块的设计思想和实现
抢答鉴别模块
抢答鉴别模块用来准确直观地判断八组抢答者谁最先按下按钮,并为显示端送出信号,通过LCD显示使观众能够清楚地知道是哪一组抢答成功,是整个系统的核心部分。同时组别显示端为下一模块输入信号,以方便主持人为该组抢答成功者进行加减分的操作。
抢答鉴别模块的元件图如下图所示:
VHDL程序:
library ieee ;
use ieee . std_logic_1164 . all ;
ENTITY QD is
port ( A0 , A1 , A2 , A3,A4,A5,A6,A7, RESET , EN : in std_logic ;
B0 , B1 , B2 , B3 , B4 , B5 , B6 , B7 : out std_logic;
C0 , C1 ,C2 , C3 , C4 , C5 , C6 , C7:out std_logic);
end ENTITY QD ;
architecture two of QD is
begin
process ( RESET , EN ,A0 , A1 , A2 , A3,A4,A5,A6,A7 )
begin
if RESET ='1' then B0<='0' ;
B1<='0';
B2<='0' ;
B3<='0' ;
B4<='0';
B5<='0';
B6<='0' ;
B7<='0' ;
else
if EN = '1' then B0<= A0 ;
B1<= A1 ;
B2<= A2 ;
B3<= A3 ;
B4<= A4 ;
B5<= A5 ;
B6<= A6 ;
B7<= A7 ;
else
if EN ='0' then
C0<= A0 ;
C1<= A1 ;
C2<= A2 ;
C3<= A3 ;
C4<= A0 ;
C5<= A5 ;
C6<= A6 ;
C7<= A7 ;
end if ;
end if ;
end if ;
end process ;
end two ;
仿真程序如下
STIMULUS0:process
begin
-- insert stimulus here
RESET<='1';
wait for 5ns;
RESET<='0';
EN<='1';
A0<='1';
A1<='0';
A2<='0';
A3<='0';
A4<='0';
A5<='0';
A6<='0';
A7<='0';
wait for 5ns;
RESET<='0';
EN<='1';
A0<='0';
A1<='1';
A2<='0';
A3<='0';
A4<='0';
A5<='0';
A6<='0';
A7<='0';
wait for 5ns;
RESET<='0';
EN<='1';
A0<='0';
A1<='0';
A2<='1';
A3<='0';
A4<='0';
A5<='0';
A6<='0';
A7<='0';
wait for 5ns;
RESET<='0';
EN<='1';
A0<='0';
A1<='0';
A2<='0';
A3<='1';
A4<='0';
A5<='0';
A6<='0';
A7<='0';
wait for 5ns;
RESET<='0';
EN<='1';
A0<='0';
A1<='0';
A2<='0';
A3<='0';
A4<='1';
A5<='0';
A6<='0';
A7<='0';
wait for 3ns;
RESET<='0';
EN<='1';
A0<='1';
A1<='0';
A2<='0';
A3<='0';
A4<='0';
A5<='0';
A6<='0';
A7<='0';
wait for 5ns;
RESET<='0';
EN<='0';
A0<='0';
A1<='1';
A2<='0';
A3<='0';
A4<='0';
A5<='0';
A6<='0';
A7<='0';
wait for 5ns;
wait;
end process;
仿真波形如下
信号锁存模块
信号锁存模块锁存抢答成功或犯规的组别,并将组别编号输出至LCD显示
同时通过八个或门输出计时使能信号,控制计时模块开始计时。
模块的元件图如下图所示:
VHDL程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY QDJB IS
PORT(CLR: IN STD_LOGIC;
s0,s1 ,s2 ,s3,s4,s5,s6,s7: IN STD_LOGIC;
a0,a1,a2,a3,a4,a5,a6,a7: OUT STD_LOGIC;
STATES: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END ENTITY QDJB;
ARCHITECTURE A OF QDJB IS
signal a_0,a_1,a_2,a_3,a_4,a_5,a_6,a_7 : STD_LOGIC;
BEGIN
PROCESS(CLR,s0,s1,s2,s3,s4,s5,s6,s7) IS
BEGIN
IF CLR='1' THEN STATES<="0000";
a_0<='0';a_1<='0';a_2<='0';a_3<='0';a_4<='0';a_5<='0';a_6<='0';a_7<='0';--清零
ELSIF a_0='1' or a_1='1' or a_2='1' or a_3='1' or a_4='1' or a_5='1' or a_6='1' or a_7='1' then null;--锁存,当有一组选中时其他组再抢答没作用
ELSIF s0='1' then a_0<='1';
STATES <="0001";
ELSIF s1='1' then a_1<='1';
STATES <="0010";
ELSIF s2='1' then a_2<='1';
STATES <="0011";
ELSIF s3='1' then a_3<='1';
STATES <="0100";
ELSIF s4='1' then a_4<='1';
STATES <="0101";
ELSIF s5='1' then a_5<='1';
STATES <="0110";
ELSIF s6='1' then a_6<='1';
STATES <="0111";
ELSIF s7='1' then a_7<='1';
END IF;
END PROCESS;
a0<=a_0;a1<=a_1;a2<=a_2;a3<=a_3;a4<=a_4;a5<=a_5;a6<=a_6;a7<=a_7 ;
END ARCHITECTURE ;
仿真程序:
STIMULUS0:process
begin
-- insert stimulus here
CLR<='1';
wait for 5ns;
CLR<='0';
s0<='1';
s1<='0';
s2<='0';
s3<='0';
s4<='0';
s5<='0';
s6<='0';
s7<='0';
wait for 5ns;
CLR<='1';
wait for 5ns;
CLR<='0';
s0<='0';
s1<='1';
s2<='0';
s3<='0';
s4<='0';
s5<='0';
s6<='0';
s7<='0';
wait for 5ns;
CLR<='1';
wait for 5ns;
CLR<='0';
s0<='0';
s1<='0';
s2<='1';
s3<='0';
s4<='0';
s5<='0';
s6<='0';
s7<='0';
wait for 5ns;
CLR<='1';
wait for 5ns;
CLR<='0';
s0<='0';
s1<='0';
s2<='0';
s3<='1';
s4<='0';
s5<='0';
s6<='0';
s7<='0';
wait for 5ns;
CLR<='1';
wait for 5ns;
CLR<='0';
s0<='0';
s1<='0';
s2<='0';
s3<='0';
s4<='1';
s5<='0';
s6<='0';
s7<='0';
wait for 5ns;
wait;
end process;
仿真波形如下:
计时模块
当抢答鉴别模块成功判别出最先按下抢答按钮的参赛组后,在成功鉴别出哪组最先抢答后,由锁存器输出的计时使能信号使能,进入计时状态。计时模块可分作两部分:(1)预置数;(2)60秒倒计时。计时模块开始工作从预置初始值开始以秒计时,计时至0秒时停止,以中止答题。时间通过LCD显示。
元件图如下:
VHDL程序:
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_vector(3 DOWNTO 0);
QA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --个位
QB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); --十位
END ENTITY JSQ;
ARCHITECTURE ART OF JSQ IS
BEGIN PROCESS(CLK,CLR) IS
VARIABLE TMPA:STD_LOGIC_VECTOR(3 DOWNTO 0);
VARIABLE TMPB:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF CLR='1' THEN TMPA:="0000"; TMPB:="0110";
ELSIF CLK'EVENT AND CLK='1' THEN
IF LDN='1' THEN TMPA:=TA; TMPB:=TB;
ELSIF EN='1' THEN--
IF TMPA="0000" THEN TMPA:="1001";
IF TMPB="0000" THEN
TMPB:="0110";
ELSE TMPB:=TMPB-1;
END IF;
ELSE TMPA:=TMPA-1;
END IF;
END IF;
END IF;
QA<=TMPA; QB<=TMPB;
END PROCESS; END ARCHITECTURE ART;
仿真程序:
STIMULUS0:process
begin
-- insert stimulus here
CLR<='0';
LDN<='1';
EN<='1';
TA<="1001";
TB<="0010";
wait for 15ns;
CLR<='0';
LDN<='0';
EN<='1';
TA<="1001";
TB<="0010";
wait for 15ns;
wait;
end process;
clk0:process
begin
clk<='0
展开阅读全文