Джон Ф.Уэйкерли Проектирование цифровых устройств. Том I (2002) (1095889), страница 77
Текст из файла (страница 77)
Таким образом, предыдущие два примера можно переписать в виде: В = "11111111"' ьы = "11111110111111101111111011111110"; 4.7. Язык описания схем ЧНРЬ 329 Можно также указывать подмножество непосредственно следующих один за другим элементов массива или, как говорят, вырезку из массива (аггау з!!се), задавая начальный и конечный индексы подмножества; например: И(б Со Э), К(3 с(онпсо 0),Ь((15 5онпСо 8), К(0,7 с(оипса 0),К(1 То 2),8(в(ор го до) . Заметьте, что направление изменения индекса в вырезке должно быть таким же, как у исходного массива, Наконец, массивы или элементы массивов можно объединять с помощью оператора конкатенации Лс (солса(ела!!оп орега(ог), который соединяет массивы н элементы в том порядке, в каком они записаны слева направо.
Например, запись '0' Ь'1' ь "18" эквивалентна строке "0118", а выражение В(б с(оипко О) ь В (7) представляет собой циклический сдвиг 8-разрядного массива Е на 1 разряд влево. Самым важным типом массивов в типичной программе на языке ЧНРЬ является определяемый пользователем в соответствии со стандартом 1ЕЕЕ 1! 64 логический тнп егс( 1офс чесс ох, которым задается упорядоченный набор элементов типа асс( 1од1с.
Определение этого типа имеет вид: туре ЯТ() 1061С ЧЕСТОК 1в аггау (паепга1 генуе <>) оХ 8т0 1Хи1С! Это пример типа массива без ограничений (ипсопз(га(пег( аггау (уре): диапазон возможных значений индекса массива не згэ(ан, за исключением того, что он должен быть подмножеством определенного типа, в данном случае — типа пагпге1. Эта особенность языка ЧНРЬ позволяет записывать архитектуры, функции и другие элементы программ в более общем виде, до некоторой степени независимо от размеров массивов и диапазонов возможных значений индексов.
Действительный диапазон значений индекса определяется в тот момент, когда сигналу или переменной ставится в соответствие этот тип. В следующем разделе мы увидим примеры этого. 4.7.4. Функции и лроцедуры Подобно функции в любом языке программирования высокого уровня, функлия (!йпс((оп) в языке ЧНРЬ получает ряд аргументов (агяитепгз) и возвращает результат (гезий).
При определении функции на языке ЧНРЬ и при ее вызове каждый из аргументов и результат имеют предустановленный тип. Синтаксис определения функции (уипс((оп г(ебп!г!оп) приведен в табл. 4.35. За присвоением функции определенного имени следует список фориальнык параметров ((огта! рагатегекг), который используется в теле функции; число параметров может быть любым, начиная с нуля. При вызове функции формальные параметры в обращении к ней замещаются действитегьными параметрами (ас(иа! рагате(егз).
В соответствии со строгим следованием типам в языке ЧНРЬ действительные параметры должны быть того же типа или полтина, что и формальные параметры. Когда функция вызывается из архитектуры, на место ее вызова возвращается значение, тип которого указывается посредством ге!игл-(уре. 330 Глава 4. Принципы проектирования комбинационных логических схем Табл.4.35. Синтаксис определения функции в языке ЧН01.
1ивсс1ов б)пег)оя-пате ( з)япа!-патег» з)япа)-гуре. ляпа)-пател: з(япа1-гуре) з)лпа1-пате»» иапо)-)уре ) хесвхв ге)илИуре 1в гуре ))ее!ага)»опз соппап) ))ес!ага))апз вапаб1е ))есб»гагй»пя !Кпсг)ап дерн!п)»ги рп»с«дага ))ейп)))апз Ьек1в зе))лег»))а1-гга)етеп) зедаеп)ю1-зга)степ) ев») бтс)!оп-пате; Как видно из таблицы, внутри функшви можно определить ее собственные локальные типы, юнстанты, переменные и вложенные функции и процедуры.
Между ключевыми словами )»ед1п и епс) располагается ряд «последовательных операторов», которые исполняются при вызове функции. Последовательные операторы и их синтаксис будут предметом более подробного разбора позднее, но вам должны быть понятны приводимые здесь примеры с учетом вашего предыдущего опыта программирования.
Архитектуру «вентиля запрета» на языке ЧН)М., приведенную в табл. 4.26, можно видоизменить, используя функцию, как показано в табл. 4.36. В определении функции момент возврата к месту вызова указывается ключевым словом хегихп, за которым следует выражение, значение которого в будет возврап(ено. Тнп результата вычисления этого выражения должен быть согласован со значением ге)ягп-)уре в обьявлении функции. В логическом пакете стандарта )ЕЕЕ 1164 определено много функций, оперирующих типами зы 1од1с и зсс) 1оо1с»гесьох. помимо того, что предусматривается ряд определяемых пользователем типов, пакет содержит также основные логические операции над сигналами или переменными этих типов, такие как апс) и ох.
Язык ЧН!)). обладает тем достоинством, что в нем возможна перегрузка операторов (орега)ог огег)оа)))пд). Это позволяет пользователю выбирать активизируемую функцию посредством применения символа встроенной операции (апс), ох, + и т д ) к согласованному набору типов операндов.
Возможно несколько определений одного и того же символа операции; каждый Раз ког" да встречается данный оператор, компилятор автоматически выбирает определение„согласованное по типу операндов. В качестве примера табл. 4.37 содержит юд, взятый из пакета! ЕЕЕ, которым опРеделяется операция "зги)" для операндов типа зхс) 1о()1с, может казаться что этот отрывок сложен, но нами уже введены все основные элементы языка употребляемые здесь (за исключением слова "хезо1чесТ*, которое будет рассмо»'- рево в разделе 5.6.4 в связи с логическими схемами стремя состояниями).
4.7. язык описания схем УНХ)(. 331 Табл. 4.36. Программа дпя «функции запрета» на языке ЧНОЬ вгсвзгесгиге ТпЬАЬАг агсЬ1 от ТпЬ1Ь1г Ав 1ипсг1оп Вигиог (А, В: ь1г) гегигп ьхг 1в Ьейхп 11 В " '0' гЬеп гегигл А; е1ве гегитп '0'; епа 11; епо Вигног; Ье31п Х <= Вигног(Х,Т); епй ТпЬзЬ1г егсат; Табл.4.37. Определения в стандарте! ЕЕЕ 1164, относящиеся колера„н " П" над величинами типа зтс ьоатс ВОВТТРЕ ОХ01 13 гево1тео вгб и1о31с ВАМОЕ 'Г ТО '1'; ('О','Х','0','1') ТУРЕ вго1о31с гаЬТе 13 АВВАУ(вгй и1ойзс, вгс и1о31с) ОГ вгс и1о31с; — ггигь гаь)е тот "апл" типсг1оп сси3тАит апй гаьхе : вга)о31с геьхе : ( О Х 0 1 2 И Ь Н ! О , Х , О, 1', Х , Х , О , 1 , Х ), — ! Н 1 ВОИСТТОМ "впй" ( Ь : вгй и1о31с; В ; его и1ойзс ) ВЕТОВИ ОХ01 13 ВЕСТИ ВЕТОВИ (апа гаЬхе(Ь, В))1 ВИР "апо"; Переменные данной функции могуг быть величинами типа згс( 01о91 с или его полтина згс( 1а91с.
другой подтип сх01, по определению, должен быть использован в качестве типа возвращаемого функцией результата; даже если один нз операндов в операции "апсГ' имеет нелогнческое значение ('Е', 'Х' и т. д ), то результатом обращения к функции будет только одно из четырех возможных значений. Тип згсцодхс гаЬ1е задает двумерный массив 9х9, индексами коюрого является лара величин типа згс ц1091с.
Элементы таблицы апс) гаЬТе расположены так, что при значениях любого из индексов 'О' или '1,'(слабый 'О') элемент равен 'О'. Значение 332 Глава 4. Принципы проектирования комбинационных логических схем '1' извлекается только тогда, когда оба индекса равны '1' или 'Н' (слабая '1 ). В против иом случае результат операции равен 'О' или 'Х'.
Двойные кавычки у имени функции в самом определении функции указывают на перегрузку оператора. «Исполняемая» часть функции состоит всего лишь из одного оператора, который возвращает элемент таблицы, выбранный по двум переменным 1 и В функции "апсГ'. Из-за требований языка ЧНР!. строго следовать типам, часто бывает необхо димо преобразовать сигнал одного типа в сигнал другого типа; пакет !ЕЕЕ ! )64 содержит несколько функций преобразования: например, переход от типа 31Т к типу БТО 1061С и наоборот.
Величину типа БТ0 1 061С ЧЕСТОВ обычно нужно преобразовать в соответствующее целое число. В стандарте!ЕЕЕ ! )64 нет такой функции преобразования, поскольку разным разработчикам могут понадобиться различные представления чисел, например, со знаком или без знака. Однако можно самим задать свое собственное преобразование так, как это сделано в табл.
4.38. Табл.4.38. Функцняпреобразованнятнпазто 10610 чЕСТОВвтнп1НТКСЕВна языке ЧНР1 Хаасс!оп СОКН 1ВТЕСЕВ (Х: ЯТР 10610 'чЕСТОВ) гвгпгп 1ЙТЕСЕВ 1в чагзаЬ1» ВЕЯГЛ.Т: 1ВТЕСЕВ; Ьвйзп ВЕЯЛ!.Т г О; Тот 1 зп Х'гапйе 1оор ВЕЯОХ.Т: = ВЕЯШТ» 2; саяе Х(1) Ха явеп 'О' ! '!.' => пп11; впеп '1' ~ 'Н' > ВЕЯ(Л.Т : ВЕЯЛ.Т + 1; яйеп огьегв > пп11; епц саве; епе 1оор; гвспгп ВЕЯО11; епд СОИ» 1НТЕСЕВ; В функции СОНЧ 1НТЕСЕВ применен простой итеративный алгоритм, эквивалентный приведенной в параграфе 2.3 формуле представления числа в виде поочередных вложений. Мы отложим описание используемых здесь операторов НОВ, САБЕ и ИНЕИ до раздела 4.7.8, сосредоточив внимание на основной идее.
Оператор лц11 (и п11 тагетепг) совсем прост: он означает «ничего не делать». Пределы выполнения цикла ГОР определяются параметром "Х'гапс1е", где одиночная кавычка после имени сигнала означает «атрибут» ("аггггЬиге"), а генуе — встроенный идентификатор атрибута, который применяется только по отнощеиию к массивам и означает «перебрать все значения индекса данного массива слева направо». Можно осуществить преобразование и в обратном направлении, то есть перейти от целого числа к величине типа БТР 10610 ЧЕСТЕН, как показано в табл. 4.39. В этом случае необходимо задать не только преобразуемое целое (АВС) йЛ.