Джон Ф.Уэйкерли Проектирование цифровых устройств. Том I (2002) (1095889), страница 76
Текст из файла (страница 76)
Идентификаторы чаще всего применяются для обозначения альтернатив или состояний конечного автомата, например: суре сга111с 11дьс ясаке 1а (гезес, асор, найс, до)! Символы используются в очень важном случае стандартного определяемого пользователем логического типа асс) 2одйс(см. табл. 4 32), являющегося частью стандартного пакета 1ЕЕЕ 1164, рассматриваемого в разделе 4 7.5. Этот тип включает ив только «О» и «1», ио также и семь других значений, которые оказываются полезными при моделировании логического сигнала (бита) в реальной логической схеме, как зто детально объясняется в разделе 5.6.4.
Табл. 4.31. Синтаксис объявления типов и констант в языке ННОЕ Суре суре-пате 1з (маЬсе-!!«с); зивсуре,сиЬсмре-пате ьз гуре-пате Лап со «пс(; зиЬиуре сиЬгмре-пате 1з суре-пате,мгам йоиисо «пс(; сопев»ли голлапьпате: тмре-пате: ма!ие; Табл.
4.32. Определение типа згй 1одсс в языке ЧНОЕ(о значении "гезо1»ей" см. раздел 5.6.4) ); БиЬ«уре 870 Ь001С 13 гезо1»ей 870 01 001С; Язык ЧНИ позволяет пользователю создавать также подтипы (зиЬГур«с) согласно синтаксису, указаииому в табл. 4 31. Значения подти па должны быть слитиым подмножеством значений, предусмотренных основным типом, начиная со сгагг и кончая епа. для перечислимого типа «слитиость» означает расположение па соседних позициях в исходном списке значений ма!ие!!«с. Вот несколько примеровопределеиияподтипов: Сиота1 1о81с 1з зтй 1о81с гапке 'О' ио '1'; тоигма1 1о81с 1з зий 1ойьс гапке 'Х' ео 'Х'; иебзпи 1в 1пвебег галбе -2147483647 Со -1; ь1«иия Хз 1псебег галие 31 йоипио О; зиЬСуре зиЬСуре виьзуре зиЬ«уре Суре НТО ~Л.0010 1з ( '0' 'Х' 'О' '1' '3' 'Ы' '1.' 'Н' 4.7.
язык описания схем ЫН(з(. 323 Оп1п1«1а1гаей Рог«1пб Оп)пюзп Рогсйпб О Рог«1ий 1 Н1кЬ 1ярейапсе Ыеа1с Оикпози Ыеа)с О Ыеа)с 1 Ооп'с саге 326 Глава 4. Принципы проектирования комбинационных лоп«чеоких схем СТРОГОЕ СОБЛЮДЕНИЕ ТИПОВ ЧНР1., как и С, является языком со строгим контролем типов. Это означает, что компилятор не позволит вам присвоить сигналу или переменной значение, которое в точности не согласуется с обьявленным типом этого сигнала или переменной. Требование строго соблюдать типы — это одновременно и благо, и бедствие. Это делает вашу программу более надежной и ее легче отлаживать, поскольку оказывается трудным делать «глупые ошибки», присваивая значения неправильного типа или не подходящей величины.
С другой стороны, иногда это может раздражать. Даже при выполнении простых действий может потребоваться обращение к функции преобразования типов в явном виде, например, когда необходимо 2-битовый сигнал интерпретировать как целое число, чтобы перейти к одному из возможных случаев в операторе "сазе", Заметьте, что порядок следования значений в указываемом диапазоне может быть в сторону возрастания или в сторону убывания в зависимости от того, какое из ключевых слов Го или «1оьп Го употреблено. Из за некоторых особенностей подтипов это различие может быть существенным, но мы не будем использовать эти особенности в нашей книге и поэтому ограничимся уже сказанным. В языке ЧНР1. есть два предопределенных подтипа 1пгедег: в«Ьгуре аагиг«1 зв 1лееяег галяе О ео Йялел-тгеяег1 виЬ«уре ров1«1»е зв 1пееяег галяе 1 ео )пЯБ«ап!игеяег; Ко«стан мы (сои«галы) способствуют удобству чтения программ, возможности их поддержания и сопровождения, а также переносу на какой-либо другой язык.
Синтаксис об»явления констант (солмаш г1«с(агайоп) в языке ЧНРЬ указан в последней строке в табл. 4.31; его можно проиллюстрировать следующими примерами: соавгапе ВОЯ 31ее: 1певявг := 32; — язогь ох сошропеае селвеапе ИЯВ: зпееяег := ВОЯ 31ЕВ-1; — Ьзе лллЬег оХ НЯВ солвзапз Е: сЬагасеег := 'Е'; — вуполуш 1«г Н1-Е та1пе ЧТОЗАСИМВОЛТ Вы можете удивиться тому, что в типе вгс) 1од1с значения задаются символами, а не однобуквенными идентификаторами. Ясно, что "11", "Х" и т.д. было бы легче набрать, чем "'0"', "'х"' и т.д.
Ну, прежде всего, тогда потребовался бы другой идентификатор, не "— ", для безразличных значений, но это еще полбеды. Главная причина употребления символов в одинарных кавычках состоит в том, что нельзя воспользоваться «нулем» и «единнцей» вЂ” "0" и "1", — поскольку уже принято, что их следует распознавать как постоянные целые числа. Это возвращает нас снова к строгому следованию типам в языке ЧНРЕ; едва ли было целесообразно позволить компилятору осуществлять автоматическое преобразование типов в зависимости от контекста. 4.7. Рзык описания схем ЧНРЬ 327 НЕНАТУРАЛЬНЫЕДЕЙСТВИЯ В языке ЧНРЬ подтип 'пасс га1" определяется как множество неотрицательных целых чисел, начиная с О, но большинство математиков считают, что, по определению, натуральные числа начинаются с 1.
Действительно в своей ранней истории человечество начинало счет с 1; понятие "О" появилось много позднее. Однако полемика на эту тему продолжается, особенно в наш компьютерный век, когда большинству из нас приходиться начинать счете О. Последние соображения по данной проблеме можно найти в Интернете, осуществив поиск по словам "паюга! пшпЬегз". Обратите внимание, что значение константы может быть задано простым выражением. Константы можно использовать повсюду, где встречаются соответствующие значения, н они особенно полезны при определении типов, как будет вскоре показано.
Другую очень важную группу определяемых пользователем типов образуют типы массивов (аггау !урез). Как и в других языках, в языке ЧНРЬ массив (аггау), ло определению, — это упорядоченный набор элементов одного и того же типа, отдельные компоненты которого выбираются с помощью индекса массива (аггау иЫех). Возможнгл несколько вариантов синтаксиса объявления массива в языке ЧНРЬ; они представлены в табл. 4.33. В первых двух вариантах жан и впй являются целыми числами, которыми задается возможный диапазон изменения индекса массива и, следовательно, полное число элементов массива.
В последних трех вариантах диапазоном изменения индекса массива являются все значения указанного типа (гапке-Орв) или подмножество этих значений. Табл. 4.33. Синтаксис объявления массивов в языке ЧНРЬ суре (уре-лате ьа аггау (вгагг со ет!) ох е!етелг-Орв! суре гуре-пате ьв аггау (в!ам лоилсо епс() ог в(етепигург; суре )уре-пате зя аггау (галде-1уре) оз е!етепг-гуре! суре гуре-палм Ьв аггау (галле-(тре гапке паг( Со влсО ох в!втет-г)!>г; туре туре-лате зв атгау (галле-гуре галке вгаг! 4оивео ет() ох в(степ!-гуре; В табл.
4.34 приведены примеры объявления массивов. Первые два примера совсем обычны и демонстрируют задание диапазона изменения индекса в сторону возрастания н в сторону убывания. Следующий пример показывает, как можно воспользоваться константой иод)) ькц при объявлении массива; отсюда видно также, что границу диапазона можно задать простым выражением. Из третьего примера следует, что сам элемент массива может быть массивом; таким образом создается двумерный массив. Последний пример показывает, что множество возможных значений элементов массива можно задать, указав перечислимый тип (или подтип); в этом примере массив состоит из гетырех элементов согласно данному нами чуть раньше определению типа сга г й.с 1зсцс еСаСе. 328 Глава 4. Принципы проектирования комбинационных логических схем Табл.
4.34. Примеры объявления массивов в языке Ч)(РЬ суре аопсй1у соиле 1в аггау (1 со 12) ох звсеяег; Суре Ьуее Тв еггау (7 йочаео О) ог ЯТО ЬОС10; сопвсапс иОЕО 1ЕИ: засеяег: 32; суре чогд 1в аггау (ИОЕВ ЬЕИ-1 почвео О) ог ЯТО ЬОС10; соввеапе ИОИ ЕЕСЯ: гпееяег := 8; суре гея 111е гв аггау (1 Сс ИОН ЕЕСБ) ог чсггм суре всасесочпс ге аггау (стазис 1зяпс всасе) ог зпсеяег; Элементы массива считаются упорядоченными слева направо в том же направлении, в каком индекс пробегает свои значения.
Таким образом, индексы самых левых элементов массивов типов шопГЬ1у соппг, ЬуСе, иогб, ген 111е и всасесоппс в табл. 4.34 равны 1, 7, 31, 1 и гевес соответственно. Обращение к отдельным элементам массивов в операторах программы на языке УНТ осуществляется путем указания имени массива и индекса элемента в круглых скобках. Если, например, М, В, (4, Е и Б - сигналы или переменные тех пяти типов массивов, которые приведены в табл. 4 34, то любая из записей м ( 11 ), В ( 5), Х(ЫОКО ЬЕИ-5), Е(О,О), К(О) и Б(гевег) является правильным указанием элемента.
Массивы-литералы (ап ау (йега)з) можно задать, перечисляя в скобках значения элементов. Например, переменной В типа Ьуг е можно задать значение, состоящее из одних единиц, оператором В:=('1', '1', '1', '1', '1', '1', '1', '1'); В языке УНРЬ возможно и в более сжатой форме задавать значения, указывая индекс. Например, следующая запись обеспечивает присвоение единичных значений всем элементам переменной (я типа иогс(, за исключением младших разрядов каждого байта, которым присваиваются нулевые значения: Ы:= (О => 'О', 8=> 'О', 1б=> 'О', 24 => '0', огпегв=> '1') Рассмотренные правила справедливы при любом типе элементов (е1етепл ~уре), но литерал типа БТО Ь061С легче всего записать в виде «строки», стРокой (з~ппЯ) в языке УНР1.
является последовательность символов 1БО, заключенная в двойные кавычки, типа "Нз спеге". Строка — это, конечно, массив символов; поэтому массиву типа БТО Ь061С заданной длины можно присвоить значение, выраженное строкой той же длины, если только символы в строке прн надлежат набору из девяти символов, которыми, по определению, нсчерпывают- сявозможныезначенияэлементовтипаБТР Ь061С: 'О', '1', 'О' ит.д.