2014-10-22 2 views
0

의 정의를 결정할 수 없습니다. 일부 VHDL 코드가 있습니다.Quartus II : 연산자 ""<= ""

entity ball is 
    port(video_on : in std_logic; 
     pixel_x,pixel_y : in std_logic_vector(10 downto 0); 
     obj3_r,obj3_g,obj3_b : out std_logic_vector (3 downto 0); 
     obj3_on : out std_logic); 
end entity; 

architecture arch of ball is 


-- definimos dimension de izquierda a derecha 
constant ball_l : integer :=800; 
constant ball_r : integer :=815; 

-- definimos dimension de arriba a abajo 
constant ball_top : integer :=502; 
constant ball_bottom : integer :=522; 


begin 

obj3_on <= '1' when (ball_l <=pixel_x) and (pixel_x <= ball_r) and (ball_top <= pixel_y) and (pixel_y <= ball_bottom) else 
      '0'; 

obj3_r <= (others => '0'); 
obj3_g <= "0111"; 
obj3_b <= (others => '0'); 

end arch; 
의 Quartus II는이 오류를 보여주고있다

: :이 컴파일하려고

연산자의 정의를 확인할 수 없습니다 "<을 ="을; WHEN STATEMENT가 사용되는 라인에서. 문제가 무엇인지 전혀 알지 못합니다.

도움 주셔서 감사합니다.

답변

1

std_logic_vector의 신호가 정의되지 않은 관계형 연산자를 사용하려고합니다. 당신은 다음 중 하나에 의해 작동하게 할 수 있습니다

  • ieee.numeric_std에 정의 된 unsigned 유형을 사용합니다. 숫자 문맥에서 배열을 해석하는 표준 방법입니다. 포트 신호를 unsigned으로 선언하거나 비교할 때마다 유형 변환 함수를 사용하십시오.

  • VHDL-2008을 지원하는 경우 에 부호없는 숫자 의미를 추가하는 ieee.numeric_std_unsigned 패키지를 사용하십시오.

numeric_std_unsigned 유사 이전 패키지 인 표준이 아닌 std_logic_arith를 사용하지 마십시오.

integer을 비교하는 연산자가 정의되어 있지 않으므로 integer 대신에 natural을 사용해야합니다.

+0

감사합니다. 그것은 일했다!! 마지막으로 numeric_std.all을 추가하고 각 비교에 형식 변환 함수를 사용했습니다. 그러나 관계형 연산자를 사용할 수있는 유형을 어떻게 알 수 있습니까? 이력서와 함께 사용할 수있는 목록이 있습니까? – osuarez

+0

모든 표준 패키지의 내용을 온라인에서 찾을 수 있습니다. 찾아 볼 수있는 내용을 확인하십시오. 이것은 대부분의 책이 표준 라이브러리를 자세히 탐색하지 않기 때문에 이것을 배우는 가장 좋은 방법입니다. –