Здрасти....
Нажатие любой кнопы сделает вход не 3FF, а другое значение, счет и запустится.
---------- Post added at 23:04 ---------- Previous post was at 23:03 ----------
Немножко логики применим, и..... НЕ РАВНО.
Вид для печати
Виктор, а если нажаты две кнопки одновременно?
А если расчет делается только на одну нажатую кнопу, то нафига столько антидребезгов?
Если у тебя существует необходимость обрабатывать неодиночные нажатия, то смысл в шифраторе теряется, он не может хранить код сразу нескольких кнопок.
Поэтому, нужно просто определиться, будут одиночные нажатия, и тогда ставь шифратор, и одиночный антидребезг. Или убирай шифратор и ставь кучу антидребезга.
Вы наверное говорите о приоритетном шифраторе:
http://gorgeous-karnaugh.com/ru/uche...shifrator.html
Скорее о шифраторе К1533ИВ1(74148)
http://www.ralfzimmermann.de/ttl_ic/74148.gif
Код:library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity sn74ls148 is
port(i:in std_logic_vector(7 downto 0);
s:in std_logic;
ys,yex:out std_logic;
y:out std_logic_vector(2 downto 0));
end sn74ls148;
architecture behav of sn74ls148 is
begin
ys<=NOT((NOT(s)) and ( i(0)) and ( i(1))and ( i(2))and ( i(3))and ( i(4))and ( i(5))and ( i(6))and ( i(7)));
yex<=NOT((NOT(s)) and ((NOT i(0)) or (NOT i(1)) or (NOT i(2)) or (NOT i(3)) or (NOT i(4)) or (NOT i(5)) or (NOT i(6)) or (NOT i(7))));
process(i,s)
begin
if(s='0')then
if(i(0)='0')then
y<="000";
elsif (i(1)='0')then
y<="001";
elsif (i(2)='0')then
y<="010";
elsif (i(3)='0')then
y<="011";
elsif (i(4)='0')then
y<="100";
elsif (i(5)='0')then
y<="101";
elsif (i(6)='0')then
y<="110";
elsif (i(7)='0')then
y<="111";
else
y<="XXX";
end if;
end if;
end process;
end behav;
Код:entity HW3Q1_148_Decoder is
Port ( EI : in STD_LOGIC;
Input : in STD_LOGIC_VECTOR (7 downto 0);
A : out STD_LOGIC_VECTOR (2 downto 0);
GS : out STD_LOGIC;
EO : out STD_LOGIC);
end HW3Q1_148_Decoder;
architecture Behavioral of HW3Q1_148_Decoder is
begin
A <= "111" when EI='1' else
"111" when EI&Input="011111111" else
"000" when EI&Input="011111110" else
"001" when EI&Input="011111101" else
"010" when EI&Input="011111011" else
"011" when EI&Input="011110111" else
"100" when EI&Input="011101111" else
"101" when EI&Input="011011111" else
"110" when EI&Input="010111111" else
"111";
EO <= '0' when EI='0' and Input="11111111" else
'1';
GS <= '1' when EI='1' or Input="11111111" else
'0';
end Behavioral;
Viktor2312, вы я так понял делаете связку типа:
кнопка(9..0) -> блок антидребезга(9..0) -> приоритетный шифратор(10 to 4) ИВ1 -> синхронный регистр хранения (4 bit) ИР16 -> дешифратор (4 to 10) ИД1 -> блок реле(9..10) с индикацией
Уже и не спрашиваю наф вам для этого FPGA а не CPLD и МК :)
Тогда Евгений прав - необходимости в 10 модулях антидребезга нет совсем, достаточно одного.
Нет - создаём сигнал который ORится со всеми кнопками, к нему применяем антидребезг, а потом выход антидребезга ORим с каждой кнопкой отдельно.
---------- Post added at 13:56 ---------- Previous post was at 13:24 ----------
Хотя нет - немножко неправильно - нужно подумать )
---------- Post added at 14:10 ---------- Previous post was at 13:56 ----------
примерно так:
1. создаём сигнал any_key который регистрирует факт нажатия любой кнопки - т.е. функция OR ко всем входам.
2. когда any_key = '1' запускаем счётчик (до 256 например)
3. вход каждой кнопки подключен к S-входу RS тригерра (у каждой кнопки свой триггер)
4. все R входы триггеров соединены с инвертированным выходом счётчика.
выигрыш в том что счётчик один а не десять, что значительно уменьшит занимаемые ресурсы.
Вроде должно работать )