2015-05-28 2 views
1

Каков наилучший способ выполнить карту порта для каждого бита в векторе? Скажем, у меня есть вектор, представляющий серию кнопок, и вы хотите отбросить каждый из них с помощью модуля bebounce, как мне это сделать?Карта VHDL для каждого бита в векторе

Сейчас у меня есть следующий, но я считаю, что должно быть лучшим способом

entity ButtonDebouncer is 
    Port (
     clock : in std_logic; 
     buttons : in std_logic_vector(0 to 5); 
     --{ more stuff } 
    ); 
end ButtonDebouncer; 

architecture Behavioral of ButtonDebouncer is 
    signal bufferedButtons : std_logic_vector(0 to 5) := (others => '0'); 
begin 
    c1: entity debounce port map (Clock, buttons(0), bufferedButtons(0)); 
    c2: entity debounce port map (Clock, buttons(1), bufferedButtons(1)); 
    c3: entity debounce port map (Clock, buttons(2), bufferedButtons(2)); 
    c4: entity debounce port map (Clock, buttons(3), bufferedButtons(3)); 
    c5: entity debounce port map (Clock, buttons(4), bufferedButtons(4)); 
    c6: entity debounce port map (Clock, buttons(5), bufferedButtons(5)); 

    --{ Do stuff with debounced buttons } 
end Behavioral; 

ответ

2

для генерации будет хороший кандидат построить здесь.

entity ButtonDebouncer is 
    Port (
     clock : in std_logic; 
     buttons : in std_logic_vector(0 to 5); 
     --{ more stuff } 
    ); 
end ButtonDebouncer; 

architecture Behavioral of ButtonDebouncer is 
    signal bufferedButtons : std_logic_vector(0 to 5) := (others => '0'); 
begin 
    debouncers: for i in 0 to 5 generate 
     c1: entity debounce port map (Clock, buttons(i), bufferedButtons(i)); 
    end generate; 
    --{ Do stuff with debounced buttons } 
end Behavioral; 
+2

И вы даже можете заменить '0 до 5' в архитектуре с' buttons'range', чтобы избежать магических жестко закодированных значений и сделать намерение ясно. –

+0

Удивительный, я не знал о «генерации», – Jableader

0

Решение Travis является хорошей отправной точкой.

Я хотел бы сделать еще один шаг и реализовать модуль debounce для нескольких бит. Таким образом, вы можете передать весь вектор кнопки в этот модуль.

entity debounce is 
    generic (
    BITS : POSITIVE 
); 
    port (
    Clock : STD_LOGIC; 
    Input : STD_LOGIC_VECTOR(BITS - 1 downto 0); 
    Output : STD_LOGIC_VECTOR(BITS - 1 downto 0) 
) 
end entity; 

architecture rtl of debounce is 
    -- define 'global' signals here (per instance) 
begin 
    genDebounce : for i in 0 to BITS - 1 generate 
    -- define 'local' signals here (per debounce circuit) 
    begin 
    -- debounce circuit 
    end generate; 
end architecture; 

Использование:

debButtons : entity work.debounce 
    generic map (
    BITS => buttons'length 
) 
    port map (
    Clock => Clock, 
    Input => Buttons, 
    Output => bufferedButtons 
); 
Смежные вопросы