2016-11-11 3 views
0

3 번 깜박임 (1 초 동안 불이 켜져 야 할 때마다)하는 프로세스가 필요하며 불이 켜지는 간격은 1 초가되어야합니다.깜박이는 VHDL 프로세스

가장 빠르고 쉬운 방법은 다음과 같아야합니다 그것을 컴파일하여

process(CLK) 
begin 
.... 
led <= '0'; 
led <= '1' after 1 sec, 
'0' after 1 sec, 
'1' after 1 sec, 
'0' after 1 sec, 
'1' after 1 sec, 
'0' after 1 sec; 
.... 
end process; 

에는 오류가 없다 ...하지만 시계는 자신의 작동 주파수를 가지고 (예를 들어, 1NS).

run 
# Cannot continue because of fatal error. 
# HDL call sequence: 
# Stopped at C:/User...rm.vhd 50 Process line__41 
# 

행 정확히 PROCESS (CLK) 행에 : ModelSim을이 코드를 트링하여 다음과 같은 오류를 줄 것이다.

나는이 문제가 CLK가 더 큰 주파수를 가지고 있기 때문에 이전 프로세스가 끝나기 전에 다음 프로세스가 시작된다는 것을 생각한다.

내가 쓴 것이 정확하다면, 해결책은 요청한 기간을 갖는 시계로 재생할 수 있지만 더 빠르고 가벼운 해결책을 찾고 싶습니다.

+0

오, 이런. 이것은 시뮬레이션 또는 하드웨어로의 합성을위한 것입니까? –

+0

하드웨어로 합성하기 때문에 내 예제처럼 "after"를 사용할 수 없습니다. – pittuzzo

답변

0

이미 작성 했으므로 clk는 1 초보다 빠릅니다. 1 클럭주기 (1ns)에서 "... 1 초 후"줄의 수에 따라 5-6 초를 "대기"합니다. 이렇게하면 안됩니다. 정말로 빠른 시계를 원한다면 몇 초 카운터를 1 초 동안 충분히 넓게 만드십시오. 프로세스 (clk)에서이 카운터를 증가시키고 카운터 값을 1 초 동안 미리 정의 된 값과 비교합니다. 카운터 값이이 값에 도달하면 카운터를 재설정하고 LED를 토글합니다.

LED와 같은 다른 "단계"가 3 초 동안 깜박이고 3 초 동안 더 이상 깜박이지 않으면 하나 이상의 카운터가 필요합니다. 각 단계마다 카운터가 있어야합니다.