智力抢答器的设计
一:摘要
抢答器是在智力竞赛中为了答题时方便进行抢答而设计的一种优先判决器电路,本次的课程设计要求是可容纳四组参赛者的数字智力抢答器,每组设置一个抢答按钮供抢答者使用。电路具有第一抢答信号的鉴别和锁存功能。在主持人将系统复位并发出抢答指令后,若参加者按抢答开关,则该组指示灯亮并用组别显示电路显示抢答者的组别。此时,电路具备自锁功能,使别组的抢答开关不起作用。设置记分电路。每组在开始时预置成100分,抢答后主持人记分,答对依次加10分。设置犯规电路。对提前抢答和超时抢答的组别鸣喇叭示警,并由组别显示电路显示出犯规组别。按照这样的规律进行智力竞赛抢答游戏,要完成这些逻辑功能,这个电路应该包括鉴别模块,计数模块,报警模块,译码模块,计分模块,分频模块。
关键词:抢答 封锁鉴别 计数 报警
二:设计要求
1:抢答器同时供四组选手比赛,分别用四个按钮S0,S1,S2,S3表示。
2:设置一个系统清除和开始抢答的总控制开关又主持人作用RST.
3:抢答器具有锁存与显示功能,即锁定最先抢答的选手的编号并由LED 显示出来
4:选手的抢答实行优先制,即当第一个选手按下抢答键时,其他选手的按键不再有效直到主持人将系统清楚
5:抢答器具有定时功能,每次抢答时间先前设定,超出抢答时间就会出现报警提示,此轮抢答作废
6:如果答对由主持人记分。初始预置100分,每答对一次加十分
三:方案论述
3.1抢答器的鉴别模块
在这个模块中主要实现的是抢答过程中的前大功能,如果选手出现超前抢答则发出警告报警声,并能记录抢答者编号。实现当有一路抢答器按键按下时,其他抢答器信号将被改抢答器封锁而不能正常抢答。其中四个抢答信号:S0,S1,S2,S3;抢答状态显示信号states 抢答与报警时钟信号clk2;系统复位信号rst ;报警信号warm.
3.2抢答器计数模块
在这个模块中主要实现抢答器的计时功能,在有抢答器按键按下后的20秒的倒计时,并且在20秒内倒计时后无人抢答就显示抢答超时并报警提示。在这其中有时钟信号clk1;系
统复位信号ret ;抢答是能信号start ;无人抢答信号warm ;计时终止信号stop ;计时十位和计时个位信号tb,ta 。
3.3报警模块
在这个模块中主要实现抢答过程中的报警功能。在有限时间内无人抢答或者超前抢答都会用报警声来提示。其中包括计时停止信号stop ;状态输出信号alm ;计数脉冲clk 。
3.4译码模块
在这个模块中主要实现抢答过程中将BCD 码转换成7段得功能。
3.5分频模块
在这个模块中主要实现抢答过程中所需要的时钟信号。
3.6记分模块
这个模块主要实现抢答者答对时加十分的功能。
3.7顶层文件
在这个模块中是对前面模块的综合编写
3.8电路图
四:单元电路设计代码实现
4.1抢答器鉴别模块
LINBARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY JIANBIE IS
PORT(CLR: IN STA_LOGIC;
A,B,C,D: IN STD_LOGIC;
A1,B1,C1,D1: OUT STD_LOGIC;
STATES: OUT STD_LOGIC_VECTOR(0 TO 3));
END ENTITY JIANBIE;
ARCHITECTURE ART OF JIANBIE IS
SIGNAL a_1,b_1,c_1,d_1:STD_LOGIC;
BEGIN
PROCESS(CLR,A,B,C,D) IS
BEGIN
IF CLR = '1' THEN STATES
ELSIF a_1='1'or b_1='1'or c_1='0'or d_1='0' THEN NULL;--锁存
ELSIF a='1' then a_1
ELSIF b='1' then b_1
ELSIF c='1' then c_1
ELSIF d='1' then d_1
END IF;
a1
END PROCESS;
END ARCHITECTURE ART;
4.2计时模块
LINBARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY JISHI IS
PORT(CLR,LDN,EN,CLK: IN STA_LOGIC;
TA,TB: IN STD_LOGIC_VECTOR(0 TO 3);
QA: OUT STD_LOGIC_VECTOR(0 TO 3); --个位
QB: OUT STD_LOGIC_VECTOR(0 TO 3)); --十位
END ENTITY JISHI;
ARCHITECTURE ART OF JISHI IS
BEGIN
PROCESS(CLK) IS
V ARIABLE TMPA:STD_LOGIC_VECTOR(0 TO 3);
V ARIABLE TMPB:STD_LOGIC_VECTOR(0 TO 3);
BEGIN
IF CLR = '1' THEN TMPA:="0000";TMPB:="0010";--清零 倒计时20s
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
END PROCESS;
END ARCHITECTURE ART;
ELSIF a='1' then a_1
ELSIF b='1' then b_1
ELSIF c='1' then c_1
ELSIF d='1' then d_1
END IF;
a1
END PROCESS;
END ARCHITECTURE ART;
4.3计分模块
LINBARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY JIFEN IS
PORT(RST: IN STA_LOGIC;
ADD: IN STD_LOGIC;
CHOS:IN STD_LOGIC_VECTOR(0 TO 3); --个位
OUT1: OUT STD_LOGIC_VECTOR(0 TO 3)); --十位
END ENTITY JIFEN;
ARCHITECTURE ART OF JIFEN IS
BEGIN
PROCESS(RST,ADD,CHOS)
V ARIABLE INTS1:STD_LOGIC_VECTOR(0 TO 3);
V ARIABLE INTS2:STD_LOGIC_VECTOR(0 TO 3);
V ARIABLE INTS3:STD_LOGIC_VECTOR(0 TO 3);
V ARIABLE INTS4:STD_LOGIC_VECTOR(0 TO 3);
BEGIN
IF ADD'EVENT AND ADD='1' THEN
IF RST='1' THEN
INT0:="0000";
INT1:="0000";
INT2:="0000";
INT3:="0000";
ELSIF CHOS="0001" THEN
IF INT0="1001" THEN
INT0:="0000";
ELSE
INT0:=INT0+1;
END IF;
ELSIF CHOS="0010" THEN
IF INT1="1001"; THEN
INT1:="0000" THEN
ELSE
INT1:=INT1+1;
END IF;
ELSIF CHOS="0011" THEN
IF INT2="0000";
ELSE
INT2:=INT2+1;
END IF;
ELSIF CHOS="0100" THEN
IF INT3="0100" THEN
INT3:="0000";
ELSE
INT3:=INT3+1;
END IF;
END IF;
END IF;
IF CHOS="OOO1" THEN OUT1
ELSIF CHOS="0010" THEN OUT1
ELSIF CHOS="0011" THEN OUT1
ELSIF CHOS="0100" THEN OUT1
ELSIF CHOS="0000" THEN OUT1
END IF;
END PROCESS;
END ARCHITECTURE ART;
4.4译码模块
LINBARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY XIANSHI IS
PORT(AIN: IN STD_LOGIC_VECTOR(0 TO 3);
DOUT: OUT STD_LOGIC_VECTOR(0 TO 6));
END ENTITY XIANSHI;
ARCHITECTURE ART OF XIANSHI IS
BEGIN
PROCESS(AIN)
BEGIN
CASE AIN IS
WHEN "0000"=>DOUT
WHEN "0001"=>DOUT
WHEN "0010"=>DOUT
WHEN "0011"=>DOUT
WHEN "0100"=>DOUT
WHEN "0101"=>DOUT
WHEN "0110"=>dout
WHEN "0111"=>DOUT
WHEN "1000"=>DOUT
WHEN "1001"=>DOUT
WHEN OTHERS=>DOUT
END CASE;
END PROSESS;
END ARCHITECTURE ART;
4.5元件例化
LINBARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY LIHUA IS
PORT(PD,TA,TB: IN STD_LOGIC_VECTOR(0 TO 3);
CLK,EN,LDN,ADD,RST,CLRQD,CLRSJ:STD_LOGIC;
QDO,OUT1,OUT2,OUT3,OUT4: OUT STD_LOGIC_VECTOR(0 TO 3));
END ENTITY LIHUA;
ARCHITECTURE ONE OF LIHUA IS
COMPONENT QDIB IS
PORT(CLR:IN STD_LOGIC;
A,B,C,D:IN STD_LOGIC;
A1,B1,C1,D1:OUT STD_LOGIC;
STATES:OUT STD_LOGIC_VECTOR(0 TO 3));
END COMPONENT QDJB;
COMPONENT JSQ IS
PORT(CLR,LDN,EN,CLK:IN STD_LOGIC;
TA,TB:IN STD_LOGIC_VECTOR(0 TO 3);
QA,QB:OUT STD_LOGIC_VECTOR(0 TO 3));
END COMPONENT QDJB;
COMPONENT YMQ IS
PORT(AIN:IN STD_LOGIC_VECTOR(0 TO 3);
DOUT:OUT STD_LOGIC_VECTOR(0 TO 6));
END COMPONENT YMQ;
COMPONENT JFQ IS
PORT(RET:IN STD_LOGIC;
ADD:IN SYD_LOGIC;
CHOS:IN STD_LOGIC_VECTOR(0 TO 3);
OUT1:OUT STD_LOGIC_VECTOR(0 TO 3));
END COMPONENT JFQ;
SIGNAL TMP1,TMP2,TMP3.TMP4:STD_LOGIC_VECTOR(0 TO 3);
BEGIN
U1:QDJB PORT MAP(CLR=>CLRQD,A=>QD(0),B=>QD(1),C=>QD(2),D=>QD(3),A1=>QDO(0),B1=>QDO(
1),C1=>QDO(2),D1=>QDO(3),STATES=>TMP1);
U2:JFQ PORT MAP(RET=>RST,ADD=>ADD,CHOS=>TMP1,OUT1=>OUT2);
U3:JSQ PORT MAP(CLR=>CLRSJ,LDN=>LDN,EN=>EN,CLK=>CLK,TA=>TA,TB=>TA,QA=>OUT3,QD=>OUT4);
OUT1
END;
五:心得体会
经过一周多时间的课程设计,我对EDA 这门课的内容有了更加深刻的认识。EDA 是电子设计自动化,单只是老师上课讲的内容是远远不够的,没有亲手编程序,没有亲自去写程序,那就体会不到它真正的设计过程是怎么样的。之前课堂上练习讲解的都是一些小程序,实现一些基本功能的,所以也没有体会到设计一个综合工程需要多少努力。经过这一周的磨练,我对EDA 的设计流程,对VHDL 语言设计掌握的更加熟练,明显的感觉到自己的进步。在进行大型项目设计时也明白了模块化设计的优越性,掌握了工程设计的流程,比如这个设计应该能实现什么功能,这些功能是由哪些部分组成,这些部分之间的联系等等。要把握先后顺序,查找资料积累经验。这段时间通过对EDA 相关书籍的翻阅对相关资料的搜索,对DEA 的了解范围更广了,对VHDL 语言的应用也有了很大的提高,认识更深了知道了VHDE 语言的重要性 同时,通过这次实验我也认识到自己的不足,在今后的学习中一定继续改进
六:参考文献
[1] 刘洪喜,陆颖.VHDL 电路设计实用教程. 清华大学出版社.2004
[2] 李国洪,沈明山. 可编程逻辑器件EDA 技术与实践. 机械工业出版社.2005
[3]潘松,黄继业.EDA 技术实用教程. 科技出版社2005
[4]王振红. 数字电路设计与应用实践教程. 机械工业出版社.2006
[5]江国强.EDA 技术习题与实验. 电子工业出版社.2005