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

#methods #record #vhdl #xilinx

#методы #запись #vhdl #xilinx

Вопрос:

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

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

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

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

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

Ответ №1:

Нет, но вы можете приблизиться к 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.

Комментарии:

1. хм. они выглядят объектно-ориентированными. Вы пробовали их сами (с помощью какого синтезатора)? Также я обнаружил, что защищенные типы не поддерживаются в ISim xilinx.com/support/answers/33123.htm

2. Да, они довольно ОО. Я использовал их при моделировании с помощью Modelsim. И теперь, когда вы упомянули об этом, я попробовал их с ISIM, и, да, он подавился ими: (

Ответ №2:

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

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

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

Комментарии:

1. причина в том, что такой подход не похож на ООП. Это выглядит более естественно при вызове встроенного атрибута my_std_logic_vector’length вместо get_length(my_std_logic_vector)