Извините за непонятный заголовок, потому что я не знаю, как описать это в одном предложении.
Это моя проблема, я пытаюсь сделать светодиодную матрицу 8х8 с набором altera EPM240T100, который отображает текст через UART.
Когда текст передается в Altera Kit, появляется кнопка активной светодиодной матрицы. Кнопка связана со светодиодом, когда кнопка нажата, светодиод будет включен. Но это моя проблема, после того, как комплект был запрограммирован, светодиодная матрица отображалась сразу, даже когда кнопка еще не нажата. И светодиод, он активен только когда я нажимаю кнопку. Я думаю, что запутался в состоянии кнопки и попытался изменить состояние кнопки с button = '1'
на button = '0'
, но ничего не изменилось, за исключением того, что состояние светодиода перевернуто.
Мой код показывается следующим образом:
library IEEE;
library giang;
use giang.define.all;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity UART_arr is
Port( Clk : in std_logic;
button: in std_logic;
led: out std_logic;
input: in std_logic;
output: out std_logic;
msg_input: out msg);
end UART_arr;
architecture Behavioral of UART_arr is
component UART_RX is
Port( Clk: in std_logic;
RX : in std_logic;
data_out : out std_logic_vector(7 downto 0);
RX_done : out std_logic
);
end component;
component UART_TX is
Port( Clk: in std_logic;
TX_En : in std_logic;
data_in : in std_logic_vector(7 downto 0);
TX : out std_logic
);
end component;
signal msg_buff: msg := (others=>"00000000");
signal rx_byte,tx_byte : std_logic_vector(7 downto 0) := (others => '0');
signal rx_done,tx_en : std_logic := '0';
signal i: integer range 0 to 32 := 0;
signal led_t: std_logic := '1';
begin
RX: UART_RX port map (Clk,input,rx_byte,rx_done);
TX: UART_TX port map (Clk,tx_en,tx_byte,output);
button_check: process(button)
begin
if button = '0' then
led_t <= '0';
msg_buff(1) <= "01100001";
msg_input <= msg_buff;
else
led_t <= '1';
end if;
end process;
led <= led_t;
Это только часть моего кода, и это еще не сделано. Есть некоторые типы данных, которые я определил в другом пакете:
type msg is array (1 to max_char) of std_logic_vector(7 downto 0);
И еще одна вещь, когда я удаляю строку кода else led_t <= '1'
, и светодиод и матрица светодиодов не работают.
Так может кто-нибудь решить эту проблему?
Если что-то неясно из-за моего плохого английского, пожалуйста, задавайте вопросы.
Спасибо.