“接近然后期待< =”这个错误是什么?

时间:2014-06-05 10:36:39

标签: compare vhdl

LIBRARY ieee;
USE ieee.std_logic_1164.all;

entity Division is
port (
    A          : in  std_logic_vector(3 downto 0);
    B          : in  std_logic_vector(3 downto 0);
    Remind     : out std_logic_vector(3 downto 0);
    Errorsig   : out std_logic;
    Ready      : out std_logic);
end entity Division;

architecture Behavioural of Division is
    component fullsubstractor4 is
        port (
            a       : IN  std_logic_vector (3 downto 0);
            b       : IN  std_logic_vector (3 downto 0);
            bor_in  : IN  std_logic;
            diff    : OUT std_logic_vector;
            bor_out : OUT std_logic);
    end component;

    component fulladder 
        port (
            a   : IN  std_logic_vector(3 downto 0);
            b   : IN  std_logic_vector(3 downto 0);
            cin : IN  std_logic;
            c   : OUT std_logic;
            s   : OUT std_logic_vector (3 downto 0));
    end component;

    signal AA,BB,Q,R,temp_0,temp_1,temp_2,temp_3 :std_logic_vector(3 downto 0):="0000";
    signal temp_4, temp_5: std_logic; ------- (Carry and Borrow only 1 bit)

begin

fs1: fullsubstractor4
  port map (AA, BB,'0', temp_1, temp_4);

fs2: fullsubstractor4
  port map (temp_1, BB, '0', temp_2, temp_4);

fa1: fulladder
   port map (Q, "0001",'0', temp_5, temp_3);

division: process
    begin
        AA <= A;
        BB <= B;
        If BB = "0000" then 
           Errorsig <= '1';
        elseif (AA < BB) then
           Q <= "0000";
           R <= AA;
        elseif (AA = BB) then
           Q <= "0001";
           R <= "0000";
        elseif (AA > BB) then
           Q <= "0001";
           R <= temp_1;
           while temp_1 > BB loop
               Q <= temp_3; 
               R <= temp_2;
               temp_1 <= temp_2;
               wait for 10 ns;
           end loop;
        end if;
    end process;

end Behavioural;

对于这个除法代码,我在比较两个std_logic_vectors的行上得到的错误是“接近然后期待”&lt; =“或”:=“'。 对于Line(正在处理中)我在编译时遇到此错误。

2 个答案:

答案 0 :(得分:1)

首先,elseif不是VHDL的正确关键字。这是elsif

其次,像>这样的比较运算符对std_logic_vector没有意义,它们通常被视为位数组,而不是数字表示。理想情况下,您应该在比较中包含ieee.numeric_std并投射为数字向量类型(signedunsigned),例如:

elsif unsigned(AA) > unsigned(BB) then

(如果你不是反复投射,使用中间信号或变量也可以,但是投射可能是最干净的选择)

那应该会让你更进一步。

答案 1 :(得分:1)

elseif不是VHDL保留字,因此编译器认为它是一个标识符,例如信号名称,然后期望赋值给它...

请尝试elsif

找到更好的VHDL语法参考...

Fru1tbat的答案整体上更好,但这描述了发生特定错误消息的原因。