在 VHDL 中,如果信号不是时钟,我可以使用信号事件吗?

In VHDL, Can I use signal'event if signal is not a clock?

我正在尝试清理我的 VHDL 代码。我有一个不是 clk 的信号。

我可以像下面这样写一个事件变化监视器吗?我如何让它编译以便合成? (见代码)我尝试了几种排列,但无法编译。如果信号不是 CLK,信号事件是否会编译?如果是,它是如何完成的?我在网络和其他文献中看到它可以完成,但我看到的所有示例都显示了 CLK'事件。

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;

我得到以下和其他 : 无法合成包含孤立的“EVENT”预定义属性的条件

rising_edge(CLK) 已经是一个事件,让你的设计同步,这很好。正如评论中所说,只有时钟信号应该使用它。
即使在那个时候看另一个在同步设计中也没有意义,因为 2 个信号不会完全同时改变,从而产生竞争条件。或者实际上是时钟中的时钟,以及综合错误...
它可能在模拟中有效,但不要依赖于那个事实。

用 HDL 语言编程的正常方法是在同一时钟(例如 cntr_d <= cntr)上保存信号的先前值并与该先前值进行比较。这允许查找信号是否上升(之前为 0,当前为 1)、下降、改变(不同)...
而且该方法非常适合合成!