Vivado разучился делать вывод типов?

У меня есть масса таких экземпляров сущностей:

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) на предмет отсутствующих файлов/компонентов.


person Paebbels    schedule 16.12.2014    source источник
comment
Находится ли Reset (или метка GPIO) в строке 645? Это не конструктор типа, это квалифицированное выражение, предназначенное для явного указания типа и, возможно, подтипа операнда, который является выражением или агрегатом, а литерал перечисления может быть первичным. Это не вывод типа, это разрешение перегрузки. Это также разочаровывает, что подсветчик VHDL Stackoverflow не знает, что символьный литерал не может следовать сразу за идентификатором, правой скобкой, правой скобкой, зарезервированным словом all, символьным литералом или строковым литералом (IR1045 -1993). Покажите предложения контекста.   -  person    schedule 16.12.2014
comment
Строка 645 отмечена в приведенном выше коде. -- Конструктор против качества. выражение: я читал книгу, в которой (..) описывался как конструктор с необязательным параметром типа в качестве префикса... квалифицированное выражение звучит лучше :) -- Насколько я знаю, разрешение перегрузки не может решить проблему разных возвращаемых значений, это решаемо выводом обратного типа.   -  person Paebbels    schedule 16.12.2014
comment
Квалифицированное выражение не является строго оператором типа. IEEE Std 1076-2008 12.5 Контекст разрешения перегрузки. Перегрузка определяется для имен, подпрограмм и литералов перечисления, см. ПРИМЕЧАНИЕ 3. Либо инструмент синтеза неверен, либо ваши контекстные предложения для двух объектов могут нам что-то сказать. По моему опыту это инструмент, я видел два анализатора с похожими проблемами. Вы должны поговорить с Xilinx, им понадобится минимальный полный и проверяемый пример. Квалифицированное выражение локально статично, без выражения глобально статично. Я еще не видел достаточно.   -  person    schedule 16.12.2014
comment
В некоторых книгах используется неправильная терминология. Вы могли бы упомянуть книгу VHDL, в которой использовалось слово конструктор — некоторые авторы читают эту группу или читают свои обзоры на Amazon и внесут исправления в свою следующую редакцию.   -  person Jim Lewis    schedule 16.12.2014
comment
@DavidKoontz Я добавил минимальный полный пример для Vivado. Я протестировал его в чистом новом проекте с настройками по умолчанию. Один модуль верхнего уровня и один тумблер-триггер с аппаратным сбросом. Вам нужно больше кода?   -  person Paebbels    schedule 16.12.2014
comment
Я написал что-то подобное, но без предложения использования для numeric_std из вашего первого примера, включая деление на 2, и сгенерировал дамп формы волны. Ваш MCVe также (тот же испытательный стенд, объект, добавленное имя порта изменено). В ваших предложениях контекста нет ничего, что могло бы вызвать это. Похоже на недостаток в новом инструменте и нет набора тестов. Любые интересные флаги / конфигурация командной строки или это тоже Fisher-Price? Свяжитесь с Силинкс. По крайней мере, у вас есть работа вокруг.   -  person    schedule 16.12.2014
comment
Итак, Vivado 2013.4 имеет те же проблемы :( ... Я использовал пустой проект и добавил один исходный файл (см. выше). После этого я нажал «Запустить синтез». Я также попытался включить VHDL-2008 с помощью этой команды TCL: set_property vhdl_version vhdl_2008 [current_fileset] и снова запустить синтез-›без изменений.Как связаться с Xilinx?Вебкейсы упразднены...форум?   -  person Paebbels    schedule 16.12.2014
comment
@DavidKoontz Я использовал один файл для своего минимального примера: сущность, архитектура, сущность, архитектура. Может ли VHDL найти компонент в том же файле, если он объявлен позже? Это инструмент или языковая проблема?   -  person Paebbels    schedule 18.12.2014


Ответы (2)


Это не обязательно отвечает на ваш вопрос, но отвечает на ваш вопрос в цепочке комментариев:

Итак, Vivado 2013.4 имеет те же проблемы :( ... Я использовал пустой проект и добавил один исходный файл (см. Выше). После этого я нажал «Запустить синтез». Я также попытался включить VHDL-2008 с помощью этой команды TCL: set_property vhdl_version vhdl_2008 [current_fileset] и снова запустить синтез -> без изменений.Как я могу связаться с Xilinx?Вебкейсы упразднены...форум?

См. AR# 62291. Оказывается, вы все еще можете открывать новые вопросы веб-кейса через open Webcase действие.

Тестовый пример, который я написал из вашего исходного фрагмента, по совпадению имеет правильный порядок объявления/спецификации между тестовым примером и его тестируемой единицей прямого объекта (обозначенной GPIO):

library ieee;
use ieee.std_logic_1164.all;
-- use ieee.numeric_std.all;

entity pb_GPIO_Adapter is
    generic (foo: natural := 42);
    port (
    Clock:  in      std_logic;
    Reset:  in      std_logic;
    dummy:  out     std_logic
    );
end entity;

architecture foo of pb_GPIO_Adapter is

begin
DUMB:
    process (Clock, Reset)
        variable dumbit:    std_logic := '0';
    begin
        if Reset = '1' then
            dumbit := '0';
        elsif rising_edge(Clock) then
            dumbit := not dumbit;
        end if;
        dummy <= dumbit;
    end process;
end architecture;

library ieee;
use ieee.std_logic_1164.all;

entity fum is
end entity;

architecture fie of fum is
    signal dummy:       std_logic;
    signal CPU_Clock:   std_logic := '0';
    signal Reset:       std_logic;
begin
GPIO: 
    entity work.pb_GPIO_Adapter -- work substituted for L_PicoBlaze
        generic map (
           foo => 42
        )
    port map (
        Clock    => CPU_Clock,         -- Clock : in STD_LOGIC;
        Reset    => '0',               -- Reset : in STD_LOGIC;
        dummy    => dummy
    );
CLOCK:
    process
    begin
        wait for 10 ns;
        CPU_Clock <= not CPU_Clock;
        if Now > 200 ns then
            wait;
        end if;
    end process;
end architecture;

Заметьте, что я естественно (для себя) получил правильный порядок анализа. Я хотел поднять порядок в вашем минимальном проверяемом и полном примере, но в комментарии это было сокращено. Вы также можете заметить, что длинные цепочки комментариев и ответов не доступны для поиска, все, что там собрано, бесполезно для других пользователей stackoverflow.

Глядя на AR# 62291 (кстати для Vivado 2014.3) мы видим под Solution -

Ошибка возникает из-за того, что файл RTL не синхронизирован, а тип сигнала объявлен неправильно.

Обратите внимание, что язык не соответствует терминологии VHDL.

Это соответствует предыдущим загадочным сообщениям Xilinx об ошибках XST и указывает на необходимость по крайней мере проанализировать и разработать проектные спецификации перед синтезом. Мы могли надеяться на лучшее. По крайней мере, найти информацию по коду ошибки Xilinx (например, [Synth 8-2396]) проще, чем по некоторым конкурентам.

В любом случае, то, что вы получили то же самое в своем MVCe, и содержимое находится в неправильном порядке анализа, говорит нам, что это можно исправить с помощью тяжелой работы.

Вы также можете заметить, что в ссылке AR# 62291 есть действие с пометкой open Webcase, которое приведет вас на страницу поддержки WebCase, где вы сможете войти и открыть новую Webcase вопрос.

Я думаю, как только вы найдете проблему с порядком анализа в своем дизайне и исправите ее, вы вернетесь в бизнес.

И мораль этой истории в том, что поддержка Xilinx в Интернете должна быть точкой первого контакта для относительно новых проблем Vivado.

Чтобы создавать вопросы с ответами с помощью тега vivado, вы также может ответить на ваши вопросы. В настоящее время есть только шесть вопросов с тегом, это может помочь привлечь больше вопросов и ответов. (Ни на один из шести вопросов с пометкой Vivado ответы не приняты).

person Community    schedule 18.12.2014
comment
Я также нашел несколько советов по компиляции порядка/отсутствующих файлов... Я собираюсь проверить свой список файлов и порядок компиляции. -- Webcases: да, веб-страница и сайт входа существуют, но я не могу получить доступ (у меня есть действительный ключ, и я являюсь участником XUP). Я также подал заявку на получение доступа, но она была отклонена. Мои коллеги, у которых был вход в веб-кейс, могут войти в систему, но не могут создавать новые веб-кейсы. - person Paebbels; 19.12.2014
comment
У меня были учетные записи Xilinx более 15 лет. Я только что попробовал последний, который я открыл, он был одобрен, и я представляю Селф. Может быть, что-то сделать с адресом электронной почты или другой информацией, которую вы предоставили? - person ; 19.12.2014

Неправильное разрешение перегрузки типа вызвано более ранней или более поздней синтаксической ошибкой в ​​том же исходном файле.

Ищите ошибки вокруг экземпляра. Исправление всех проблем с перегрузкой типов покажет, что это связано не с типами, а с другой ошибкой. Когда вы исправите эту ошибку, вы сможете отменить все исправления для перегруженных типов, и теперь они будут работать.

person Paebbels    schedule 26.04.2018
comment
Я только что увидел вопрос, и действительно, это тоже была моя первая ассоциация. Я уже видел, как Vivado выдает странные сообщения об ошибках из-за проблем в другом месте кода. Хорошо, что ты решил. - person JHBonarius; 27.04.2018