VHDL 4位AdderSubtractor错误 - 期待“;”

时间:2015-10-28 22:51:48

标签: vhdl

我觉得我在这里犯了一个非常简单的错误......我是VHDL的新手,尝试制作一个简单的4位ASU,但我得到一个我无法弄清楚的。

LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

ENTITY asu is
    PORT (Cin   : IN std_logic;
            X,Y : IN std_logic_vector(3 downto 0);
            S       : OUT std_logic_vector(3 downto 0);
            Cout, Overflow :    OUT std_logic);
End asu;

ARCHITECTURE Behaviour OF asu IS
SIGNAL Sum : STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
    PROCESS (X,Y,Cin)
    BEGIN
        IF Cin = 1 THEN

            Sum <= (0 & X) - (0 & Y);
            S <= Sum(3 DOWNTO 0);
            Cout <= Sum(4); 
            Overflow <= Sum(4)XOR X(3) XOR Y(3) ;


        ELSE

            Sum <= (0 & X) +(0 & Y) + Cin;
            S <= Sum(3 DOWNTO 0);
            Cout <= Sum(4);
            Overflow <= Sum(4)XOR X(3) XOR Y(3) ;

            end IF;
            end PROCESS;
END behaviour;

我收到以下错误:

Error (10327): VHDL error at asu.vhd(17): can't determine definition of operator ""="" -- found 0 possible definitions

2 个答案:

答案 0 :(得分:2)

您无法与1进行比较,您必须与&#39; 1&#39;

进行比较

所以你应该写

IF Cin = '1' THEN

答案 1 :(得分:0)

条件Cin = 1中的表达式需要[std_ulogic,整数返回布尔值]的重载等于运算符的签名,并且没有一个。

std_logic是一个已解析的std_ulogic,它是一个枚举的标量类型,可能的值为'U','X','0','1','Z','W','L','H'和' - ”。

如果将1更改为'1',分析仪将检测到“=”将起作用。预定义类型值和相同类型值之间的相等运算符。

还要注意与std_logic向量连接的四次出现(例如(0 & x))。出于同样的原因,这些0也需要'0'。在整数和std_logic_vector之间没有定义连接运算符。

scoutoverflow的作业不希望出现在此过程中。 sum不在过程敏感性列表中,不应该出现。

决定在cin上添加或减去基数对我来说没有任何意义。