假设我有一个名为"HostToDevice“的实体,它有一个"ps2c”inout信号(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“inout信号很低,不像ps2ctemp信号那样改变。

相反,如果我在不使用其他信号的情况下手动驱动ps2c信号,它就能正常工作;如下所示:
ps2c <= '1';
wait for 10 ns;
ps2c <= '0';
wait for 10 ns;
ps2c <= '1';

发布于 2013-11-02 12:14:50
您的"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;在这个简单的例子中,这两种形式本质上是等价的。所以更简单的(敏感列表)是首选.
https://stackoverflow.com/questions/19740474
复制相似问题