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



我正在尝试清理我的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(、下降、更改(不同(......
这种方法非常适合合成!

相关内容

最新更新