![]() |
Звоните! (926)274-88-54 Бесплатная доставка. Бесплатная сборка. |
Ассортимент тканей График работы: Ежедневно. С 8-00 до 20-00. Почта: soft_hous@mail.ru |
![]() ![]() ![]() |
Читальный зал --> Программные средства foundation ниями могут быть определяемые пользователем идентификаторы или символы (где под символом понимается символ ISO, заключенный в одинарные кавычки). Идентификаторы чаще всего применяются для обозначения альтернатив или состояний конечного автомата, например: type traffic light state is (reset, stop, wait, go); Символы используются в очень важном случае стандартного определяемого пользователем логического типа std Jogic(cM. табл. 4.32), являющегося частью стандартного пакета ШЕЕ 1164, рассматриваемого в разделе 4.7.5. Этот тип включает не только О и 1 , но также и семь других значений, которые оказываются полезными при моделировании логического сигнала (бита) в реальной логической схеме, как это детально объясняется в разделе 5.6.4. Табл. 4.31. Синтаксис объявления типов и констант в языке VHDL type type-name is {value-list); subtype subtype-name is type-name start to end; subtype subtype-name is type-name start downto end; constant constant-name: type-name := value; Табл. 4.32. Определение типа stdlogic в языке VHDL (о значении resolved см. раздел 5.6.4) type STD ULOGIC is ( U, --- Uninitialized X, - Forcing Unknown 0, - Forcing 0 1, - Forcing 1 Z, - High Impedance W, - Weak Unknown L, -- Weak 0 H, --- Weak 1 - Dont care subtype STD LOGIC is resolved STD ULOGIC; Язык VHDL позволяет пользователю создавать также подтипы {subtypes) согласно синтаксису, указанному в табл. 4.31. Значения подтипа должны быть слитным подмножеством значений, предусмотренных основным типом, начиная со start и кончая end Для перечислимого типа слитность означает расположение на соседних позищ1Ях в исходном списке значений value-list. Вот несколько примеров определения подтипов: subtype twoval logic is std logic range 0 to 1; subt3rpe fourval logic is std logic range X to Z; subtype negint is integer range -2147483647 to -1; subtype bitnum is integer range 31 downto 0; СТРОГОЕ СОБЛЮДЕНИЕТИПОВ VHDL, как и С, является языком со строгим контролем типов. Это означает, что компилятор не позволит вам присвоить сигналу или переменной значение, которое в точности не согласуется с объявленным типом этого сигнала или переменной. Требование строго соблюдать типы - это одновременно и благо, и бедствие. Это делает вашу программу более надежной и ее легче отлаживать, поскольку оказывается трудным делать глупые ошибки , присваивая значения неправильного типа или не подходящей величины. С другой стороны, иногда это может раздражать. Даже при выполнении простых действий может потребоваться обращение к функции преобразования типов в явном виде, например, когда необходимо 2-битовый сигнал интерпретировать как целое число, чтобы перейти к одному из возможных случаев в операторе case . Заметьте, что порядок следования значений в указываемом диапазоне может быть в сторону возрастания или в сторону убывания в зависимости от того, какое из ключевых слов to или dora to употреблено. Из-за некоторых особенностей подтипов это различие может быть существенным, но мы не будем использовать эти особенности в нашей книге и поэтому офаничимся уже сказанным. В языке VHDL есть два предопределенных подтипа integer: subtype natural is integer range 0 to highest-integer; subtype positive is integer range 1 to highest-integer; Константы {constants) способствуют удобству чтения профамм, возможности их поддержания и сопровождения, а также переносу на какой-либо другой язык. Синтаксис объявления констант {constant declaration) в языке VHDL указан в последней строке в табл. 4.31; его можно проиллюстрировать следующими примерами: constant BUS SIZE: integer := 32; - width of component constant MSB: integer := BUS SIZE-1; - bit пшЬег of MSB constant Z: character := Z; - synonjrm for Hi-Z value ЧТО ЗА СИМВОЛ? Вы можете удивиться тому, что в типе std logic значения задаются символами, а не однобуквенными идентификаторами. Ясно, что U , X и т.д. было бы легче набрать, чем U , X и т.д. Ну, прежде всего, тогда потребовался бы другой идентификатор, не - , для безразличных значений, но это еще полбеды. Главная причина употребления символов в одинарных кавычках состоит в том, что нельзя воспользоваться нулем и единицей - О и 1 , - поскольку уже принято, что их следует распознавать как постоянные целые числа. Это возвращает нас снова к строгому следованию типам в языке VHDL; едва ли было целесообразно позволить компилятору осуществлять автоматическое преобразование типов в зависимости от контекста. НЕНАТУРАЛЬНЫЕДЕЙСТВИЯ В языке VHDL подтип natural определяется как множество неотрицательных целых чисел, начиная с О, но большинство математиков считают, что, по определению, натуральные числа начинаются с 1. Действительно в своей ранней истории человечество начинало счет с 1; понятие О появилось много позднее. Однако полемика на эту тему продолжается, особенно в наш компьютерный век, когда большинству из нас приходиться начинать счет с 0. Последние соображения по данной проблеме можно найти в Интернете, осуществив поиск по словам natural numbers . Обратите внимание, что значение константы может быть задано простым выражением. Константы можно использовать повсюду, где встречаются соответствующие значения, и они особенно полезны при определении типов, как будет вскоре показано. Другую очень важную группу определяемых пользователем типов образуют типы массивов (array types). Как и в других языках, в языке VHDhMaccue (array), по определению, - это упорядоченный набор элементов одного и того же типа, отдельные компоненты которого выбираются с помощью индекса массива (array index). Возможны несколько вариантов синтаксиса объявления массива в языке VHDL; они представлены в табл. 4.33. В первых двух вариантах start и end являются целыми числами, которыми задается возможный диапазон изменения индекса массива и, следовательно, полное число элементов массива. В последних трех вариантах диапазоном изменения индекса массива являются все значения указанного типа (range-type) или подмножество этих значений. Табл. 4,33. Синтаксис объявления массивов в языке VHDL type type-name is array (start to end) of element-type; type type-name is array (.start dowato end) of element-type; type type-name is array (range-type) of element-type; type type-name is array (range-type range wrt to end) of element-type; type type-name is array (range-type range start downto end) of element-type; В табл. 4.34 приведены примеры объявления массивов. Первые два примера совсем обычны и демонстрируют задание диапазона изменения индекса в сторону возрастания и в сторону убывания. Следующий пример показывает, как можно воспользоваться константой WORDLEN при объявлении массива; отсюда видно также, что границу диапазона можно задать простым выражением. Из третьего примера следует, что сам элемент массива может быть массивом; таким образом создается двумерный массив. Последний пример показывает, что множество возможных значений элементов массива можно задать, указав перечислимый тип (или подтип); в этом примере массив состоит из четырех элементов согласно данному нами чуть раньше определению типа traf f ic light state. ООО «Мягкий Дом» - это Отечественный производитель мебели. Наша профильная продукция - это диваны еврокнижка. Каждый диван можем изготовить в соответствии с Вашими пожеланияи (размер, ткань и материал). Осуществляем бесплатную доставку и сборку. Звоните! Ежедневно! (926)274-88-54 Продажа и изготовление мебели. Копирование контента сайта запрещено. Авторские права защищаются адвокатской коллегией г. Москвы. |