有一点需要注意,下面以一个状态机为例进行说明。
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_signed.all;
entity statem is port (
clk : in std_logic;
rst : in std_logic;
selin : in std_logic;
num : out std_logic_vector (1 downto 0)
); end statem;
architecture alg of statem is
Type mystate is (st0,st1,st2,st3);
signal current_state,next_state : mystate;
begin
sync:process(clk,rst)
begin
if (rst = '1')then
current_state <= st0;
elsif (clk'event and clk = '1')then
current_state <= next_state;
end if;
end process sync;
nex:process(clk,selin)
begin
if(clk'event and clk = '1') then
case current_state is when st0 => if(selin = '1') then
&nbs

本文通过一个VHDL状态机的例子,解释了在时钟边沿触发的进程中,信号值的变化会有一个周期的延迟。当时钟上升沿到来时,当前状态的更新会发生在下一个时钟周期,导致输出在第二个时钟周期后才会反映出状态变化。这与C语言的即时执行特性不同,强调了VHDL中信号的延迟特性和锁存行为。
最低0.47元/天 解锁文章
6337

被折叠的 条评论
为什么被折叠?



