Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Quartus + несинтезируемые констуркции VHDL
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Среды разработки - обсуждаем САПРы
Flip-fl0p
У меня в модуле применяется настройка, меняющая его поведение.

Код
    generic
    (
        Edge_type                : string  := "All_edge"   -- Rising / Falling / All_edge тип детектированного фронта
    );


Захотелось мне добавить в описание модуля конструкцию report, которая отслеживает правильность ввода параметров модуля. Мало ли я где буковкой или регистром ошибусь. Так пусть мне на консоль выводится сообщения об этом. Но столкнулся с проблемой, что языковые конструкции которые понимает Quartus - наглухо вешают Modelsim, да так, что только через диспетчер задач его можно закрыть...
Код
    --===================================
    -- Понимает quartus, но вешает modelsim
    --===================================
    parametr_checker : process(all)
    begin

        if (Edge_type    /= "All_edge" and
            Edge_type    /= "Falling" and
            Edge_type    /= "Rising") then
            report LF&
                "Incorrect parametr : 'Edge_type' Check syntaxis !" &LF&
                "Note : parametr case-sensitive !"&LF severity error;
        end if;
    end process;


А вот конструкции, которые понимает Modelsim заставляют ругаться Quartus.
Код
    --===================================
    -- Понимает modelsim но ругается quartus
    --===================================
    parametr_checker : process
    begin

        if (Edge_type    /= "All_edge" and
            Edge_type    /= "Falling" and
            Edge_type    /= "Rising") then
            report LF&
                "Incorrect parametr : 'Edge_type' Check syntaxis !" &LF&
                "Note : parametr case-sensitive !"&LF severity error;
        end if;
        wait;
    end process;


Как убедить Quartus и Modelsim сообщать мне Report и не ругаться ?
goodsoul
Если я правильно понял задачу, то
VHDL:
-- synthesis translate_off
-- synthesis translate_on

должно помочь. Указывает синтезатору квартуса игнорить кусок кода. Оно?

Flip-fl0p
Цитата(goodsoul @ Jan 16 2018, 11:22) *
Если я правильно понял задачу, то
VHDL:
-- synthesis translate_off
-- synthesis translate_on

должно помочь. Указывает синтезатору квартуса игнорить кусок кода. Оно?

Код то он игнорирует. Причем полностью. И соответственно Report не выводит....
andrew_b
Насколько я понял, в коде, который вешает Modelsim, получается что-то типа бесконечного цикла.
Я делаю по-другому:
Код
architectute rtl of foo is

function CheckParameters return boolean is
variable ok : boolean;
begin
       ok = ...;

       if (!ok) then
          report ...;
       end if;

       return ok;
end;

constant ok : boolean := CheckParameters;


Таки образом мы гарантируем, что, во-первых, функция выполнится один раз и, во-вторых, фунция выполнится в самом начале симуляции, потому что она инициализирует константу.
Flip-fl0p
Цитата(andrew_b @ Jan 16 2018, 12:02) *

Спасибо !
Что-то не догадался попробовать через функции beer.gif !
alexadmin
Вообще-то как раз для этого assert придумали...
Flip-fl0p
Цитата(alexadmin @ Jan 16 2018, 16:44) *
Вообще-то как раз для этого assert придумали...

Так не работает....
Viktuar
Цитата(Flip-fl0p @ Jan 16 2018, 13:50) *
Так не работает....


А что именно не работает? В квартусе проблема?
Flip-fl0p
Цитата(Viktuar @ Jan 16 2018, 21:51) *
А что именно не работает? В квартусе проблема?

Modelsim виснит наглухо без оператора wait. А с ним отказывается работать Quartus. Замкнутый круг какой-то...
Проблему решил по методу, который мне посоветовал уважаемый andrew_b, т.е написал вывод сообщения через функцию и константу.
alexadmin
Цитата(Flip-fl0p @ Jan 16 2018, 16:50) *
Так не работает....


Так а зачем вам process? Пишите непосредственно в теле архитектуры
Код
     assert (Edge_type = "All_edge" or
      Edge_type = "Falling" or
     Edge_type = "Rising")
             report LF& "Incorrect parametr : 'Edge_type' Check syntaxis !" &LF&
                      "Note : parametr case-sensitive !"&LF severity error;
Flip-fl0p
Цитата(alexadmin @ Jan 17 2018, 10:45) *
Так а зачем вам process? Пишите непосредственно в теле архитектуры
Код
     assert (Edge_type = "All_edge" or
      Edge_type = "Falling" or
     Edge_type = "Rising")
             report LF& "Incorrect parametr : 'Edge_type' Check syntaxis !" &LF&
                      "Note : parametr case-sensitive !"&LF severity error;

Да действительно можно и так. Спасибо...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.