我觉得我在这里犯了一个非常简单的错误......我是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
答案 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之间没有定义连接运算符。
s
,cout
和overflow
的作业不希望出现在此过程中。 sum
不在过程敏感性列表中,不应该出现。
决定在cin
上添加或减去基数对我来说没有任何意义。