VHDL中的问题:即使未按下按钮,LED tratrix仍显示

时间:2019-04-22 07:01:47

标签: button vhdl intel-fpga

很抱歉标题不清楚,因为我不知道如何用一个句子来形容它。

这是我的问题,我正在尝试使用Altera EPM240T100套件制作一个LED矩阵8x8,该套件通过UART显示文本。   当文本传输到Altera套件时,有一个按钮可以激活LED矩阵。按钮与指示灯链接,当按下按钮时,指示灯将处于开启状态。但这是我的问题,对套件进行编程后,即使尚未按下按钮,LED矩阵也会立即显示。和LED,它只有在我按下按钮时才激活。我认为我对按钮的状态感到困惑,我试图将按钮的状态从button = '1'更改为button = '0',但是除了led的状态反转之外,什么都没有改变。

我的代码如下所示:

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'时,led和led矩阵均无效。

那么有人可以解决这个问题吗? 如果由于我的英语不好而引起不清楚的情况,请提出疑问。 谢谢。

1 个答案:

答案 0 :(得分:0)

我已经想到了为什么我的问题会发生。根据仿真结果,我看到我的信号在第一个时钟周期处于高电平状态,从而导致意外结果。