如何在VHDL中制作启动过程
How to make startup process in VHDL
如何制作开机只执行一次的进程?
很容易制作一个按下reset按钮时执行的进程,但是如何制作运行当你插入电源而不触摸reset按钮时呢?
在我的示例中,我想在启动时初始化 LCD,并且我需要在开始时向它发送一些命令,但在依赖于某些信号(如重置)的过程中我不需要它(假设没有重置按钮)。
只使用没有敏感度列表的等待语句。
process
begin
assignment <= "101";
wait;
end process;
话虽如此,我建议您将其构建为状态机。
状态(第一个运行)存储在单个FF中,用'1'初始化:
signal IsStartup : STD_LOGIC := '1';
没有重置的 FF 进程:
process(clk)
begin
if rising_edge(clk) then
IsStartup <= '0';
end if;
end process;
用法示例(FSM):
process(clk)
begin
if rising_edge(clk) then
if (Reset = '1') then
State <= ST_RESET;
else
State <= NextState;
end if;
end if;
end process;
process(State, IsStartup)
begin
NextState <= State;
case State is
when ST_RESET =>
if (IsStartup = '1') then
NextState <= ST_STARTUP;
else
NextState <= ST_IDLE;
end if;
-- ...
end case;
end process;
如何制作开机只执行一次的进程?
很容易制作一个按下reset按钮时执行的进程,但是如何制作运行当你插入电源而不触摸reset按钮时呢?
在我的示例中,我想在启动时初始化 LCD,并且我需要在开始时向它发送一些命令,但在依赖于某些信号(如重置)的过程中我不需要它(假设没有重置按钮)。
只使用没有敏感度列表的等待语句。
process
begin
assignment <= "101";
wait;
end process;
话虽如此,我建议您将其构建为状态机。
状态(第一个运行)存储在单个FF中,用'1'初始化:
signal IsStartup : STD_LOGIC := '1';
没有重置的 FF 进程:
process(clk)
begin
if rising_edge(clk) then
IsStartup <= '0';
end if;
end process;
用法示例(FSM):
process(clk)
begin
if rising_edge(clk) then
if (Reset = '1') then
State <= ST_RESET;
else
State <= NextState;
end if;
end if;
end process;
process(State, IsStartup)
begin
NextState <= State;
case State is
when ST_RESET =>
if (IsStartup = '1') then
NextState <= ST_STARTUP;
else
NextState <= ST_IDLE;
end if;
-- ...
end case;
end process;