END IF;
ELSE NULL;
END IF;
BJ<=A OR B OR C OR D;
END IF;
END PROCESS;
END behave;
2、仿真图
EDA课程设计四路电子抢答器设计
由图中可看出在复位信号R从高电平降到低电平后,抢答器开始正常工作,A最先抢答,这时开始报警,数码管输出显示1,说明A最先抢答。
(二)计时模块
1、VHDL源程序
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY JS IS
PORT(R,ST,EN,CLK:IN std_logic;
cg,cs:IN std_logic_vector(3 DOWNTO 0);
GW,SW:BUFFER std_logic_vector(3 DOWNTO 0);
BJ:OUT std_logic);
END JS;
ARCHITECTURE behave OF JS IS
BEGIN
PROCESS(R,EN,ST,CLK)
BEGIN
IF ST='0'THEN
IF R='1'THEN
IF EN='1'THEN
GW<=cg;
SW<=cs;
BJ<='0';
ELSE GW<="0000";
SW<="0110";
BJ<='0';
END IF;
ELSIF CLK'EVENT AND CLK='1'THEN
IF GW<="0000"THEN
GW<="1001";
IF SW="0000"THEN
SW<="0110";
ELSE SW<=SW-1;
END IF;
ELSE GW<=GW-1;
END IF;
IF GW="0000"AND SW<="0000"THEN
GW<="0000";
SW<="0110";
BJ<='1';
EDA课程设计四路电子抢答器设计
END IF;
END IF;
ELSE BJ<='0';
END IF;
END PROCESS;
END behave;
2、仿真图
从图中可看出,在复位信号为1时,始能信号EN为1,这时计时时间改变为cs,cg中输入的06秒,在复位信号变为0后开始计时,在计时时间到达0时由于无人抢答(由停止信号ST控制),故产生报警信号开始报警。在停止信号为1后,停止计时,在停止信号为0时,计时再次开始。
(三)数据选择模块
1、VHDL源程序
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY XZMK IS
PORT(SEL:IN std_logic_vector(2 DOWNTO 0);
H,S,G:IN std_logic_vector(6 DOWNTO 0);
Z:OUT std_logic_vector(6 DOWNTO 0));
END XZMK;
ARCHITECTURE behave OF XZMK IS
BEGIN
WITH SEL SELECT
Z<=H when"000",
G when"001",
S when"010",
EDA课程设计四路电子抢答器设计
"0000000" when others;
END behave;
2、仿真图
从图中可看出,在SEL信号为2时,输出计时时间的十位(S信号),在SEL信号为1时,输出计时时间的个位(G信号),在SEL信号为0时,输出最先抢答的抢答器的编号(H信号)。
(四)译码模块
1、VHDL源程序
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY YMMK IS
PORT(SJ:IN std_logic_vector(3 DOWNTO 0);
Y:OUT std_logic_vector(6 DOWNTO 0));
END ENTITY;
ARCHITECTURE behave OF YMMK IS
BEGIN
PROCESS(SJ)
BEGIN
CASE SJ IS
WHEN"0000"=>Y<="1111110";
WHEN"0001"=>Y<="0110000";
WHEN"0010"=>Y<="1101101";
WHEN"0011"=>Y<="1111001";
WHEN"0100"=>Y<="0110011";
WHEN"0101"=>Y<="1011011";
WHEN"0110"=>Y<="1011111";
WHEN"0111"=>Y<="1110000";
WHEN"1000"=>Y<="1111111";
WHEN"1001"=>Y<="1110011";
EDA课程设计四路电子抢答器设计
WHEN OTHERS=>Y<="0000000";
END CASE;
END PROCESS;
END behave;
2、仿真
从图中可看出,本模块对输入的BCD码信号(SJ信号)进行了编译,输出信号Y,使其能在数码管上对应显示出相应的数值。
(五)位循环模块
1、VHDL源程序
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY SEL IS
PORT(CLK,R:IN std_logic;
SEL:buffer std_logic_vector(2 DOWNTO 0));
END SEL;
ARCHITECTURE behave OF SEL IS
BEGIN
PROCESS(CLK,R)
BEGIN
IF R='1' THEN
SEL<="000";
ELSIF CLK'EVENT AND CLK='1'THEN
IF SEL="010"THEN
SEL<="000";
EDA课程设计四路电子抢答器设计
ELSE SEL<=SEL+1;
END IF;
END IF;
END PROCESS;
END behave;
2、仿真
从图中看出,在复位开始信号为1时不工作,在为0后开始工作,SEL信号在0-2这三个数内随CLK信号的变化循环,实现数码管的循环显示。
五、完整电路设计与分析
(一)主电路图
下图为具有完整抢答器功能的结构图,其中用到了抢答模块一个,计时模块一个,
译码模块两个,选择模块一个,位循环模块一个。共有17个输入,11个输出。
EDA课程设计四路电子抢答器设计
(二)时序仿真图
下图为整个模块的时序仿真图,由图中可看出,在复位信号为0后,抢答器开始工作,在有抢答信号后抢答器报警,数码管轮流显示计时时间及最先抢答的抢答器对应的号码。
(三)芯片引脚分布图
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说高考高中基于FPGA四路电子抢答器设计(2)在线全文阅读。
相关推荐: