我需要在时钟变低时设置输出数据而不是下一个rising_edge,我已修改代码以这种方式工作,但是我发出了这样的警告:
时钟寄存器空连接到常量 寄存器上的时钟完全连接到常量
这是代码:
elsif rising_edge(Clock) then
if (Head = Tail) then
if Looped then
FullVar := '1';
else
EmptyVar := '1';
end if;
else
EmptyVar := '0';
FullVar := '0';
end if;
else
Full <= FullVar;
Empty <= EmptyVar;
end if;
end process;
为了消除此警告,我以这种方式修改了代码:
elsif rising_edge(Clock) then
if (Head = Tail) then
if Looped then
FullVar := '1';
else
EmptyVar := '1';
end if;
else
EmptyVar := '0';
FullVar := '0';
end if;
end if;
Full <= FullVar;
Empty <= EmptyVar;
end process;
但是当我编译代码并模拟我在标志被断言之前有更高的延迟时(在没有警告的情况下纠正的代码中)。这是为什么?此外,代码有效,但是正确的这种类型的代码或数据应该在rising_edge时始终更新?
答案 0 :(得分:0)
是的,你应该总是使用rising_edge(时钟),除非你真的&#39;需要第二个时钟域。在您的情况下,您不需要第二个时钟域。
在您的示例中也没有理由使用变量。如果Head等于Tail并且循环为&#39; 1&#39;以下代码将在时钟的rising_edge之后引发Empty。在上升之前。
check : process (Clock)
if rising_edge(Clock) then
if Head = Tail then
if Looped then
Full <= '1';
else
Empty <= '1';
end if;
else
Empty <= '0';
Full <= '0';
end if;
end if;
end process;
如果你想在上升边缘前进行空加注,你应该这样组合,如下:
check : process (Head,Tail,Looped)
Empty <= '0';
Full <= '0';
if Head = Tail then
if Looped then
Full <= '1';
else
Empty <= '1';
end if;
end process;
我希望这会有所帮助。