请教:关于process中语句执行问题
时间:10-02
整理:3721RD
点击:
这有段程序代码:
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_arith.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY runtime IS
PORT(
clk:in std_logic;
node0,point0:in std_logic;
node1,node2,point1,point2:buffer std_logic;
node3,point3ut std_logic
);
end runtime;
ARCHITECTURE rtl OF runtime IS
begin
process(node0)
begin
node1<=node0;
node2<=node1;
node3<=node2;
end process;
process(clk)
begin
if rising_edge(clk) then
point1<=point0;
point2<=point1;
point3<=point2;
end if;
end process;
end rtl;
在关于node0的那个进程中,通过仿真结果发现,node0,node1,node2,node3的变化几乎是同步的,虽然在process中,它们的赋值语句是顺序执行的。而在point0的那个进程中,point3,point2,point1,point0前者总比前者晚一个时钟周期。我猜想从上电后这个进程执行过程是这样的:第一个时钟来时,执行point1<=point0;第二个时钟来时,执行:point1<=point0; point2<=point1;第三个时钟来时,执行: point1<=point0; point2<=point1; point3<=point2;以后就三条语句都开始了。那么这样来看的话,是不是执行这种由时钟控制的进程中语句时,执行一条语句需要一个时钟周期?
还请赐教。
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_arith.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY runtime IS
PORT(
clk:in std_logic;
node0,point0:in std_logic;
node1,node2,point1,point2:buffer std_logic;
node3,point3ut std_logic
);
end runtime;
ARCHITECTURE rtl OF runtime IS
begin
process(node0)
begin
node1<=node0;
node2<=node1;
node3<=node2;
end process;
process(clk)
begin
if rising_edge(clk) then
point1<=point0;
point2<=point1;
point3<=point2;
end if;
end process;
end rtl;
在关于node0的那个进程中,通过仿真结果发现,node0,node1,node2,node3的变化几乎是同步的,虽然在process中,它们的赋值语句是顺序执行的。而在point0的那个进程中,point3,point2,point1,point0前者总比前者晚一个时钟周期。我猜想从上电后这个进程执行过程是这样的:第一个时钟来时,执行point1<=point0;第二个时钟来时,执行:point1<=point0; point2<=point1;第三个时钟来时,执行: point1<=point0; point2<=point1; point3<=point2;以后就三条语句都开始了。那么这样来看的话,是不是执行这种由时钟控制的进程中语句时,执行一条语句需要一个时钟周期?
还请赐教。
node3,point3: out std_logic
就应该是这样呀,仿真结果没错呀!
仿真结果应该正确。再补充下:由于有node0的process中没有时钟控制,所以即使是顺序执行,效果也几乎是瞬时的。我想请教的是,我对两个进程结果的解释对不对?
