Перейти к содержанию
    

Quartus + несинтезируемые констуркции VHDL

У меня в модуле применяется настройка, меняющая его поведение.

 

    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 и не ругаться ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если я правильно понял задачу, то

VHDL:

-- synthesis translate_off

-- synthesis translate_on

 

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если я правильно понял задачу, то

VHDL:

-- synthesis translate_off

-- synthesis translate_on

 

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

Код то он игнорирует. Причем полностью. И соответственно Report не выводит....

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насколько я понял, в коде, который вешает 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;

 

Таки образом мы гарантируем, что, во-первых, функция выполнится один раз и, во-вторых, фунция выполнится в самом начале симуляции, потому что она инициализирует константу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо !

Что-то не догадался попробовать через функции :beer: !

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще-то как раз для этого assert придумали...

Так не работает....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что именно не работает? В квартусе проблема?

Modelsim виснит наглухо без оператора wait. А с ним отказывается работать Quartus. Замкнутый круг какой-то...

Проблему решил по методу, который мне посоветовал уважаемый andrew_b, т.е написал вывод сообщения через функцию и константу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так не работает....

 

Так а зачем вам 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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так а зачем вам 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;

Да действительно можно и так. Спасибо...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...