Jump to content

    
Sign in to follow this  
Flip-fl0p

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

Recommended Posts

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

 

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

 

Share this post


Link to post
Share on other sites

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

VHDL:

-- synthesis translate_off

-- synthesis translate_on

 

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

 

 

Share this post


Link to post
Share on other sites
Если я правильно понял задачу, то

VHDL:

-- synthesis translate_off

-- synthesis translate_on

 

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

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

 

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites
А что именно не работает? В квартусе проблема?

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

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

Share this post


Link to post
Share on other sites
Так не работает....

 

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

Share this post


Link to post
Share on other sites
Так а зачем вам 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;

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this