vhdl中进程语句的顺序执行
对于vhdl中的process语句,据说process语句内部的执行顺序是顺序的。我的问题是,请先看下面的代码,在进程语句中的if语句中,a、b和c信号是否同时或顺序地分配给它们的新值vhdl中进程语句的顺序执行,vhdl,Vhdl,对于vhdl中的process语句,据说process语句内部的执行顺序是顺序的。我的问题是,请先看下面的代码,在进程语句中的if语句中,a、b和c信号是否同时或顺序地分配给它们的新值 process(clk) is begin if rising_edge(clk) then a <= b ; b <= c ; c <= a; end if; end process; 过程(clk)是 开始 如果上升沿(clk),则 a信号分
process(clk) is
begin
if rising_edge(clk) then
a <= b ;
b <= c ;
c <= a;
end if;
end process;
过程(clk)是
开始
如果上升沿(clk),则
a信号分配是排队的事件,请参阅注释中的链接。所以在评估之后,a(新)=b(旧),b(新)=c(旧),c(新)=a(旧)
如果您确实想要顺序赋值,您可以使用变量(但最好不要使用,因为您很容易出错)
过程(clk)是
变量i_a,i_b,i_c:[某些类型];
开始
如果上升沿(clk),则
--用信号值初始化
i_a:=a;
i_b:=b;
i_c:=c;
---修改
i_a:=i_b;
i_b:=i_c;
i_c:=i_a;
--写回信号
a构建一个包含您的流程的最小、完整且可验证的示例:
library ieee;
use ieee.std_logic_1164.all;
entity sequent_exec is
end entity;
architecture foo of sequent_exec is
signal a: std_ulogic := '1';
signal b, c: std_ulogic := '0';
signal clk: std_ulogic := '0';
begin
CLOCK:
process
begin
wait for 10 ns;
clk <= not clk;
if now > 200 ns then
wait;
end if;
end process;
DUT:
process(clk) is
begin
if rising_edge(clk) then
a <= b ;
b <= c ;
c <= a;
end if;
end process;
end architecture;
ieee库;
使用ieee.std_logic_1164.all;
实体序列_exec为
终端实体;
后续执行的架构foo是
信号a:std_ulogic:=“1”;
信号b、c:std_ulogic:=“0”;
信号时钟:标准逻辑:='0';
开始
时钟:
过程
开始
等待10纳秒;
时钟200纳秒
等待
如果结束;
结束过程;
DUT:
过程(clk)是
开始
如果上升沿(clk),则
a你会找到解释的开始
library ieee;
use ieee.std_logic_1164.all;
entity sequent_exec is
end entity;
architecture foo of sequent_exec is
signal a: std_ulogic := '1';
signal b, c: std_ulogic := '0';
signal clk: std_ulogic := '0';
begin
CLOCK:
process
begin
wait for 10 ns;
clk <= not clk;
if now > 200 ns then
wait;
end if;
end process;
DUT:
process(clk) is
begin
if rising_edge(clk) then
a <= b ;
b <= c ;
c <= a;
end if;
end process;
end architecture;