摘 要:利用硬件描述语言VHDL实现智能知识问答抢答器的设计。重点阐述了抢答器各个部件的工作原理和采用硬件描述语言的设计方法。本文使用数字电路开发软件MAX+PLUSII给出了设计的仿真结果。结果表明该设计能够满足抢答器的设计要求,对FPGA硬件资源的利用高效合理。
关键词:VHDL;FPGA;数字抢答器
引言
VHDL的英文全名Very-High-Speed Integrated Circuit Hardware Description Language,被IEEE和美国国防部确认为标准硬件描述语言 。它被公认有众多优点,如设计灵活、支持广泛、易于修改,独立于器件设计。
VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言
抢答器在各种知识竞赛和娱乐活动有着非常广泛的应用,实用功能强大的VHDL语言来发开抢答器具有方便快捷,稳定可靠的特点,非常适合。
1、设计要求
1.1四人参加智力竞赛;
1.2当按下选手面前的抢答按钮时,相应的灯亮,且主持人处的指示灯亮,指示已有人申请回答问题;
1.3显示屏上出现选手的号码, 并且开始100s倒计时,若选手在100s内还没有给出答案,喇叭声将响起,提示该选手回答失败;
1.4一轮抢答完成后,主持人按动复位键,开始下一轮回答
2、系统的VHDL设计
本文采用最大的PLD生产厂商altera公司的可编程逻辑器件,芯片型号为FLEX 84-4。
本文开发软件为MAX+PLUSII,总的电路系统图如下:
下文是该数字电路系统的关键子模块及VHDL代码:
模块一:实现选手按键信号的或操作c1<=(b1 or b2 or b3 or b4 or b4),即只要有一个按动抢答按钮,他就能开始回答,并且其他选手失去了回答问题的机会。
模块二:在每次电路时钟信号clk的上升沿实现“q1<=d1;q2<=d2;q3<=d3;q4<=d4”,并发出alm发声有效信号(alm<='1')。
模块三:当cp信号上升沿时,q端置高电平,代表其中有选手了回答。当主持人按下clr按钮将其置零时,q端置低电平,系统复位。部分代码如下:
if clr='0' then --清零
q<='0';
elsif cp'event and cp='1' then
q<='1';
模块四:实现从选手按键号码到对应二进制数的转换,运用VHDL的”case”语句编程,部分代码如下:
tmp:=d1&d2&d3&d4; case tmp is
when""0111""=>q<=""0001"";when""1011""=>q<=""0010"";
when""1101""=>q<=""0011"";when""1110""=>q<=""0100"";
模块五:实现接收到抢答信号后的99s倒计时,倒计时时间到则发出一个发声命令。 主要运用了循环思想编程,部分代码如下:
if clk'event and clk='1'then
if en='1'then --开始计数
if ll=0 and hh=0 then
sound<='1';
elsif ll=0 then
ll:=""1001"";
hh:=hh-1;
else
ll:=ll-1;
end if;
else --en=0,主持人按下按钮后
sound<='0';
hh:=""1001"";
ll:=""1001"";
end if; end if;
h<=hh; l<=ll;
模块六(连接模块):此模块实现以上各模块的引脚通讯,使它们配合工作,达到预期的电路功能。编程使用了VHDL的”component “功能,简便易懂,稳定可靠,部分代码如下:
signal one,two,three,four,five,six,seven,eight:std_logic;
begin
u1:a port map(d1,d2,d3,d4,one);
u2:feng port map(one,host,two);
u3:lockb port map(d1,d2,d3,d4,two,host,three,four,five,six,seven);
u4:change port map(three,four,five,six,dis);
u5:count port map(clk,seven,t1,t2,eight);
u6:b port map(seven,eight,sound);
f1<=three;
f2<=four;
f3<=five;
f4<=six;
end lianjie_arc;
3、结论以及结果说明
仿真图(总系统):
说明:1:四人(d1,d2,d3,d4)参加智力竞赛;
2:当按下选手面前的抢答按钮时(输入高电平),相应的灯亮(f1,f2,f3,f4输出高电平),且主持人处的指示灯亮,指示已有人申请回答问题;
3:显示屏上出现选手的号码(dis输出对应数字), 并且开始100s倒计时,若选手在100s内还没有给出答案,喇叭声将响起(sound输出高电平),提示该选手回答失败;
4:一轮抢答完成后,主持人按动复位键(host输入低电平),所有数都清零,开始下一轮回答
符合设计要求。
参考文献:
[1]罗苑棠.CPLD/FPGA常用模块与综合系统设计实例精讲[M].北京:电子工业出版社,2007.
[2]李洪伟,袁斯华.基于Quartus II的FPGA/CPLD设计[M].北京:电子工业出版社,2006.
[3]王旭东,潘广帧.MATLAB及其在FPGA中的应用[M].北京:国防工业出版社,2006.