在过程内分配信号与分配实际输出之间的区别

时间:2017-02-20 00:05:56

标签: process vhdl fpga digital

因此,通过我自己的研究,我了解如果我们在流程中分配信号,它将在流程后更新。现在,如果我们直接为输出分配一个值,它还会在进程后更新吗? 我附上两个版本作为一个简单的例子来证明我的意思。

版本1:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity testing is
port(
    clk : in std_logic;
    a   : in std_logic;
    b   : in std_logic;
    c   : out std_logic
);

end testing;

architecture arch of testing is

signal temp: std_logic;

begin

process(clk)

begin

    if(rising_edge(clk)) then

        if(a = '1' and b = '1') then

            temp <= '1'

        end if;

    end if;

end process;

c <= temp;

end arch;

现在是另一个版本:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity testing is
port(
    clk : in std_logic;
    a   : in std_logic;
    b   : in std_logic;
    c   : out std_logic
);

end testing;

architecture arch of Intermediate is

begin

process(clk)

begin

    if(rising_edge(clk)) then

        if(a = '1' and b = '1') then

            C <= '1';

        end if;

    end if;

end process;

end arch;

这里有时差吗?与第一个版本相比,第二个版本的C会更快出现吗?

3 个答案:

答案 0 :(得分:1)

首先,以下内容并不完全正确,但对大多数RTL流程来说都是正确的:

  

进程内的信号直到进程后才会更新   饰面

实际规则是:

  

直到下一个增量周期才会更新信号。

WRT一个进程,一个进程不允许delta循环通过,除非进程暂停等待或退出并暂停在敏感列表中。大多数RTL进程都有敏感列表或顶部只有一个等待语句,因此,对于RTL代码,我们到达你的&#34;不是真的&#34;。

WRT到你的C:

c <= temp;

该分配中仍有一个增量循环。如果有帮助,该语言通过以下转换定义并发分配的执行:

process (temp) is
begin
  c <= temp;
end process ; 

这将帮助您了解WRT您的简单RTL规则发生了什么。

答案 1 :(得分:0)

与第一个示例相比,第二个示例中将稍早(稍微)分配

C。此外,使用的资源更少,因为在第二个示例中没有中间寄存器(temp)。

在第一个示例中,temp将在时钟的下降沿分配,C是并发分配(即。temp更改后C } 变化)。但是,实际上,由于信号传播,temp更改后,此分配会在“少量时间”内发生。

在第二个示例中,您将直接分配给C,这将发生在时钟下降沿。

我知道你提供的例子有点人为,但你可以通过以下方式实现:

process(clk)
begin
    if rising_edge(clk) then
        c <= a and b;
    end if;
end process;

答案 2 :(得分:0)

模拟循环恢复每个执行过程的过程,直到等待暂停。当前时间的其他事件导致增量周期,否则模拟时间前进到下一个调度事件。模拟周期一直持续到事件发生或停止。

并发语句具有等效的详细过程或块和过程。精心设计的层次结构是通过信号事件进行通信的过程集合。

由于连续的信号分配没有中间延迟,

c可以在第一个例子中出现一个增量循环。 Delta周期不消耗simulation time,而是为顺序语句产生并发性。

版本1具有来自并发信号赋值语句的第二个进程,并使用附加信号,表示模型的更多执行时间并使用更多资源。版本1本身并不代表重大负担。在大量此类进程或大量事件中,可以测量模型执行时间和内存利用率的差异。

您通常会看到中间信号,除了驱动端口之外,还会在本地评估信号值。您不能读取模式输出的接口信号的值。 (设计单元是独立分析的,实际有效值的位置在分析时是未知的。实际情况与详细说明有关。端口代表端口关联中的形式。)

参见IEEE Std 1076-2008,11。并发语句10.5.2简单信号赋值语句; 10.2等待陈述; 14.详细说明和执行;特别是14.5阐述声明部分和14.5.5其他并发声明; 14.7执行模型,特别是14.7.5模型执行; 6.5.2接口对象声明; 6.5.7.3港口地图方面; 14.3.5端口映射方面。