Vhdl 如何检查if语句中输出信号的状态
我试图检查输出的条件(可以在代码后面进行设置),但您似乎无法做到这一点 如何检查if语句中输出信号的状态Vhdl 如何检查if语句中输出信号的状态,vhdl,Vhdl,我试图检查输出的条件(可以在代码后面进行设置),但您似乎无法做到这一点 如何检查if语句中输出信号的状态 entity turbine_action is Port ( freq550 : in STD_LOGIC; freq650 : in STD_LOGIC; freq850 : in STD_LOGIC; freq950 : in STD_LOGIC; user_ip : in STD_LOGIC; mild
entity turbine_action is
Port ( freq550 : in STD_LOGIC;
freq650 : in STD_LOGIC;
freq850 : in STD_LOGIC;
freq950 : in STD_LOGIC;
user_ip : in STD_LOGIC;
mild : out STD_LOGIC;
aggressive : out STD_LOGIC;
brake : out STD_LOGIC;
alarm : out STD_LOGIC;
clock : in STD_LOGIC);
end turbine_action;
architecture Behavioral of turbine_action is
type state_type is (s0, s1, s2);
signal current_s, next_s : state_type;
begin
process (clock)
begin
if (rising_edge(clock)) then
current_s <= next_s; --change state according to next state logic
end if;
end process;
process (current_s, freq550, freq650, freq850, freq950, user_ip)
begin
case current_s is
when s0 =>
if (user_ip = '1') then
if (freq550 = '1') then
brake <= '1';
alarm <= '1';
-- ADD DELAY delay(1000);
end if;
if (freq650 = '1') then
if (mild = '1') then
aggressive <= '1';
end if;
end if;
end Behavioral;
实体涡轮机的动作是
端口(freq550:标准_逻辑中;
freq650:标准逻辑中;
freq850:标准逻辑中;
freq950:标准逻辑中;
用户ip:在标准逻辑中;
轻度:不符合标准逻辑;
攻击性:输出标准逻辑;
制动器:输出标准_逻辑;
报警:输出标准逻辑;
时钟:标准逻辑);
末端涡轮增压器动作;
涡轮机的行为架构是
类型状态_类型为(s0、s1、s2);
信号电流,下一个:状态类型;
开始
进程(时钟)
开始
如果(上升沿(时钟)),则
当前的
如果(用户ip='1'),则
如果(freq550='1'),则
制动假设您将使用以下方法:
alarm : out STD_LOGIC;
您可以将其定义为输入输出信号:
alarm : inout STD_LOGIC;
或者您可以将其与信号连接(假设您定义了std_逻辑信号):
早期版本的VHDL编译器中不允许读取输出的本地信号。解决办法是制作一个你在任何地方都能使用的本地信号。你也可以读到。然后在一个地方将本地信号分配给输出。或者,您可以查看是否有权访问较新的VHDL编译器。由于过于复杂而无法在注释中解释,请不要将输出设置为buf
类型。理论上这是可能的。实际上,任何有经验的人都学会了不这样做。A包括一个复制特定错误的完整示例。这缺少一个完整的case语句、if语句和问题中错误所在的过程以及上下文子句。问题是重复的(搜索词[vhdl]“无法读取输出”),例如,使用显示的解决方案。Oldfart的模式buffer
在历史上缺乏广泛的综合供应商工具支持,而in-2008模式out
提供了与模式buffer
相同的语义,可以对进行评估。这是否回答了您的问题?
local_signal <= alarm;