У меня есть масса таких экземпляров сущностей:
GPIO : entity L_PicoBlaze.pb_GPIO_Adapter
generic map (
[...]
)
port map (
Clock => CPU_Clock, -- Clock : in STD_LOGIC;
Reset => '0', -- Reset : in STD_LOGIC; -- line 645
[...]
);
Приведенный выше код работает с:
- ISE XST 14.7
- Quartus II 13.x
- ISE iSim 14.7
Я также уверен, что успешно скомпилировал свой проект с Vivado 2013.x !!!
Vivado (2014.4) Synth жалуется, что существует 3 возможных разрешения типов для '0'
:
[Synth 8-2396] рядом с символом '0' ; Здесь совпадают 3 видимых типа ["D:/git/.../PicoBlaze/System.vhdl":645]
Сброс объявляется следующим образом:Reset : in STD_LOGIC
Я могу решить эту проблему, используя квалифицированное выражение:
GPIO : entity L_PicoBlaze.pb_GPIO_Adapter
generic map (
[...]
)
port map (
Clock => CPU_Clock,
Reset => STD_LOGIC'('0'), -- line 645
[...]
);
Я думаю, что это (а) выглядит плохо и (б) это ошибка в Synth.
Я думаю, что ISE XST и другие инструменты делают обратный/обратный вывод типа, чтобы определить правильный литеральный тип.
Кто-нибудь тоже сталкивался с этой проблемой?
Так ли плох мой стиль кодирования, если я пишу '0', x"00..00" или "00..00" в картах портов?
Редактировать 1 - минимальный и полный пример:
library IEEE;
use IEEE.std_logic_1164.all;
entity top is
port (
Clock : in STD_LOGIC;
Reset : in STD_LOGIC;
OUTPUT : out STD_LOGIC
);
end entity;
architecture rtl of top is
begin
toggle : entity work.TFF
port map (
Clock => Clock,
Reset => '0', -- line 17
Q => Output
);
end;
-- a simple toggle flip flop
library IEEE;
use IEEE.std_logic_1164.all;
entity TFF is
port (
Clock : in STD_LOGIC;
Reset : in STD_LOGIC;
Q : out STD_LOGIC
);
end entity;
architecture rtl of TFF is
signal Q_r : STD_LOGIC := '0';
begin
process(Clock)
begin
if rising_edge(Clock) then
if (Reset = '1') then
Q_r <= '0';
else
Q_r <= not Q_r;
end if;
end if;
end process;
Q <= Q_r;
end;
Vivado 2014.4 Сообщение об ошибке:
[Synth 8-2396] рядом с символом '0' ; Здесь совпадают 3 видимых типа ["D:/Temp/OverloadTest/overload.vhdl":17]
Редактировать 2:
Я нашел рабочий пример: я просто поместил объявление объекта tff перед объявлением верхнего уровня. Похоже, что сообщение об ошибке [Synth 8-2396] рядом с ..... видимыми типами соответствует здесь от Vivado, просто неуклюжий способ сообщить нам, что он не может найти ссылку на весь компонент / файл?
Мне потребуется некоторое время, чтобы перепроверить список файлов (> 300) на предмет отсутствующих файлов/компонентов.
Reset
(или меткаGPIO
) в строке 645? Это не конструктор типа, это квалифицированное выражение, предназначенное для явного указания типа и, возможно, подтипа операнда, который является выражением или агрегатом, а литерал перечисления может быть первичным. Это не вывод типа, это разрешение перегрузки. Это также разочаровывает, что подсветчик VHDL Stackoverflow не знает, что символьный литерал не может следовать сразу за идентификатором, правой скобкой, правой скобкой, зарезервированным словомall
, символьным литералом или строковым литералом (IR1045 -1993). Покажите предложения контекста. - person   schedule 16.12.2014(..)
описывался как конструктор с необязательным параметром типа в качестве префикса... квалифицированное выражение звучит лучше :) -- Насколько я знаю, разрешение перегрузки не может решить проблему разных возвращаемых значений, это решаемо выводом обратного типа. - person Paebbels   schedule 16.12.2014set_property vhdl_version vhdl_2008 [current_fileset]
и снова запустить синтез-›без изменений.Как связаться с Xilinx?Вебкейсы упразднены...форум? - person Paebbels   schedule 16.12.2014