#vhdl #xilinx #vivado
#vhdl #xilinx #vivado
Вопрос:
Я сталкиваюсь с проблемой несоответствия ширины при использовании трехмерного массива с использованием VHDL. Ошибка :
[Synth 8-549] port width mismatch for port 'KERNEL_OUT[0]': port width = 16, actual width = 32 ["C:/project_2/src/top.vhd":29]
Как мы можем видеть, строка # 30 на самом деле состоит из 32 бит, и компонент имеет неограниченный порт. Таким образом, вместо того, чтобы брать длину из подключенного порта, он использует значение из ранее созданного экземпляра компонента.
Я сделал из этого очень минимальный дизайн. Я использую Vivado 2018.2, есть большая вероятность, что это может быть проблема с инструментом. Но было бы очень полезно, если бы кто-нибудь мог сказать мне, делаю ли я что-то не так.
top.vhd
library ieee;
use ieee.std_logic_1164.all;
use work.style_pack.all;
-------------------------------------------------------------------------------
-- Entity
-------------------------------------------------------------------------------
entity top is
port(
dummy : in std_logic
);
end entity top;
architecture arch_top of top is
signal KernelInt1 : StdVectorArrayTp(0 to 4)(15 downto 0);
signal KernelInt2 : StdVectorArrayTp(0 to 4)(31 downto 0);
begin
--
INST_pixel_to_matrix_1 : entity work.pixel_to_matrix
port map (
KERNEL_OUT => KernelInt1
);
--
INST_pixel_to_matrix_2 : entity work.pixel_to_matrix
port map (
KERNEL_OUT => KernelInt2
);
end architecture arch_top;
pixel_to_matrix.vhd
library ieee;
use ieee.std_logic_1164.all;
-----------------------
-- ENTITY DEFINITION --
-----------------------
entity pixel_to_matrix is
port (
KERNEL_OUT : out StdVectorArrayTp
);
end pixel_to_matrix;
architecture arch_pixel_to_matrix of pixel_to_matrix is
begin
end architecture arch_pixel_to_matrix;
style_pack.vhd
library IEEE;
use IEEE.std_logic_1164.all;
package style_pack is
type StdVectorArrayTp is array (integer range <>) of std_logic_vector;
end style_pack;
package body style_pack is
end style_pack;
Я опубликовал тот же вопрос в https://forums.xilinx.com/t5/Synthesis/VHDL-2008-width-mismatch-on-multiple-instantiations/td-p/1164467
где я загрузил код с проектом Vivado https://forums.xilinx.com/xlnx/attachments/xlnx/SYNTHBD/36597/2/project_1.zip
Редактировать :
Проект с 3D-массивом StdVectorArrayTp https://forums.xilinx.com/xlnx/attachments/xlnx/SYNTHBD/36602/1/project_2.zip
Комментарии:
1. У Vivado было много исправлений vhdl2008 в vivado 2019, особенно 2019.2. Вы пробовали более современную версию? (Может быть, 2020.1?)
2. Пробовал в Vivado 2019.1. На самом деле мы вернулись к версии 2019.1 из-за некоторых проблем с IP-адресами поставщиков. Я просто добавил некоторые обобщения в pixel_to_matrix и не использовал их, Vivado не выдал ошибку.
3. Тогда @user1155120 выглядит как ошибка инструмента. Но почему приведенный здесь код не является минимально воспроизводимым примером ?
4. Похоже, что конкретная версия Vivado не может достичь достаточной глубины, чтобы обеспечить ограничение подтипа из фактического. Код в zip-файле будет проанализирован, доработан и смоделирован с использованием последней версии ghdl, он выглядит допустимым. UG901 в различных версиях Vivado не дает представления, что указывает на то, что вы будете зависеть от исправления ошибки.
5. @user1155120 Я добавил несколько фиктивных дженериков, тогда проблем не было. Я думал о глубоких массивах. Я отредактирую вопрос, чтобы включить 3D-массив.