Выход определенного объекта зависит от его собственного местоположения в векторе и всех входах. Самый простой способ реализовать это, по-видимому, является циклом for-loop. Однако Quartus II 13.0sp1 терпит неудачу на втором для цикла:For-loop in another for-loop VHDL
VHDL syntax error at mcve.vhd(24) near text "IN"; expecting "(", or "'", or "."
я бы испортил синтаксис, но я уверен, что VHDL способен зацикливание в цикле.
Какова правильная реализация цикла for for loop? Вот что я получил до сих пор.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
TYPE ANAT_SLV16 IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR(15 DOWNTO 0);
ENTITY mcve IS
GENERIC(
PORTS : POSITIVE := 256;
HPORTS : POSITIVE := 128
);
PORT(
X : IN ANAT_SLV16(PORTS - 1 DOWNTO 0);
Y : OUT ANAT_SLV16(HPORTS - 1 DOWNTO 0);
);
END mcve;
ARCHITECTURE loops OF mcve IS
SIGNAL to_Y : ANAT_SLV16(HPORTS - 1 DOWNTO 0) := (others -> '0');
BEGIN
gen : FOR i IN 0 TO HPORTS - 1 GENERATE
FOR j IN 0 TO PORTS - 1 GENERATE -- error near text "IN"; expecting "(", or "'", or "."
to_Y((i)) <= to_Y((i)) + X(j);
END GENERATE;
END GENERATE;
Y <= to_Y;
END loops;
Вам не следует указывать метку во втором цикле? – grorel
Объявление типа должно быть в пакете, видимом в предложении use. В конце строки в конце объявления 'y' есть дополнительная точка с запятой. '->' должно быть '=>', а выражение по умолчанию должно быть '(others => (others => '0'))' - 'to_y' - это массив std_logic_vector. Чтобы обе границы диапазонов имели одинаковый базовый тип, эти дженерики должны быть «естественными» (правые границы 0). Чтобы использовать оператор '' + "' из пакета numeric_std, операнды должны быть преобразованы в unsigned, а результат - в std_logic_vector. Затем MVCe является полным и проверяемым и фиксируемым с ярлыком Брайана. – user1155120
Я сделал поспешный MCVE и пропустил ошибки. Однако проблема очевидна. Я полностью согласен с пакетом, оригинал построен таким образом. Тем не менее, я чувствую, что для MCVE он должен быть более компактным и не иметь подобных конструкций. – Mast