2013-11-02 3 views
1

"ps2c"inout 신호 (VHDL)가있는 "HostToDevice"라는 엔티티가 있다고 가정 해 봅니다. 이 엔티티에서는이 엔티티를 다른 엔티티가 제어하기를 원하기 때문에이 신호를 'Z'(하이 임피던스)로 설정합니다.inout 신호가 시뮬레이션에서 변경되지 않습니다

나는 동작을 확인하기 위해 테스트 벤치를 만들었고 뭔가 이상한 일이 일어났습니다.

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; 

나는 신호가 단지 낮고 ps2ctemp처럼 변경되지 않습니다 inout의 (행동)은 "ps2c를"시뮬레이션을 실행하면 신호 않습니다.

대신 다른 신호를 사용하지 않고 수동으로 ps2c 신호를 구동하면 정상적으로 작동합니다. 이 같은 :

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

답변

1

귀하의 "stim_proc는"더 감도 목록이 없으며, 하나의 이벤트 나 시간 제한없이 "대기", 그래서 한 번 실행하고 영원히 기다릴 것입니다. 이것은 시뮬레이션이하는 것처럼 보이기 때문에 좋습니다.

이제 여기서 야생의 추측을 할 것입니다. 실제로는 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; 

: 그렇게하는 방법은 두 가지가 있습니다

이 간단한 경우이 두 형식은 본질적으로 동일합니다. 따라서 더 단순한 것 (민감도 목록)이 선호됩니다 ...