Как получить множественный ввод от пользователя VHDL

Я хочу прочитать 6-значный номер от пользователя через клавиатуру, которая подключена к контактам GPIO платы FPGA. это часть моего кода:

signal kp_value :std_logic_vector( 3 downto 0);
signal kp_hit : std_logic ; 
type arr is array (23 downto 0) of std_logic_vector;    
signal num1 : arr; 
begin 
keypad_getInput: keypad port map(row, clk_50 , col , kp_hit, kp_value);


process(kp_hit)
begin 

if kp_hit ='1' then 

    num1 <= num1 & kp_value;
end if ;
end process;
seg_display: seven_segments port map(num1,sevenseg); 

Я хочу продолжать получать номер от пользователя, пока он не достигнет 24 бит, а затем отобразит его на шести из 7 сегментов.

У меня есть ошибки, возможно, неправильный способ хранения значений, не могли бы вы мне помочь


person D.k    schedule 13.04.2019    source источник
comment
«У меня есть ошибки» — какие ошибки вы получаете?   -  person pm101    schedule 15.04.2019


Ответы (1)


Вероятно, вам не хватает битов, которые вы не хотите оставлять в num, я полагаю, вы хотите сдвинуться влево

num1 <= num1(19 downto 0) & kp_value;
person pm101    schedule 15.04.2019
comment
не могли бы вы объяснить, что именно делает эта строка? Я имею в виду, какое значение будет храниться в num1 (от 19 до 0)? - person D.k; 15.04.2019
comment
Значение, хранящееся в num(19 downto 0), хранит предыдущие пять нажатий клавиш. Результат присваивания поместит последнее нажатие клавиши в младшие 4 бита числа. При сохранении предыдущих пяти. - person pm101; 16.04.2019
comment
если я нажму клавишу 1, она поместит ее в младшие 4 бита, а затем для второй клавиши она нажмет предыдущую и сохранит новую клавишу в младших 4 битах? только из этого утверждения? - person D.k; 16.04.2019
comment
Да ну типа: напр. (если 8-бит, то есть в этом случае «число» хранит только два ключа) (1.) Предыдущее состояние «числа»: 00001111 (2.) Пользователь нажимает клавишу 1001 (3.) Следующее состояние «числа» будет: 11111001 (4.) Пользователь нажимает клавишу 0011 (5.) Следующим состоянием «числа» будет: 10010011 - person pm101; 16.04.2019