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

    

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 придумали...

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


Ссылка на сообщение
Поделиться на другие сайты
Вообще-то как раз для этого 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;

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация