在VHDL中,何时才是使用Process语句的正确时间?

问题描述 投票:1回答:4

我现在正在第二或第三次学习VHDL。 (这次装备了非常好的免费软件e-book),我终于开始大量地“获取”它了。现在,我正在学习有关行为风格和流程陈述的知识,并且其中大部分是有意义的。但是,我在许多地方都读到,除某些情况外,应避免使用流程。我的意思是,从理论上讲,不是所有事情都可以在数据流中实现而不是在行为上实现吗?

什么时候应该明显使用流程说明?

vhdl hdl
4个回答
5
投票

该过程语句非常有用,在什么情况下您被告知不要使用它们?

[在很多情况下,您将使用流程语句,下面将概述其中一些:

[过程语句(用于综合)的最常见用法之一是描述与时钟信号同步的逻辑,例如,一个简单的计数器,它在未复位时每个时钟周期都会递增:

DATA_REGISTER : process(CLOCK)
begin
  if rising_edge(CLOCK) then
    if RESET = '1' then
      COUNTER <= (others => '0');
    else
      COUNTER <= COUNTER + 1; --COUNTER is assumed to be of type 'unsigned'
    end if;
  end if;
end process;

随着您的设计变得越来越复杂,您不可避免地会在某个时候实现一个状态机,这将根据您选择实现的状态机的样式采用一个或多个过程。

对于行为代码,您可以将过程与等待语句结合使用,以生成测试向量或为真实系统的行为建模。这是从我的一个测试台上获得的100MHz时钟发生器的一个非常基本的示例:

architecture BEH of ethernet_receive_tb is  
  signal  s_clock : std_logic := '0'; --Initial assignment to clock kicks off the process.
begin
  CLOCKGEN : process(s_clock)
  begin
    s_clock <= not s_clock after 5 NS;
  end process CLOCKGEN;

...

您还可以用过程描述异步逻辑,在这种情况下,您需要将在过程中读取的所有信号都包括在灵敏度列表中,并且需要确保始终定义任何输出以避免推断出的锁存器。

IF_ELSE: process (SEL, A, B)
begin
  F <= B; -- Default assignment
  if SEL = '1' then
    F <= A;
  end if;
end process;

希望您能看到process语句非常有用,并且您将在许多不同的情况下使用它。我希望这能回答您的问题!


3
投票

过程块是您的朋友。

他们提供了一种说法:“此代码块是相关的。它的输入是X,Y,Z,并且驱动A,B,C”。输入由敏感度列表记录(除非这是一个定时的过程,在这种情况下,应在您的注释中)。如果其他任何因素产生相同的信号,那么您将得到警告,错误和X(在仿真中)(取决于您的工具)。无论您得到什么,它都是显而易见的。

我个人很高兴在单个实体中编写多个流程,但是每个人都有自己的风格。例如,如果我有多个管道阶段,则每个阶段都是一个过程。如果我有平行的无干扰路径,则每个路径都将处于单独的过程中。通过这种方式,可以将代码结构化为易于阅读的小块。小型简单逻辑综合为小型快速块(通常)。

您可以将我的样式视为将它们用作轻型实体。


2
投票

在可综合代码中,只要您需要将信息从一个时钟周期保留到另一个时钟周期,就<>。用术语“存储状态”。 ((请注意,诸如以下代码可能暗含一个过程>

d <= q when rising_edge(clk);

如果是不可合成的代码,则流程对于使事件以特定顺序发生是有用的:

p1: process begin data <= "--------"; WE <= '0'; wait until reset = '1'; wait until processor_initialised = '1'; assert ACK = '0' report "ACK should be low!" severity error; data <= X"16"; WE <= '1'; wait until ACK = '1'; end process;


我的大多数代码每个实体只有一个进程。每个实体都执行一些有用的,定义明确的,尚不足以测试的任务

如果其他人来寻找答案,则可以在流程中使用嵌套的“ case”和“ if”语句,但不能在并发语句中使用。

0
投票
如果其他人来寻找答案,则可以在流程中使用嵌套的“ case”和“ if”语句,但不能在并发语句中使用。
© www.soinside.com 2019 - 2024. All rights reserved.