У меня есть эта ошибка в моем коде в строке 13 и 27, на vhdl, кто-нибудь знает, что не так?
LIBRARY IEEE;
USE ieee.std_logic_1164.all;
entity POLI is
port(A,B: in std_logic_vector(2 downto 0);
x,y: in std_logic;
S: out std_logic_vector(6 downto 0));
end POLI;
architecture codigo of POLI is
begin
process(x) begin
if (x = "1") then
S(0)<=((A(0)and(not A(1))and A(2))or((not A(0))and A(1)and A(2)));
S(1)<=((not A(0))and A(1)and (not A(2)));
S(2)<=((not A(0))and (not A(2)));
S(3)<=(((not A(0))and (not A(1))and (not A(2)))or ((not A(0))and A(1)and A(2)));
S(4)<=(A(0)and (not A(1))and (not A(2)));
S(5)<=(A(0)and (not A(1))and (not A(2)));
S(6)<=(((not A(0))and A(1))or((not A(0))and A(2)));
else
S< = "0000000";
end if;
end process;
process(y) begin
if (y = "1") then
S(1)<=(((not B(0))and (not B(2)))or((not b(0))and(not B(1))));
S(2)<=((not B(0))and(not B(2)));
S(4)<=(((not B(1))and B(0))or((not B(1))and B(2)));
S(5)<=(B(0)and(not B(1)));
S(6)<=(((not B(0))and B(1)));
else
S< = "-------";
end if;
end process;
end codigo;
Я пробовал на других компьютерах и компиляторах, и у всех была одна и та же проблема.
Тип перечисления символов (std_ulogic) имеет значения, которые являются перегрузками символьных литералов ('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-'). ), в пакете std_logic_1164. IEEE Std 1076-2008 5.2.2 Типы перечисления «Если один и тот же идентификатор или символьный литерал указан более чем в одном определении типа перечисления, соответствующие литералы считаются перегруженными. В любом месте, где перегруженный литерал перечисления встречается в тексте программы, тип литерала перечисления определяется по правилам для перегруженных подпрограмм (см. 4.5)». x объявлен как std_ulogic.
9.3.2 Литералы «Строковые и битовые строковые литералы являются представлениями одномерных массивов символов. Тип строки или битового строкового литерала должен быть определен исключительно из контекста, в котором появляется литерал, исключая сам литерал, но используя тот факт, что что тип литерала должен быть одномерным массивом символьного типа». Строковый литерал не является значением перечисляемого типа.
У вас есть if x = "1" then
и if y = "1" then
""
В VHDL представляет строку (или литерал битовой строки)
оба x
и y
являются std_logic
и, следовательно, не являются типами массивов.
В этом случае вы должны использовать '
, так как это ссылка на символ, которую std_logic
использует для своих значений.
значит надо писать.
if x = '1' then
....
if y = '1' then
удивительно, я использую вивадо или алмаз, и когда я делаю такие ошибки, мне даже не нужно синтезировать, чтобы увидеть это, линия подчеркнута красным
Я удивлен, что кто-то до сих пор использует инструмент WARP.
E601 :Bad operand types '%s' and '%s' for operator '%s'.