Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekz9_record.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
3.16 Mб
Скачать

Файл Lekz9_Record

Лекция № 9 (5-тый курс)

Тема: о составном подтипе данных языка vhdl record (запись) и его возможностях при разработке проектов цифровых устройств

Вопросы по теме:

  1. Вводные замечания

  2. Синтаксис Объявление и определения составного типа данных record

  3. Примеры vhdl проектов на базе данных типа данных record

1. Вводные замечания

Как известно, язык VHDL поддерживает работу с такими 4-мя типами данных:

  • Скалярные типы (scalar types) (в структуре этих типов содержится всегда один единственный элемент базового типа с соответствующим ему значением);

  • Составные типы (composite types) (в структуре этих типов всегда содержится определенное множество элементов, каждому из которых соответствует значение базового или другого составного типа);

  • Типы доступа (access types) (обеспечивают доступ к объектам других типов посредством указателей (через их адреса);

  • Файловые типы ( files ) (обеспечивают доступ к файлам ОС, которые содержат последовательность значений определенного базового типа).

В этой лекции мы уточним некоторые положения языка VHDL касающиеся составных типов (composite types) данных.

Руководство пользователя по языку VHDL так формулирует понятие о составном типе данных:

Объект составного типа – это совокупность (множество) других объектов, называемых элементами. Элементы могут иметь любой скалярный (scalar) тип или другой составной (composite) тип. Объектам составного типа запрещено содержать в своей структуре элементы файлового (file) типа.

В языке VHDL выделяют два подкласса composite types: array types и record types, т.е. подтип массив (array type) и подтип запись (record types).

Различие между объектами типов arrays и records состоит в том, что все элементы объекта типа массив должны иметь в своей структуре один и тот же тип, в то время как объекта типа запись могут иметь в своей структуре элементы разного типа.

Например, каждый элемент массива может быть значением напряжения. С другой стороны, каждый элемент record может иметь различный тип (Voltage1, current1, resistance1,Voltage2,&ldots;).

Второе важное отличие объекта типа массив от объекта типа запись состоит в том, что обращение (вызов, доступ) к каждому элементу массива реализуется через имя (идентификатор) массива, порядковый номер индекса и значения индекса в массиве. Обращение (вызов, доступ) к элементам объектов типа запись (элементы объектов типа запись часто называют полями) реализуется через общее имя (идентификатор) записи и индивидуальные имена (идентификаторы) полей (вместе с именем всей записи). Эти два конструктивные образования отделяются друг от друга точкой. (Обратите внимание: элементы записей обозначаются именами вместо индексов). Другими словами конструкция обращения к элементу массива и элементу записи совершенно разные. Так обращение (вызов, доступ) к элементу объекта типа запись реализуется через конструкцию вида: record_name.element_name

в то время как обращение (вызов, доступ) к элементу объекта типа массив реализуется через конструкцию вида: array_ name(value Index1,..., value IndexN).

Третье важное отличие объекта типа массив от объекта типа запись состоит в том, что они имеют разные конструкции своих объявлений. Предварительно покажем отличие конструкций объявлений объекта типа массив от объекта типа запись на примере:

Пример 1.

type T_MonthlyIncome is array (1 to 12) of Integer; -- объявление массива

Пример 2.

type T_PersonalData is   record -- объявление записи

      FirstName : String (1 to 6); -- объявление элемента записи

      LastName : String (1 to 10); -- объявление элемента записи

      IDNumber : String (1 to 5); -- объявление элемента записи

      Incomes : T_MonthlyIncome; -- объявление элемента записи

      TaxPaid : Boolean; -- объявление элемента записи

  end record; -- конец объявления записи

Два примера выше иллюстрируют объявлений двух подклассов составного типа. Первый объявляет одномерный массив, содержащий 12 элементов целочисленных значений, в то время как второй объявляет запись с пятью полями (элементами). Первые четыре поля в объявлении записи имеют составные типы, в то время как самый последний имеет скалярный тип.

Имея в своем распоряжение объявление типа запись (record), конструктор посредством него может вводить в проект объявления программных величин вида Signal,Variable, Constant. В примере 3 иллюстрируется эта возможность.

Пример 3.

Signal Year97Inc : T_MonthlyIncome;

Signal SomeEmployee : T_PersonalData;

В примере 3 объявлены два сигнала. Сигнал (Signal Year97Inc) объявлен типом примера 1, т.е. как массив типа T_MonthlyIncome. Сигнал (Signal SomeEmployee) объявлен типом примера 2, т.е. как запись типа T_PersonalData.

Пример 4.

Year97Inc(12) <= 5500;

SomeEmployee.FirstName <= "Gordon";

В примере 4 иллюстрируются способы обращение к элементам массива и к элементам записи для назначения этим элементам значений. Обратите внимание на способы обращения к элементам составных типов: в случае массивов (через значение индекса), в то время как в записи через имя поля (с предшествующей точкой).

Четвертая отличительная особенность записей состоит в том, они позволяют значительно сократить объем головного программного кода проекта и делают проект удобно читабельным, т.к. конструктор может снабдить элементы записей именами (идентификаторами) отражающими их физическую сущность и функциональное назначение.

Значительно сократить объем головного программного кода проекта можно также путем размещения объявлений типа record в пакетах рабочих библиотек (библиотек Work) проектов. В такой ситуации объекты типа record могут играть также роль входных/выходных портов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]