logo资料库

EDA四路抢答器设计.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
系统的工作原理如下:当主持人按下使能端 EN1 时,抢答器开始工作,A、B、C、D 四个抢 答者谁最先抢答成功则此选手的台号灯(LED_A—LED_D)将点亮,并由蜂鸣器发出抢答成功 的警报;接下来主持人提问,若回答正确,主持人按加分按钮 ADD,抢答计分模块 JIFEN 将 给对应的组加分,并将该组的总分显示在对应的选手计分数码管 抢答鉴别模块: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity JIANBIE is port(CLK1,EN1,RST:in std_logic; A,B,C,D:in std_logic; A1,B1,C1,D1,RING:out std_logic; STATES:out std_logic_vector(3 downto 0)); sinor,ringf,tmp,two:std_logic; cnt:std_logic_vector(5 downto 0); JIANBIE is end JIANBIE; architecture one of signal signal begin sinor<=(A XOR B) XOR (C XOR D); two<=A and B; p1:process(A,B,C,D,RST,tmp) begin if RST='1' then tmp<='1';STATES<="0000"; elsif tmp='1' then if (A='1'AND B='0'AND C='0'AND D='0' ) then A1<='1'; ELSIF (A='0'AND B='1'AND C='0'AND D='0') THEN B1<='0'; C1<='0'; D1<='0'; STATES<="0001"; tmp<='0'; A1<='0'; B1<='1'; C1<='0'; D1<='0';STATES<="0010";tmp<='0'; ELSIF (A='0'AND B='0'AND C='1'AND D='0') THEN A1<='0'; B1<='0'; C1<='1'; D1<='0'; STATES<="0011"; tmp<='0'; ELSIF (A='0'AND B='0'AND C='0'AND D='1') THEN A1<='0'; else tmp<='1';STATES<="0000"; B1<='0'; C1<='0'; D1<='1'; STATES<="0100";tmp<='0'; end if ; end if; end process p1; p2:process(CLK1,EN1,RST,cnt) begin if RST='1' then cnt<="000000";ringf<='0'; elsif CLK1'event and CLK1='1' then if EN1='0' and sinor='1' then if two='0' then 1
if cnt<"111111" then ringf<=not ringf;cnt<=cnt+1; else ringf<='0'; end if; end if; end if; end if; end process p2; RING<=ringf; end one; RST 为复位端,将输出信号复位或停止警报声。CLK1 端为警报时钟信号;待测信号,即抢答 信号 A,B,C,D 输入电路中后,通过判断是哪个信号最先为‘1’得出抢答成功的组别 1,2, 3 或 4 组,将组别号输出到相应端 A1,B1,C1,D1,并将组别序号换算为四位二进制信号输出到 STATES[3..0]端锁存,等待输出到计分和显示单元。同时 RING 端在有成功抢答的情况下发 出警报。 记分模块: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JIFEN IS PORT(RST1: IN STD_LOGIC; ADD: IN STD_LOGIC; CHOS: IN STD_LOGIC_VECTOR(3 DOWNTO 0); AA2,AA1,AA0,BB2,BB1,BB0: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CC2,CC1,CC0,DD2,DD1,DD0: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END ENTITY JIFEN ; ARCHITECTURE ART OF JIFEN IS BEGIN PROCESS(RST1,ADD,CHOS) IS VARIABLE POINTS_A2,POINTS_A1: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE POINTS_B2,POINTS_B1: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE POINTS_C2,POINTS_C1: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE POINTS_D2,POINTS_D1: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF (ADD'EVENT AND ADD='1') THEN IF RST1='1' THEN 2
POINTS_A2:="0001"; POINTS_A1:="0000"; POINTS_B2:="0001"; POINTS_B1:="0000"; POINTS_C2:="0001"; POINTS_C1:="0000"; POINTS_D2:="0001"; POINTS_D1:="0000"; ELSIF CHOS="0001" THEN IF POINTS_A1="1001" THEN POINTS_A1:="0000"; IF POINTS_A2="1001" THEN POINTS_A2:="0000"; ELSE POINTS_A2:=POINTS_A2+'1'; END IF; ELSE POINTS_A1:=POINTS_A1+'1'; END IF; ELSIF CHOS="0010" THEN IF POINTS_B1="1001" THEN POINTS_B1:="0000"; IF POINTS_B2="1001" THEN POINTS_B2:="0000"; ELSE POINTS_B2:=POINTS_B2+'1'; END IF; ELSE POINTS_B1:=POINTS_B1+'1'; END IF; ELSIF CHOS="0011" THEN IF POINTS_C1="1001" THEN POINTS_C1:="0000"; IF POINTS_C2="1001" THEN POINTS_C2:="0000"; ELSE POINTS_C2:=POINTS_C2+'1'; END IF; ELSE POINTS_C1:=POINTS_C1+'1'; END IF; ELSIF CHOS="0100" THEN IF POINTS_D1="1001" THEN POINTS_D1:="0000"; IF POINTS_D2="1001" THEN POINTS_D2:="0000"; ELSE POINTS_D2:=POINTS_D2+'1'; 3
END IF; ELSE POINTS_D1:=POINTS_D1+'1'; END IF; END IF; END IF; AA2<=POINTS_A2; AA1<=POINTS_A1; AA0<="0000"; BB2<=POINTS_B2; BB1<=POINTS_B1; BB0<="0000"; CC2<=POINTS_C2; CC1<=POINTS_C1; CC0<="0000"; DD2<=POINTS_D2; DD1<=POINTS_D1; DD0<="0000"; END PROCESS; END ARCHITECTURE ART; RST 端为复位端,将计分起始分数设为 100。CHOS[3..0]端功能是锁存已抢答成功的组别序 号,当接加分按钮 ADD 后,将给 CHOS[3..0]所存的组别加分。每按一次加 10 分,并分为个、 十、百位从高位到低位进行显示。 RTL 电路: 这次设计总体比较成功,基本满足了设计要求,但是仍有需要改进的地方: 4
1.在抢答鉴别模块中,抢答成功后各组台号灯具有记忆功能,这一点会造成即使下一轮抢答 没有抢答成功者(即有两人或两人以上同时按下抢答器),之前被点亮的 led 灯会仍然保持 点亮状态。虽然此时可以根据有没有警报声来提示抢答是否有效,但是仍然不够完善; 2.记分模块只有加分而没有实现减分功能 3.另外,本设计还有需要改进的地方,如管脚过多,实际连接时不够简洁,容易造成连接 错误。故应将各个模块综合起来设计总电路,但是由于成员对顶层程序设计这一部分不甚 了解,故没有完成这一环节。 心得体会: 通过这次设计,进一步加深了对 EDA 的了解,让我对它有了更加浓厚的兴趣。特别是 当每一个子模块编写调试成功时,心里特别的高兴。通过这次课程设计使我懂得了理论与实 际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起 来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的 能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过 各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得 不够深刻,掌握得不够牢固。在设计中遇到了很多问题,最后在老师的辛勤的指导下,终于 迎刃而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实 际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力。 5
分享到:
收藏