2014-04-10 6 views
0

현재 VHDL을 사용하여 교통 신호등 컨트롤러를 설계하려고합니다. 신호등을 표시하기위한 사용자 정의 확장 보드가있는 Altera EPM240T100C5에서 프로그래밍하고 있습니다.VHDL 클럭 분배기가 보드에서 작동하지만 시뮬레이션에는 실패합니다.

LIBRARY ieee; 
USE ieee.std_logic_1164.all; 

entity clockdivider is 
    port 
    (
     clkin : in std_logic; 
     dividedclk : out std_logic 
    ); 
end clockdivider; 

architecture divider of clockdivider is 

signal J : std_logic; 
signal K : std_logic; 


begin 
J <= '1'; 
K <= '1'; 


process(clkin) 
variable tempdividedclk : std_logic; 
begin 
if (rising_edge(clkin)) then 
    tempdividedclk := (NOT(tempdividedclk) AND J) OR (tempdividedclk AND (NOT(K))); 
end if; 
    dividedclk <= '0'; 
    dividedclk <= tempdividedclk; 
end process; 

END divider; 

이 (ModelSim을 보드에 있지만, 시뮬레이터에서 잘 실행 : 보드에 설정 느린 클럭 내가 좋아하는 것보다 여전히 빠르다, 나는 나뿐만 그렇게 클럭 디바이더를 작성하는 데 필요한 것) "dividedclk"출력이 아무 것도 초기화하지 못합니다. 왜 누군가가 그 이유를 알고 있는지 궁금 해서요?

답변

5

시뮬레이션 시작시 "tempdividedclk"는 "unitialized"로 초기화됩니다. 클럭 에지가 발생하면 tempdividedclk가 "(정의되지 않음)"((U) 및 1) 또는 (U 및 0)에 할당됩니다. 정확하게 시뮬레이션하려면 tempdividedclk를 재설정 또는 시뮬레이션 수준에서 초기화해야합니다. "U"상태가 1 또는 0이기 때문에 실리콘에서 작업합니다.

+3

프로세스에서 tempdivideclk에 대한 변수 선언에 기본값 "0"또는 "1"을 제공 할 수 있습니다. '변수 tempdividedclk : std_logic : = '0';' – user1155120