1.至多十位选手参与抢答
2.从某个选手最快按下抢答键开始所有选手的抢
答键被锁定并令结果显示驱动器输出该选手的编号,用于驱动七段液晶显示器
3,结果锁定后可以进行手动重置,并重新开始抢
答
4需要分别完成以下3个模块的VHDL设计并分别进行仿真测试:选手按键编码模块,抢答及锁定模块,结果显示驱动模块。
5按照合理逻辑将上述三个模块进行连接,必要时
适当添加周边电路完成整体的VHDL设计再进行仿
真测试。
采用tb仿真,不需要实物
可私信,赏金
该回答引用ChatGPT4与博主@晓码自在合作编写:
这里是一个解决该问题的VHDL设计思路:
vhdl
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity buttons_encode is
Port ( clk : in STD_LOGIC;
btn : in STD_LOGIC_VECTOR (9 downto 0);
encoded : out STD_LOGIC_VECTOR (3 downto 0));
end buttons_encode;
architecture Behavioral of buttons_encode is
begin
process(clk)
begin
if rising_edge(clk) then
if btn(0) = '1' then
encoded <= "0001";
elsif btn(1) = '1' then
encoded <= "0010";
......
end if;
end if;
end process;
end Behavioral;
该模块对10个选手按钮进行编码,输出一个4位二进制编码表示被按下的按钮号。
2. 抢答及锁定模块:
vhdl
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity answer_lock is
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
encoded : in STD_LOGIC_VECTOR (3 downto 0);
locked : out STD_LOGIC;
led : out STD_LOGIC_VECTOR (3 downto 0));
end answer_lock;
architecture Behavioral of answer_lock is
signal answer : STD_LOGIC_VECTOR (3 downto 0);
begin
process(clk, rst)
begin
if rst = '1' then
answer <= "0000";
locked <= '0';
elsif rising_edge(clk) then
if locked = '0' then
if encoded /= "0000" then
answer <= encoded;
locked <= '1';
end if;
end if;
end if;
end process;
led <= answer;
end Behavioral;
该模块检测到第一个被按下的按键,锁定抢答结果,并输出对应的编码到4位LED显示器。同时拉高locked信号。
将这3个模块连接,添加rst复位信号,可以完成整个设计。仿真测试可以验证是否正常工作。
这是一个比较简单的抢答器设计思路。关键是对按钮进行编码,然后锁定第一个被按下的按钮并显示结果。