我被一些VHDL代码所困扰。
我正在尝试编译:
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显示此错误:无法确定运算符的定义&#34;&lt; =&#34 ;;在使用WHEN STATEMENT的行。 我不知道问题是什么。
感谢您的帮助!!
答案 0 :(得分:1)
您正在尝试对std_logic_vector
类型的信号使用关系运算符,而这些信号并未定义它们。您可以通过以下方式之一使其工作:
使用unsigned
中定义的ieee.numeric_std
类型。它是在数字上下文中解释数组的标准方法。将端口信号声明为unsigned
或在每次比较中使用类型转换函数。
在VHDL-2008支持下,使用ieee.numeric_std_unsigned
包将无符号数字语义添加到std_logic_vector
。
请勿使用与std_logic_arith
类似的早期软件包numeric_std_unsigned
。
您还应该使用natural
代替integer
作为常量,因为没有为将unsigned
与integer
进行比较而定义运算符。