Суворова Е.А., Шейнин Ю.Е. Проектирование цифровых систем на VHDL (2003) (1095892), страница 14
Текст из файла (страница 14)
Значения элементов массива можно изменять с помощью оператора присваивания. При работе с массивом через указатели, для изменения размера самого массива его необходимо создать заново. Например, чтобы добавить в него два элемента, необходимо выполнить следующее действие: ас«ьч «ззпев:=пеи «ззпе аггау'(ас«ьч «ппев.а11а«залпе агзау'(70 пв, 100 цв)); В результате массив будет состоять из пяти элементов. Первые три из них будут содержать значения из исходного массива, а два новых значения будут добавлены в конец: (10 пв, 15 цв, 20 цв, 70 ця, 100 пв) Операторы н данные языка Ит01 Для того чтобы создать указатель на объект определенной длины на базе типа с незаданной длиной, можно воспользоваться прямым указанием длины, а не агрегатом, на базе которого она вычисляется. Например: ассьчасьоп с)тпеег=ови сапе аггау (1 Со 10); Организация связанных структур данных Частичное предописание В ОгСА0 Ехргезв 9.1 частичное предописание не поддерживается (выдается сообщение Зуп(ах Еггог). В Рооп((а((оп Ехргевв наличие частичного предописания не приводит к возникновению синтаксической ошибки, но при синтезе зто описание игнорируется.
В связанной структуре данных каждый объект состоит из двух частей. В первой из них располагаются собственно данные, а вторая включает в себя указатели на другие объекты структуры, Например, однонаправленный список может быть построен на базе объектов, имеющих следующую структуру: куре ча1ие се11 1в гвсого ча1ие: ъьс чессог( О со 3) пехс се11гча1ие рсгг еаа гвсог(( ча1ие се11г куре ча1ие рсг ьв аооевв ча1ие се11; При таком описании подобной структуры возникают проблемы„связанные с тем, что каждый из описанных типов определяется при помощи другого.
Для разрешения этой проблемы используется частичное предописание. В нем сначала описывается тип запись, на базе которого будет создаваться список, затем описывается указатель на этот объект, а уже после этого описывается структура самого объекта. Например: суре ча1ие се11; суре ча1ие рпг Ьв ассввв ча1ие се11; суре ча1ие се11 1в гесого ча1иег Ыс чессог( О со 3) пехс се11гча1зе зсгг еео гвсого ча1ое се11г Организация списка. На базе описанных выше объектов организуем список, в котором объекты добавляются в самое начало. Глава 2 тавазазза зта1ие 11ве: иа1ие рек; иа1ие 1звс:=пои зта1ие рз с! зта1ие 1звсз=пеы иа1ие се11'(В"1000",иа1ие 11вс) В результате выполнения этих действий список будет иметь вид, показанный на рис. 2.5.
На)ие 11в1 Рис 2.В. Состояние списка ! Добавим в список еще один элемент: иа1ие 1звк:=пеи иа1ие рек'(В"0000",зта1ие 1звк); В результате список примет вид, представленный на рис. 2.6. На(ие (а! Рис 2.6. Состояние списка 2 Для того чтобы выполнять действия над всей последовательностью элементов списка, можно воспользоваться следующей циклической конструкцией: ситтепс се11з=иа1ие 1звс зз)з11е сиз кепс се11 /= пи11 1оор — Выполнение необходимых действий с текушим элементом списка. ситсепс се11:=ситсепс се11.пехс се11! епзз аоор; Удаление объектов-указателей из памяти.
Для удаления из памяти объекта, ранее распределенного с помощью механизма указателей, служит процедура аеа11осаса. ОНа ГЕНЕрИрУЕтСЯ аВтОМатИЧЕСКИ дпя КаждОГО уКаЗатЕЛЬНОГО типа. Пусть определен тип т. ехре т рст Ав асеева т! Для типа т рст процедура аеа11осаае ИМЕЕТ слсдующий заГоЛОВОК: оеа11осасе(Р: ьпоие т рек); В программе, например, она может быть использована следующим образом: се11 са )эе де1есебз=ча1ие 11вс! иа1ие 11вс:ваа1ие 11вс.пенс се11; ааа11осаее(се11 со )зе бе1есез)) Операторы и данные языка УНО1 После выполнения этой последовательности действий в списке останутся только элементы, начиная с того, на который теперь указывает ча1ое 11ас. ОбЪЕКт, На КОтОрЫй уКаЗЫВаЕт се11 Со Ье де1ееест, КОррЕКтНО удаЛяЕтея ИЗ памяти. Если он был не первым объектом в списке, то все предшествующие ему объекты превращаются в "мусор". Обращение к объекту, который уже удален из памяти, может иметь непредсказуемые последствия (от возвращения в качестве результата случайных данных до полной остановки процесса моделирования).
Абстрактные типы данных На базе указательных структур могут создаваться так называемые абстрактные типы данных (АЬзггасг Рига Турез, АРТ). АОТ включает в себя тип данных, а также набор операций по созданию объектов этого типа и работы с ними. В идеале, при работе с таким типом пользователю не должна быть видна его внутренняя структура. Однако язык ЧНьт(. не предоставляет механизма, позволяющего скрыть структуру объекта. Наиболее подходящим методом реализации АРТ в ЧНР(. является создание пакетов. В декларации пакета производится описание структуры данных, декларируются функции и процедуры для работы с этой структурой.
В теле пакета размещается реализация этих процедур и функций. Но и здесь, поскольку в ЧНР(., в отличие, например, от С++, нет средств сокрытия описаний, ничто не мешает пользователю иметь свободный доступ к структуре данных без использования процедур и функций, для этого предназначенных.
Механизм шаблонов пакетов Для выполнения таких операций, как добавление элемента в список, не важен тип элементов, из которых состоит список. ЧНР) не имеет механизмов для параметризации по имени типа, поэтому лля решения этой проблемы используется механизм создания шаблонов пакетов. Каждый раз, когда требуется работать с конкретным типом данных, делается очередная копия шаблона пакета и в нее подставляются конкретные имена в соответствии с этим типом. Ограничения на практическое применение указательных типов Во многих системах автоматизированного проектирования на ПЭВМ компиляторы ЧНР(.
не поддерживают указательные типы (частично или полностью). Глава г В ОгСАР Ехргезз собственно указательные типы полдерживаются, но не поддерживается организация ссылочных структур на этой основе. Это дела- ет их использование практически бесполезным. В гоцпда0оп Ехргезз указательные типы не поддерживаются вовсе, что свя- зано с трудностью их интерпретации при реализации физических структур. Оператор присваивания нового значения переменной имеет традиционный для процедурных языков синтаксис — метка, объект, которому присваива- ется новое значение, знак присваивания, а в левой части — выражение. ~1аЬе1:~паве:=ехргеээьоп; Перечень операций, которые могут встречаться в выражениях, определяю- гцих значения переменных, приведен в табл.
2.4. Таблица 2.4. Перечень операторов Оператор Операция Тип левого Тип правого Тип резульоперанда операнда тата 1пгедег Тот же, что и у левого опе- ранда Возведение е степень ъпеедег, геа1 Числовой Тот же, что и у операнда 1пеедег Абсолютное зна- чение Тот же, что и у операнда Отрицание ъпеедег поп Тот же, что и у операндов Тот же, что и у левого опе- ранда Умножение ьпеедег нли геа1 Физический ъпгедег или геа1 Операторы Оператор присваивания Операции над данными в выражениях Ььг, Ьоо1еап или одномерный массив из элементов этих типов Тот же, что и у левого опе- ранда 61 Таблица 2А (продолжение) Оператор Операция Тип левого операнда Физический Деление Физический Физический впседет зпседет Увеличение на 1 Числовой Уменьшение на 1 Числовой Числовой Сложение Физический Физический Вычитание Физический Физический Физический Конкатенация Операторы н данные языка УН01 Деление по мо- дулю Остаток от деле- ния зпседет ипи теа1 зпседет или геа1 Физический Числовой Одномерный массив Тип правого операнда Тот же, что и у левого опе- ранда 1пседет или теа1 Тот же, что и у левого опе- ранда Тотже, что ну левого опе- ранда Тот же, что и у левого опе- ранда Тот же, что и у левого опе- ранда Тот же, что и у левого опе- ранда Тот же, что и у левого опе- ранда Тот же, что и у левого оге- ранда Тот же, что и у левого опе- ранда Тип резуль- тата Тот же, что и у правого опе- ранда Тот же, что и у операндов Тот же, что и у левого опе- ранда ппЫетза1 1оседет Тот же, что и у операндов Тот же, что и у операндов Арифметиче- ский сдвиг влево Тот же, что и у левого опе- ранда Тот же, что и у операндов Тот же, что и у операндов Тот же, что и у операндов Глава 2 Таблица 2.4 (продолжение) Тип левого операнда Тип правого операнда Тип резуль- тата Числовой Сложение Числовой Вычитание Одномерный массив Конкатенация Тот же, что и у операндов 1птедет е11 аптедет ет1 1птедет 1птедет 1птедет Циклический сдвиг влево то1 1птедет Циклический сдвиг вправо тот Оператор Операция Логический сдвиг влево Логический сдвиг вправо Арифметический сдвиг влево Арифметический сдвиг вправо Одномерный массив с элементами типа Ьвт или Ьоо1еап Одномерный массив с элементами типа Ыт или Ьоо1еап Одномерный массив с элементами типа Ьат или Ьоо1еап Одномерный массив с эле- ментами типа Ьвт или Ьос- 1еап Одномерный массив с элементами типа Ыт или Ьоо1еап Одномерный массив с элементами типа ыт или ьоо1еап Тот же, что и у левого опе- ранда Тот же, что и у левого опе- ранда Тот же, что и у левого опе- ранда Тот же, что и у операндов Тот же, что и у операндов Тот же, что и у левого опе- ранда Тот же, что и у левого опе- ранда Тот же, что и у левого опе- ранда Тот же, что и у левого опе- ранда Тот же, что и у левого опе- ранда Тотже, чтоиу левого опе- ранда 63 Тип левого Тип правого Тип реэульоперанда операнда тата Все типы, кро- ме Е11е Тот же, что и у левого опе- ранда Равенство воо1еап Все типы, кро- ме й11е Неравенство Воо1еап Меньше Воо1еап Тот же, что и у левого опе- ранда Меньше или рав- но воо1еап воо1еап Больше Больше или рав- но Тот же, что и у левого опе- ранда Воо1еап Тот же, что и у операндов Логическое "И" Тот же, что и у операндов Логическое "ИЛИ" ох Операторы и данные языка тНР1 Оператор Операция Скалярный тип или одномер- ный массив с элементами дискретного типа Скалярный тип или одномер- ный массив с элементами дискретного типа Скалярный тип или одномер- ный массив с элементами дискретного типа Скалярный тип или одномер- ный массив с элементами дискретного типа Ьэс, Ьоо1еап или одномерный массив с элементами этих типов Ьэс, Ьоо1еап или одномерный массив с элементами этих типов Таблица 2.4 (продолжение) Тот же, что и у левого опе- ранда Тот же, что и у левого опе- ранда Тот же, что и у левого опе- ранда Тот же, что и у левого опе- ранда Тот же, что и у левого опе- ранда Глава 2 Таблица 2.4 (окончание) Оператор Операция Тип левого Тип правого Тип реэульоперанда операнда тата "Не-И" Тот же, что и у левого опе- ранда Тот же, что и у операндов Ыс, Ьоо1еап или одномерный массив с элементами этих типов "Не-ИЛИ" Тот же, что и у левого опе- ранда Тот же, что иу операндов Ыс, Ьоо1еап или одномерный массив с элементами этих типов Тотже, чтоиу левого опе- ранда Исключающее "ИЛИ" Тот же, что и у операндов ЫС, Ьоо1еап или одномерный массив с элементами этих типов Отрицание ис- ключающего "ИЛИ" Тот же, что и у левого опе- ранда Тот же, что и у операндов Ыс,Ьоо1еап или одномерный массив с элементами этих типов В Роипаабоп Ехргеээ существуют следующие ограничения на использование операций: ° операции деления, деления по модулю, остатка от деления поддерживаются только в случае, если оба операнда являются константами или делитель является степенью 2; ° операции возведения в степень поддерживается только в случае, если оба операнда являются константами, или если основание степени равно 2.