Функция VHDL без параметров? - PullRequest
0 голосов
/ 12 марта 2019

Можно ли определить функцию VHDL без параметров?

Я пытаюсь вычислить количество битов в типе записи, но для этого необходимо создать экземпляр этого типа. Поэтому, поскольку я не могу просто определить const BITS = t_rec.a'length + t_rec.b'length, я бы хотел определить функцию function BITS() return natural, которая создает запись rec : t_rec и возвращает rec.a'length + rec.b'length. Однако компилятор завершается с ошибкой unexpected '(') при объявлении функции, прежде чем он даже достигнет определения.

Я бы просто включил неиспользуемый фиктивный параметр, но я подозреваю, что инструменты lint будут жаловаться.

Определение подтипов для каждого поля записи перед записью было бы слишком многословным.

Полный пример:

package pack is function BITS() return natural; end package pack; package body pack is function BITS() return natural is begin return 0; end function; end package body pack;

Сообщение об ошибке:

pack.vhd:1:30: empty interface list not allowed

1 Ответ

4 голосов
/ 12 марта 2019

Вы должны опустить скобки при определении функции без ввода, например:

function BITS return natural is
  variable rec : rec_t;
begin
  return rec.a'length + rec.b'length;
end function;

Вы также не должны включать скобки при вызове функции. например:

report integer'image( BITS );

не

report integer'image( BITS() );

https://www.edaplayground.com/x/5fMB

...