vhdl中进程语句的顺序执行

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信号分

对于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信号分配是排队的事件,请参阅注释中的链接。所以在评估之后,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;