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(正在处理中)我在编译时遇到此错误。
答案 0 :(得分:1)
首先,elseif
不是VHDL的正确关键字。这是elsif
。
其次,像>
这样的比较运算符对std_logic_vector
没有意义,它们通常被视为位数组,而不是数字表示。理想情况下,您应该在比较中包含ieee.numeric_std
并投射为数字向量类型(signed
或unsigned
),例如:
elsif unsigned(AA) > unsigned(BB) then
(如果你不是反复投射,使用中间信号或变量也可以,但是投射可能是最干净的选择)
那应该会让你更进一步。
答案 1 :(得分:1)
elseif
不是VHDL保留字,因此编译器认为它是一个标识符,例如信号名称,然后期望赋值给它...
请尝试elsif
。
找到更好的VHDL语法参考...
Fru1tbat的答案整体上更好,但这描述了发生特定错误消息的原因。