VHDL 中的问题:即使未按下按钮也显示 led tratrix
Problem in VHDL: led tratrix displayed even button wasn't pressed
抱歉标题不清楚,因为我不知道如何用一句话描述它。
这是我的问题,我正在尝试使用 altera EPM240T100 套件制作一个 8x8 的 LED 矩阵,它通过 UART 显示文本。
当文本传输到 altera 套件时,有一个按钮可以激活 LED 矩阵。按钮与LED相连,当按下按钮时,LED将处于ON状态。但这是我的问题,在套件编程后,即使按钮尚未按下,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 矩阵都不起作用。
所以谁能解决这个问题?
如果由于我的英语不好而有不清楚的地方,请提问。
谢谢。
我明白我的问题发生的原因了。根据仿真结果,我看到我的信号在第一个时钟周期处于高电平状态导致意外结果。
抱歉标题不清楚,因为我不知道如何用一句话描述它。
这是我的问题,我正在尝试使用 altera EPM240T100 套件制作一个 8x8 的 LED 矩阵,它通过 UART 显示文本。
当文本传输到 altera 套件时,有一个按钮可以激活 LED 矩阵。按钮与LED相连,当按下按钮时,LED将处于ON状态。但这是我的问题,在套件编程后,即使按钮尚未按下,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 矩阵都不起作用。
所以谁能解决这个问题? 如果由于我的英语不好而有不清楚的地方,请提问。 谢谢。
我明白我的问题发生的原因了。根据仿真结果,我看到我的信号在第一个时钟周期处于高电平状态导致意外结果。