我正在尝试清理我的VHDL代码。我有一个不是 clk 的信号。
我是否可以编写如下所示的事件更改监视器,以及如何对其进行编译以便可以合成?(见代码(我已经尝试了几种排列,但我无法编译它。如果信号不是 CLK,信号事件会编译吗?如果是,它是如何完成的?我在网上和其他文献中看到这是可以做到的,但我看到的所有例子都显示了CLK'event。
signal cntr: unsigned(15 downto 0) := (others => '0');
...
process(CLK):
begin
IF rising_edge(CLK) THEN
if (cntr'event) then
do something;
end if;
or...
if(cntr(0)'event) then
do something;
end if;
END IF;
end process;
我得到以下内容和其他:无法合成包含隔离的"事件预定义属性"的条件
rising_edge(CLK)
已经是一个事件,使您的设计同步,这很好。正如评论中所说,只有时钟信号应该使用它。
在同步设计中,即使在那个时候看另一个信号也没有意义,因为两个信号不会同时完全改变,从而产生竞争条件。或者实际上是时钟中的时钟,以及合成错误......
它可能适用于模拟,但不要依赖这一事实。
用HDL语言编程的正常方法是将信号的先前值保存在相同的时钟上(例如cntr_d <= cntr
(,并与先前的值进行比较。这允许查找信号是否上升(以前为 0,当前为 1(、下降、更改(不同(......
这种方法非常适合合成!