我正在经历第二次或第三次学习VHDL的阶段。 (这次装备非常好,免费e-book),我终于开始“获得”相当多。现在我正在学习行为风格和过程声明,其中大部分都是合理的。但是,我读过很多地方,除了某些情况下,应避免进程。我的意思是,理论上不能将所有事情都用数据流而不是行为来实现?在VHDL中何时适合使用Process语句?
何时应该明确应该使用过程语句?
我正在经历第二次或第三次学习VHDL的阶段。 (这次装备非常好,免费e-book),我终于开始“获得”相当多。现在我正在学习行为风格和过程声明,其中大部分都是合理的。但是,我读过很多地方,除了某些情况下,应避免进程。我的意思是,理论上不能将所有事情都用数据流而不是行为来实现?在VHDL中何时适合使用Process语句?
何时应该明确应该使用过程语句?
在可合成代码中,任何时候需要将进程从一个时钟周期保存到另一个时钟周期时,需要进程。 “用行话存储状态”。
(注意,一个过程可以通过这样的代码
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;
我的大多数代码每个实体都有一个进程。每个实体都会执行一些有用的,定义明确的和足够小的可测试任务
进程语句非常有用,在什么情况下,您被告知不使用它们?
有许多不同的情况下,你可以使用一个过程声明,我将概述其中的几个如下:
一(合成)过程叙述中最常见的用法是描述其中的逻辑是同步的时钟信号,例如一个简单的计数器递增每一个时钟周期时不复位可以被描述为:作为您的设计越来越复杂,你将不可避免地在某种程度上实现状态机
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;
,这将使用一个或多个进程,具体取决于您选择实现的状态机的风格。
对于behavorial代码,您可以结合等待语句使用进程生成测试向量或模拟真实系统的行为。下面是从我的测试平台中获取的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;
希望你能看到进程语句是非常有用的,你会在很多不同的情况下使用它。我希望这回答你的问题!
过程块是你的朋友。
它们提供了一种说法:“这段代码是相关的,它的输入是X,Y,Z,它驱动A,B,C”。输入由灵敏度列表记录(除非它是一个计时过程,在这种情况下它应该在您的评论中)。如果其他东西驱动相同的信号,那么你会得到警告,错误,模拟中的X(取决于你的工具)。无论你得到什么,这都很明显。
就个人而言,我会很高兴在单个实体中编写多个进程,但每个人都有自己的风格。例如,如果我有多个流水线阶段,每个阶段都是一个流程。如果我有平行的非干涉路径,每个路径都将处于一个单独的过程中。通过这样做,代码被构造成小而易读的块。小的简单逻辑综合成小的快速块(一般来说)。
您可以将我的风格视为轻量级实体。
你在哪里读过应该避免的过程?他们几乎是根本的恕我直言! – 2012-04-19 15:55:36
@MartinThompson不一定避免,但容易被滥用,我猜?熟悉传统编程的人们倾向于使用过程语句,因为它提供了几乎程序化的东西 – Earlz 2012-04-19 16:15:28