2015-04-21 1 views
2

У меня есть пакет VHDL, который определяет функцию (forward declaration) и константу. Значение константы вычисляется с помощью этой функции, тело которой находится в корпусе пакета.Почему я не могу вызвать функцию в объявлении константы, которая определена в том же пакете в ModelSim?

На данный момент ModelSim/QuestaSim - единственный инструмент, который не любит этот код. Он нуждается в 2 пакетах, поэтому тело анализировалось до объявления константы.

package test is 
    function mytest(param : boolean) return boolean; 

    constant value : boolean := mytest(TRUE); 
end package; 

package body test is 
    function mytest(param : boolean) return boolean is 
    begin 
    return not param; 
    end function; 
end package body; 

Разве это не допускается в VHDL и другие инструменты используют смягченные правила синтаксического анализа, или в том, что в вопросе ModelSim?

ответ

6

С отложенным постоянной, и назначить в тело пакета после того, как mytest функция разработана, возможно, даже в ModelSim:

package test is 
    function mytest(param : boolean) return boolean; 
    constant value : boolean; 
end package; 

package body test is 
    function mytest(param : boolean) return boolean is 
    begin 
    return not param; 
    end function; 
    constant value : boolean := mytest(TRUE); 
end package body; 

Обработка через различные инструменты, как представляется, противоречива, поскольку, как вы заметили, ModelSim требует отложенная константа, но Altera Quartus II позволяет назначать константу до разработки функции, таким образом, без отложенной константы.

The VHDL-2008 стандартов охватывает разработку подпрограммы в:

14.4.2.1 Общие сведения: ..., это незаконно, чтобы вызвать подпрограмму, прежде чем его соответствующий орган разрабатывается.

Влияния разработки подпрограммы тела описывается в:

14.4.2.2 декларация подпрограммы органы и конкретизации: ... Разработка тела подпрограммы, кроме подпрограммы тела uninstantiated подпрограммы , не имеет никакого эффекта, кроме как установить, что тело может с этого момента использоваться для выполнения вызовов подпрограммы .

+1

Таким образом, ценность по-прежнему доступна для всего мира другими объектами или пакетами 'use mylib.test.value;'? – Paebbels

+1

Да, после разработки 'package' и' package body' константа 'value' может использоваться как любая другая константа из пакета. –

 Смежные вопросы

  • Нет связанных вопросов^_^