如果我在VHDL过程中编写声明来指定a为+ 1,那么这是一个好习惯吗?
我对此感到困惑,因为模拟器工作正常,但当我尝试在FPGA中实现它时,综合工具抱怨创建锁存器。
这是什么意思?
答案 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型触发器的时钟。