1

假设我有一个名为“HostToDevice”的实体,它有一个“ps2c”输入信号(VHDL)。在这个实体中,我只将此信号设置为“Z”(高阻抗),因为我想要另一个实体来控制它。

我创建了一个测试台来检查行为并且发生了一些奇怪的事情(对我来说)。在测试台中,我有以下代码:

ps2ctemp_process :process
begin
    ps2ctemp <= '0';
    wait for ps2c_period/2;
    ps2ctemp <= '1';
    wait for ps2c_period/2;
end process;

之后:

stim_proc: process
begin
    ps2c <= ps2ctemp;

    wait;
end process;

当我运行模拟(行为)时,“ps2c”输入信号只是很低并且不会像 ps2ctemp 信号那样改变。

相反,如果我手动驱动 ps2c 信号而不使用其他信号,它工作正常;像这样:

ps2c <= '1';
wait for 10 ns;
ps2c <= '0';
wait for 10 ns;
ps2c <= '1';

4

1 回答 1

1

您的“stim_proc”没有敏感性列表,并且一个“等待”没有事件或超时,因此它旨在运行一次并永远等待。这似乎是sim正在做的事情,所以,很好。

现在我在这里做一个大胆的猜测,您实际上希望它在每次ps2ctemp更改时唤醒,并将新值传递给ps2c.

有两种方法可以做到这一点:

(1) 带有敏感列表

stim_proc: process(psc2temp)
begin
    ps2c <= ps2ctemp;

    --wait;
    -- no, we want the process to complete, so it can be woken up 
    -- and run from the start again
end process;

(2) 等待特定事件...

stim_proc: process
begin
    ps2c <= ps2ctemp;

    wait until ps2ctemp'event;
    -- any activity at all on ps2ctemp should wake this process, 
    -- in case there is something it ought to be doing...
end process;

在这个简单的例子中,这两种形式本质上是等价的。所以更简单的一个(敏感列表)是首选......

于 2013-11-02T12:14:50.903 回答