2017-03-22 4 views
0

난 난수를 생성하는 함수를 만듭니다. 이 숫자는 1 년을 나타냅니다. 그 해가 윤년인지 찾아야합니다. 생성 된 숫자의 범위는 2000에서 2017 사이이므로 윤년을 찾기 위해 수식을 적용하는 대신 사례를 사용할 수 있다고 생각합니다.VHDL 사례 문 오류

architecture arh_afisare of afisare is  
signal year: integer; 
signal leap_year: integer; 
begin 
process 
begin 
    year <= random_gen(2000, 2017); 
    case year is 
     when '2000' => leap_year <='1'; 
     when '2004' => leap_year <='1'; 
     when '2008' => leap_year <='1'; 
     when '2012' => leap_year <='1'; 
     when '2016' => leap_year <='1'; 
     when others => leap_year <='0'; 
    end case; 
wait for 100 ns; 
end process; 
end architecture; 

이 오류는 'when'이 마지막 행을 예상 할 때마다 발생합니다. 당신의 case 라인에서

Error: COMP96_0019: Afisare.vhd : (28, 9): Keyword 'others' expected.

답변

2

봐는 :

when '2000' => leap_year <='1'; 

2000 정수,하지만 당신은 그것의 주위에 단일 인용 부호를 뒀다. 이것은 유효한 구조가 아닙니다. 단지 작은 따옴표를 삭제합니다

코멘트 당
when 2000 => leap_year <='1'; 

leap_year에 대한 integer의 선택은 조금 이상하다. 유형을 std_logic으로 정의하면 leap_year <= '1'의 지정이 유효하게됩니다. 또는 integer이 적절하면 할당을 leap_year <= 1으로 변경하십시오.

+2

또한 leap_year를 std_logic으로 변경하십시오. – FritzDC

+2

@FritzDC가 반드시 필요한 것은 아니며 문맥을 알지 못합니다. 정수형 또는 그 이상인 경우 자연스러운 범위 0에서 1까지 daysPerYear 등에 추가 할 수 있습니다 (단, 따옴표를 잃어 버릴 수도 있습니다). –

+0

예, "따옴표도 잃어 버릴 수 있습니다" 순서대로. VHDL을 작성하는 동안 std_logic을 사용하여 이진 논리를 학습하는 것이 좋은 습관 일 수 있습니다. – FritzDC