У меня возникли проблемы с устранением ошибки «тип идентификатора не соответствует его использованию» с VHDL. Насколько я понимаю, это означает, что при присвоении значений что-то не так. Например, назначение std_logic для std_logic_vector или, возможно, назначение std_logic для бита. Правильно?
Я получаю сообщение об ошибке после попытки сопоставления портов. Здесь происходит ошибка:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_1164.all;
USE IEEE.STD_LOGIC_ARITH.all;
USE IEEE.STD_LOGIC_UNSIGNED.all;
ENTITY ALU1 IS
PORT (a,b,ainverse,binverse, cin:IN std_logic;
operation: IN std_logic;
cout, result,resolution : OUT std_logic
);
END ALU1;
ARCHITECTURE archAl OF ALU1 IS
COMPONENT adder
PORT(a,b, cin: IN std_logic;
cout,resolution: OUT std_logic);
END COMPONENT;
COMPONENT AND1
PORT(a, b :IN std_logic;
resolution: OUT std_logic);
END COMPONENT;
COMPONENT OR1
PORT(a, b : IN std_logic;
resolution: OUT std_logic);
END COMPONENT;
COMPONENT mux2
PORT( a, inverse : IN std_logic;
resolution : OUT std_logic
);
END COMPONENT;
COMPONENT XOR1
PORT(a,b : IN std_logic;
resolution : OUT std_logic
);
END COMPONENT;
--SIGNAL resolution: std_logic;
BEGIN --ARCHITECTURE BEGIN
andA: mux2 PORT MAP(a, ainverse, resolution);
andB: mux2 PORT MAP(b, binverse, resolution);
resolutionAnd: AND1 PORT MAP (andA, andB, resolution);
addA: mux2 PORT MAP(a, ainverse, resolution);
addB: mux2 PORT MAP(b, binverse, resolution);
resolutionOr: OR1 PORT MAP (a, b, resolution);
resolutionAdd: adder PORT MAP(ainverse, binverse, cin, cout, resolution);
resolutionXor: XOR1 PORT MAP (a,b, resolution);
PROCESS(operation, a, ainverse, resolution, b, cin,cout, BINVERSE) is
BEGIN --PROCESS BEGIN
IF operation = "00" THEN
result<=resolutionAnd;
ELSIF operation = "01" THEN
result<=resolutionOr;
ELSIF operation = "10" THEN
result<=resolutionAdd;
ELSIF operation ="11" THEN
result<=resolutionAXor;
END IF;
END PROCESS;
END archAl;
Ошибка возникает в resolutionAnd: AND1 PORT MAP (andA, andB, resolution);
Я получаю Error (10476): VHDL error at alu.vhd(158): type of identifier "andA" does not agree with its usage as "std_logic" type
и Error (10476): VHDL error at alu.vhd(158): type of identifier "andB" does not agree with its usage as "std_logic" type
.
Итак, логично сделать это для поиска mux2, которые влияют на andA и B, чтобы увидеть, есть ли несоответствие между назначенными типами.
Код для mux2:
ENTITY mux2 IS
PORT(a, inverse: IN std_logic;
resolution : OUT std_logic);
END mux2;
ARCHITECTURE archMux2 OF mux2 IS
BEGIN
PROCESS(a, inverse)
BEGIN
IF inverse = '0' THEN
resolution <= a;
ELSE
resolution <= NOT a;
END IF;
END PROCESS;
END archMux2;
Я не могу обнаружить несоответствия в назначенных типах. Итак, я полагаю, что я не правильно понял ошибку или что-то не так, и я не знаю об этом. Может кто-нибудь помочь, пожалуйста?