结构环形振荡器VHDL

时间:2018-10-04 13:59:44

标签: vhdl electronics

我遇到以下环形振荡器代码的问题:

entity OSCILLATOR is
    port(   OUTPUT: out std_logic
    );
end entity OSCILLATOR;

architecture structural of OSCILLATOR is

component DEL_INV is
    generic(D: time);   
    port(   INPUT: in std_logic;
            OUTPUT: out std_logic   
        );
end component DEL_INV;

signal conn: std_logic := '0';
signal conn1: std_logic := '1';
signal conn2: std_logic := '0';
signal de: time := 2 ns;

begin
    INV1: DEL_INV generic map(de) port map (conn, conn1);
    INV2: DEL_INV generic map(de) port map (conn1, conn2);
    INV3: DEL_INV generic map(de) port map (conn2, conn);

    OUTPUT <= conn;

end architecture;

尤其是在模拟时,输出始终为U。 有人可以解释为什么吗?

1 个答案:

答案 0 :(得分:2)

分配给信号conn*的初始值(确保在仿真中定义良好的起始条件)在启动时被{{1}上的'U'驱动的OUTPUT覆盖}}模块,因此模拟最终陷入所有DEL_INV中。

一种解决方案是使用一个允许不同初始U的泛型通过DEL_INV模块处理初始值,然后在OUTPUT上使用该初始值,直到该值是定义为OUTPUT'0',可以通过'1'函数进行检测。

为此更新的代码如下所示。请注意,我在is_x中添加了Renaud Pacalet针对for all: DEL_INV use entity work.DEL_INV(s);和逆变器(not)的建议。

DEL_INV