假设我有一个名为“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”inout信号很低,并且不像ps2ctemp信号那样改变。
相反,如果我在不使用其他信号的情况下手动驱动ps2c信号,它可以正常工作;像这样:
ps2c <= '1';
wait for 10 ns;
ps2c <= '0';
wait for 10 ns;
ps2c <= '1';
答案 0 :(得分: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;
在这个简单的例子中,这两种形式基本上是等同的。所以更简单的一个(敏感性列表)是首选......