在VHDL中,< = a + 1是一个好习惯吗?

时间:2013-03-12 21:57:12

标签: hardware vhdl xilinx hdl modelsim

如果我在VHDL过程中编写声明来指定a为+ 1,那么这是一个好习惯吗?

我对此感到困惑,因为模拟器工作正常,但当我尝试在FPGA中实现它时,综合工具抱怨创建锁存器。

这是什么意思?

3 个答案:

答案 0 :(得分:7)

你应该只在一个定时的过程中做这样的陈述。如果你想让它合成,建议进行额外的初始化(重置)。可能如下所示:

process(clk, reset)
begin
   if reset='1' then
      a <= 0;
   elsif rising_edge(clk) then
      a <= a + 1;
   end if;
end process;

答案 1 :(得分:5)

在计时过程中,这很好。其他地方,可能不是。

答案 2 :(得分:3)

在计时过程中进行,这很好。这意味着&#34; a的下一个值应该是a + 1&#34;

的当前值

如果你是连续作业(在任何过程之外),你所说的是&#34; a总是得到一个+ 1分配给它&#34;这是一个自我指涉的循环!

如果在启用的流程的敏感度列表中包含a,则会获得相同的效果

process (en, a)
begin
   if en = '1' then 
      a <= a + 1;
   end if;
end process;

(您可以使用此表单创建透明锁存器:

process (en, insig)
begin
   if en = '1' then 
      a <= insig;
   end if;
end process;


如果您是在非时钟进程中执行此操作, a 敏感

process (en)
begin
   if en = '1' then 
      a <= a + 1;
   end if;
end process;

您将创建一个正边沿触发锁存器,因为a需要在en的更改之间保持其值。实际上,en成为d型触发器的时钟。