Проблема в VHDL: светодиодная тратриса отображается, даже если кнопка не была нажата - PullRequest
0 голосов
/ 22 апреля 2019

Извините за непонятный заголовок, потому что я не знаю, как описать это в одном предложении.

Это моя проблема, я пытаюсь сделать светодиодную матрицу 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', и светодиод и матрица светодиодов не работают.

Так может кто-нибудь решить эту проблему? Если что-то неясно из-за моего плохого английского, пожалуйста, задавайте вопросы. Спасибо.

1 Ответ

0 голосов
/ 29 апреля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...