Определите метод для записи в vhdl

Можно ли определить что-то вроде метода экземпляра в стиле ООП для записи в VHDL, которая будет распознана XST?

Для типа записи прямоугольник:

type rectangle is record
    x      : integer;
    y      : integer;
    width  : integer;
    height : integer;
end record; 

Я хотел бы определить такие методы, как is_square, get_area и т. д.

Можно ли это сделать с помощью атрибутов?


person Andrey Pesoshin    schedule 14.10.2011    source источник


Ответы (2)


Нет, но вы можете приблизиться к protected типам.

Вот пример, взятый из Защищенные общие переменные в VHDL: IEEE Std 1076a.

type shared_counter is protected body
     variable count : integer := 0;
     procedure reset is
     begin
         count := 0;
     end procedure reset;
     procedure increment (by : integer := 1) is
     begin
         count := count + by;
     end procedure increment;
     impure function value return integer is
     begin
         return count;
     end function value;
end protected body shared_counter;

Я понятия не имею, можно ли синтезировать концепцию защищенного типа с XST.

person Martin Thompson    schedule 14.10.2011
comment
хм. они выглядят объектно-ориентированными. Пробовали ли вы их сами (с каким синтезатором)? Также я обнаружил, что защищенные типы не поддерживаются в ISim xilinx.com/support/answers/33123. .htm - person Andrey Pesoshin; 14.10.2011
comment
Да, они вполне ОО. Я использовал их в моделировании с помощью Modelsim. И теперь вы упомянули об этом, я пробовал их с ISIM, и, да, он ими подавился :( - person Martin Thompson; 14.10.2011

Есть ли какая-то причина, по которой вы не хотите просто определить несколько функций вместе с вашими пользовательскими типами?

В дополнение к определению новых функций (таких как is_square выше) вы можете переопределить существующие функции (такие как +, ‹ и т. д.), если это имеет смысл для вашего кода.

Обычно вы оборачиваете свои пользовательские типы и функции для управления ими в пакет, который затем используете в своем коде. См., например, стандартные пакеты VHDL math_real и numeric_std.

person Charles Steinkuehler    schedule 14.10.2011
comment
причина в том, что такой подход не похож на ООП. Это выглядит более естественно при вызове встроенного атрибута my_std_logic_vector'length вместо get_length(my_std_logic_vector) - person Andrey Pesoshin; 14.10.2011