У меня проблема с некоторым синтаксисом VHDL в каком-то старом коде, который я хочу использовать повторно.Он принят инструментом синтеза (Synplify), но симулятор (Aldec Active-HDL 8.3) выдает следующую ошибку.(Примечание: эта конструкция была принята предыдущей версией этого симулятора).
# Ошибка: COMP96_0228: buffered_data.vhdl: (19, 28): фактическая должна обозначаться именем статического сигнала, еслифактический связан с параметром сигнала любого режима.
Я получаю, что ошибка не любит (i) в сигнале clk (i), но я не хочу развернуть цикл в (0), (1) и т. Д., Поскольку он используется в нескольких различных конфигурациях для портов разных размеров, и я уверен, что должен быть способ описать это.
Мое решение до сих пор заключается в инкапсуляции одного экземпляра в его собственномиерархия сущностей / арок и использование «генерации» для создания экземпляра один раз для каждого порта, но мне это не нравится.Есть идеи получше?
Очень упрощенный пример, показывающий именно мою проблему.(Цель состоит в том, чтобы гарантировать, что данные сначала синхронизируются в FPGA, используя собственные связанные часы, прежде чем что-либо еще)
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity input_buffer is
port(
clk : in std_logic_vector;
data_in : in std_logic_vector;
data_out : out std_logic_vector
);
end input_buffer;
architecture rtl of input_buffer is
constant c_NumOfPorts : integer := 3;
begin
p_process: process(clk)
begin
for i in 0 to c_NumOfPorts-1 loop
if rising_edge(clk(i)) then -- error here
data_out(i) <= data_in(i);
end if;
end loop;
end process;
end rtl;