在VHDL中,如果信号不是时钟,是否可以使用signal'event?

时间:2019-06-01 20:00:31

标签: events vhdl

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

我可以编写如下的事件更改监视器吗?如何对其进行编译以便可以进行综合? (请参见代码)我尝试了几种排列方式,但无法对其进行编译。如果信号不是CLK,signal'event是否会编译,如果不是,它将如何完成?我在网上和其他文献中看到可以做到这一点,但是我看到的所有示例都显示了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;

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

1 个答案:

答案 0 :(得分:0)

rising_edge(CLK)已经是一个大事,可以使您的设计同步,这很好。如评论中所述,仅时钟信号应使用该信号。
在同步设计中,即使在那个时候也看不到另一个,因为两个信号不会在同一时间完全改变,从而产生了竞争状态。或者实际上是一个时钟内的一个时钟,以及综合错误...
它可以在模拟中工作,但不必依赖于这一事实。

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