
- •Тема: о составном подтипе данных языка vhdl record (запись) и его возможностях при разработке проектов цифровых устройств
- •Вводные замечания
- •Синтаксис Объявление и определения составного типа данных record
- •Примеры vhdl проектов на базе данных типа данных record
- •1. Вводные замечания
- •2. Синтаксис Объявление и Определения составного типа данных record
- •3. Примеры vhdl проектов на базе данных типа record
Файл Lekz9_Record
Лекция № 9 (5-тый курс)
Тема: о составном подтипе данных языка vhdl record (запись) и его возможностях при разработке проектов цифровых устройств
Вопросы по теме:
Вводные замечания
Синтаксис Объявление и определения составного типа данных record
Примеры 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 могут играть также роль входных/выходных портов.