2015-01-07 4 views
-1

나는 2 개의 오류가 있습니다. 오류는 최종 프로세스 및 최종 아키텍처에 있습니다. 다른 끝을 추가하려고했지만 도움이되지 않습니다.왜 최종 프로세스 및 최종 아키텍처에 오류가 있습니까?

Line 40: ERROR, syntax error near 'process'. 
Line 46: ERROR, syntax error near 'ARCHITECTURE'. 

여기 분석에서 설계 사양을 방지하는 몇 가지 오류가 있습니다 전체 코드

LIBRARY ieee; 
    USE ieee.std_logic_1164.all; 
    USE ieee.std_logic_arith.all; 

ENTITY four_bit_new_counter IS 
    port (clk , rst , start , stop : in std_logic ; 
     output : out std_logic_vector(3 downto 0); 
     carry : out std_logic); 
END ENTITY four_bit_new_counter; 

ARCHITECTURE one OF four_bit_new_counter IS 
signal qout: unsigned (3 downto 0); 
signal cout: std_logic ; 
BEGIN 

    process (clk,rst,start,stop) 
     begin 
     if (rst ='1') then 
      qout <= (qout'range => '0'); 
      cout <= '0' ; 
     elsif (clk'event and clk = '1') then 
     cout <= '0' ; 
     if start='1' and stop='0' then 
        if qout = '9' then 
        cout <= '1' ; 
        qout <= '0' ; 
        else 
      qout <= qout+1 ; 
     endif ; 
     end process ; 

output <= std_logic_vector(qout); 
carry <= cout ; 


END ARCHITECTURE one; 
+0

"endif"는 VHDL에서 유효한 구문이 아닙니다. – fru1tbat

답변

1

입니다.

qoutunsigned (3 downto 0) and you perform an equality operation against the character literal '9'`로 선언됩니다.

나중에 문자 0 대신 "0000" 또는 x"0" 또는 (qout'range => '0')의 문자의 값은 재전송에 사용 집계 표현 qout을 할당합니다.

endif fru1tbat는 end if이어야합니다.

은 아래를 참조 실종이 더 end if 문이 있습니다

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.std_logic_arith.all; 

entity four_bit_new_counter is 
    port (
     clk, rst, start,stop: in std_logic ; 
     output:     out std_logic_vector(3 downto 0); 
     carry:     out std_logic 
    ); 
end entity four_bit_new_counter; 

architecture one of four_bit_new_counter is 
    signal qout: unsigned (3 downto 0); 
    signal cout: std_logic ; 
begin 
    process (clk,rst) -- also included ,start,stop 
    begin 
     if rst ='1' then 
      qout <= (qout'range => '0'); 
      cout <= '0' ; 
     elsif clk'event and clk = '1' then 
      cout <= '0' ; 
      if start = '1' and stop = '0' then 
       if qout = 9 then -- was '9' 
        cout <= '1' ; 
        qout <= (qout'range => '0') ; -- was '0' 
       else 
        qout <= qout + 1 ; 
       end if ; -- was endif 
      end if;  -- missing 
     end if;   -- missing 
    end process ; 

    output <= std_logic_vector(qout); 
    carry <= cout ; 

end architecture one; 

그리고 그 귀하의 설계 사양을 변경 모두 분석하고 정성 들여 후

.

또한 레이블이 지정되지 않은 프로세스의 감도 목록에는 rstclk 만 필요합니다.

Synopsys std_logic_arith 대신 numeric_std IEEE 패키지를 사용할 수도 있습니다.

process 근처에 불만 이유와 architecture이 두 예약어 때문에 end if의 일련의이 문 경우는 if 문들을 닫고 누락 내에서 순차적 일련의 명령문 내에서 장소를 벗어 점이다.