Flip-fl0p 4 16 января, 2018 Опубликовано 16 января, 2018 · Жалоба У меня в модуле применяется настройка, меняющая его поведение. 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 0 16 января, 2018 Опубликовано 16 января, 2018 · Жалоба Если я правильно понял задачу, то VHDL: -- synthesis translate_off -- synthesis translate_on должно помочь. Указывает синтезатору квартуса игнорить кусок кода. Оно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 16 января, 2018 Опубликовано 16 января, 2018 · Жалоба Если я правильно понял задачу, то VHDL: -- synthesis translate_off -- synthesis translate_on должно помочь. Указывает синтезатору квартуса игнорить кусок кода. Оно? Код то он игнорирует. Причем полностью. И соответственно Report не выводит.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 16 января, 2018 Опубликовано 16 января, 2018 · Жалоба Насколько я понял, в коде, который вешает 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 4 16 января, 2018 Опубликовано 16 января, 2018 (изменено) · Жалоба Спасибо ! Что-то не догадался попробовать через функции :beer: ! Изменено 16 января, 2018 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 16 января, 2018 Опубликовано 16 января, 2018 · Жалоба Вообще-то как раз для этого assert придумали... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 16 января, 2018 Опубликовано 16 января, 2018 · Жалоба Вообще-то как раз для этого assert придумали... Так не работает.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Viktuar 0 16 января, 2018 Опубликовано 16 января, 2018 · Жалоба Так не работает.... А что именно не работает? В квартусе проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 16 января, 2018 Опубликовано 16 января, 2018 · Жалоба А что именно не работает? В квартусе проблема? Modelsim виснит наглухо без оператора wait. А с ним отказывается работать Quartus. Замкнутый круг какой-то... Проблему решил по методу, который мне посоветовал уважаемый andrew_b, т.е написал вывод сообщения через функцию и константу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 17 января, 2018 Опубликовано 17 января, 2018 · Жалоба Так не работает.... Так а зачем вам 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 4 17 января, 2018 Опубликовано 17 января, 2018 · Жалоба Так а зачем вам 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; Да действительно можно и так. Спасибо... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться