展开全部
做过六路的抢答器设计,自己把这个再改改吧
library ieee;
use ieee.std_logic_1164.all;
entity liulu is
port(set,clk,d1,d2,d3,d4,d5,d6:in std_logic; --定义六个输入一个时钟一个复位
q:out std_logic_vector(3 downto 0); --合法抢答时的输出
fq:out std_logic_vector(5 downto 0); --非法抢答时的输出
selected: out std_logic); --判断是否有合法抢答信号
end liulu;
architecture liulu of liulu is
signal deny: std_logic; --定义锁存信号
begin
selected<=deny;
process(d1,d2,d3,d4,d5,d6,set)
variable tmp1,tmp3:std_logic_vector(5 downto 0); --定义抢答时中间变量
variable tmp2:std_logic; --定义判断是否有抢答信号的变量
begin
tmp1:=d1 & d2 & d3 & d4 & d5 & d6;
tmp2:=d1 or d2 or d3 or d4 or d5 or d6;
tmp3:=(d1 and clk)&(d2 and clk)&(d3 and clk)&(d4 and clk)&(d5 and clk)&(d6 and clk);
fq<="000000"; --定义非法抢答时输出的初始状态
if set='0' then
deny<='0';
tmp1:="000000";
q<="0000"; --定义合法抢答时输出的初始状态
if tmp2='1' then --判断是否有非法抢答
fq<= tmp3;
end if;
elsif deny='0' then --合法抢答时译码输出
case tmp1 is
when "100000"=>q<="0001" ;deny<='1';
when "010000"=>q<="0010" ;deny<='1';
when "001000"=>q<="0011" ;deny<='1';
when "000100"=>q<="0100" ;deny<='1';
when "000010"=>q<="0101" ;deny<='1';
when "000001"=>q<="0110" ;deny<='1';
when others=>q<="0000";
end case;
end if;
end process;
end liulu;
library ieee;
use ieee.std_logic_1164.all;
entity liulu is
port(set,clk,d1,d2,d3,d4,d5,d6:in std_logic; --定义六个输入一个时钟一个复位
q:out std_logic_vector(3 downto 0); --合法抢答时的输出
fq:out std_logic_vector(5 downto 0); --非法抢答时的输出
selected: out std_logic); --判断是否有合法抢答信号
end liulu;
architecture liulu of liulu is
signal deny: std_logic; --定义锁存信号
begin
selected<=deny;
process(d1,d2,d3,d4,d5,d6,set)
variable tmp1,tmp3:std_logic_vector(5 downto 0); --定义抢答时中间变量
variable tmp2:std_logic; --定义判断是否有抢答信号的变量
begin
tmp1:=d1 & d2 & d3 & d4 & d5 & d6;
tmp2:=d1 or d2 or d3 or d4 or d5 or d6;
tmp3:=(d1 and clk)&(d2 and clk)&(d3 and clk)&(d4 and clk)&(d5 and clk)&(d6 and clk);
fq<="000000"; --定义非法抢答时输出的初始状态
if set='0' then
deny<='0';
tmp1:="000000";
q<="0000"; --定义合法抢答时输出的初始状态
if tmp2='1' then --判断是否有非法抢答
fq<= tmp3;
end if;
elsif deny='0' then --合法抢答时译码输出
case tmp1 is
when "100000"=>q<="0001" ;deny<='1';
when "010000"=>q<="0010" ;deny<='1';
when "001000"=>q<="0011" ;deny<='1';
when "000100"=>q<="0100" ;deny<='1';
when "000010"=>q<="0101" ;deny<='1';
when "000001"=>q<="0110" ;deny<='1';
when others=>q<="0000";
end case;
end if;
end process;
end liulu;
华芯测试
2024-09-01 广告
2024-09-01 广告
电学测试台是深圳市华芯测试科技有限公司的核心设备之一,它集成了高精度测量仪器与自动化控制系统,专为半导体芯片、电子元件及模块的电性能检测而设计。该测试台能够迅速、准确地完成电压、电流、电阻、电容及频率等关键参数的测试,确保产品质量符合行业标...
点击进入详情页
本回答由华芯测试提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询