#arrays #2d #vhdl #assignment-operator
Вопрос:
У меня есть два 2D массива, определенных как показано ниже
type ram_1300_block is array (1300 downto 0) of std_logic_vector(7 downto 0);
type ram_2700_block is array (2700 downto 0) of std_logic_vector(7 downto 0);
rx_ram : ram_1300_block;
Q1_ram : ram_2700_block;
Затем я использую приведенную ниже инструкцию присваивания в своем коде:
Q1_ram(1300 downto 1) <= rx_ram(1341 downto 42);
При синтезе я получаю следующую ошибку в vivado 2015.3
Synth 8-2234 indexed name is not a ram_3700 block?
Есть какие-нибудь обходные пути?
Я не хочу увеличивать размер небольшого массива из-за ограничения ресурсов.
Комментарии:
1. Это не 2d массивы. Это 1d массивы 1d типа массива
2. Обратите внимание, что назначение практически всей оперативной памяти другому в одном операторе присваивания будет хорошо при моделировании, но будет синтезироваться на паршивом оборудовании (более 10 000 FFS).
Ответ №1:
Это связано с тем, что VHDL является строго типизированным языком. Здесь rx_ram
и Q1_ram
находятся разные типы, а следовательно, не могут быть напрямую отнесены друг к другу. Еще сложнее, поскольку вы назначили размер своим типам, вы не можете выполнить преобразование типов, поскольку срезы не имеют определенного типа, который можно было бы назвать для тесно связанного преобразования типов.
Я рекомендую вам создать тип, который не ограничен, который ограничен при создании сигналов и, следовательно, может быть назначен друг другу. Вы даже можете создавать именованные подтипы, если хотите:
type ram_block_t is array(natural range <>) of std_logic_vector(7 downto 0);
subtype ram_1300_block is ram_block_t(1300 downto 0);
subtype ram_2700_block is ram_block_t(2700 downto 0);
signal rx_ram : ram_2700_block ;
signal Q1_ram : ram_1300_block;
Q1_ram(1300 downto 1) <= rx_ram(1341 downto 42);
Примечание 1: Я предположил, что в вашем исходном сообщении были неверные типы, так как rx_ram(1341 downto 42)
используется индекс, который находится вне диапазона для данного типа.
Примечание 2: Названия сигналов и типов, скорее всего, плохие, так как я не знаю ни одного инструмента, который выводил бы оперативную память с такими большими назначениями.
Комментарии:
1. Использование натуральных продуктов сработало. Большое спасибо.