【发布时间】:2018-05-04 07:50:59
【问题描述】:
目前,我正在使用 VHDL 开发停车场系统。
目标很简单。停车时,它会查看所有可用位置并输出下一个空闲位置。看起来很简单,但我在让它正常工作时遇到了一些问题。
我正在使用板上的开关并检测开关何时打开。这表示天气是否有车停在那里。
目标是我可以点击例如开关 1、开关 2 和开关 4,直到输出 3 作为可用位置。然后,如果我打开 3,它会重新计算并说 5 是下一个可用位置。
为了实现这一点,我使用了一堆 if else 语句,但发生的情况是,例如,如果我按下 #4 开关,它会正确显示 5,但是一旦我按下 #5 开关,它将继续显示 5 作为下一个可用位置,而不是 6。
我认为我的问题是我没有足够的条件来涵盖所有场景。有没有办法让我用更短的方式写这个?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Priority is
port(
SWITCH: in std_logic_vector (8 downto 0);
H1: out std_logic_vector (3 downto 0);
H2: out std_logic_vector (3 downto 0);
H3: out std_logic_vector (3 downto 0);
H4: out std_logic_vector (3 downto 0)
);
end Priority;
architecture Behavioral of Priority is
begin
process (SWITCH)
begin
if (SWITCH(0) = '1' AND SWITCH(1) = '1' AND SWITCH(2) = '1' AND SWITCH(3) = '1' AND SWITCH(4) = '1' AND SWITCH(5) = '1' AND SWITCH(6) = '1' AND SWITCH(7) = '1') then --if all switches are on, display "FULL"
H1 <= "1100";
H2 <= "1100";
H3 <= "1011";
H4 <= "1010";
elsif SWITCH(0) = '1' then --if switch 0 is turned on, show "PS-1"
H1 <= "1101";
H2 <= "1110";
H3 <= "1111";
H4 <= "0010";
elsif SWITCH(1) = '1' then --if switch 1 is turned on, show "PS-2"
H1 <= "1101";
H2 <= "1110";
H3 <= "1111";
H4 <= "0011";
elsif SWITCH(2) = '1' then
H1 <= "1101";
H2 <= "1110";
H3 <= "1111";
H4 <= "0100";
elsif SWITCH(3) = '1' then
H1 <= "1101";
H2 <= "1110";
H3 <= "1111";
H4 <= "0101";
elsif SWITCH(4) = '1' then
H1 <= "1101";
H2 <= "1110";
H3 <= "1111";
H4 <= "0110";
elsif SWITCH(5) = '1' then
H1 <= "1101";
H2 <= "1110";
H3 <= "1111";
H4 <= "0111";
elsif SWITCH(6) = '1' then
H1 <= "1101";
H2 <= "1110";
H3 <= "1111";
H4 <= "1000";
elsif SWITCH(7) = '1' then
H1 <= "1101";
H2 <= "1110";
H3 <= "1111";
H4 <= "0001";
end if;
--end if;
end process;
end Behavioral;
【问题讨论】:
-
您的代码中没有算术运算,那么为什么要包含非标准化包
STD_LOGIC_ARITH和STD_LOGIC_UNSIGNED?你应该删除它们。如果您决定添加算术,请使用标准化包numeric_std。 -
我还有其他使用这些软件包的 vhdl 代码,所以为了安全起见,我将它们包括在内。我不需要这样做吗?即使我将它们与顶级文件连接起来,每个 vhdl 文件是否都是单独的?
-
您的读者如何理解 ...显示 5 作为下一个可用位置,而不是 6 就您的代码而言? H1 - H4 是什么意思?你模拟过吗?
-
H1 - H4 是我板上的四个七段显示器。我正在做的是,例如,如果 #one spot ,板将显示 PS-1 如果它已满,板将在板上的七段显示器中显示 FULL。