![]() |
Звоните! (926)274-88-54 Бесплатная доставка. Бесплатная сборка. |
Ассортимент тканей График работы: Ежедневно. С 8-00 до 20-00. Почта: soft_hous@mail.ru |
![]() ![]() ![]() |
Читальный зал --> Программные средства foundation Необязательный оператор tes t vectors указывает на то, что далее следуют векторы проверок. Векторы проверок (test vectors) ставят в соответствие комбинациям входных сигналов ожидаемые значения выходных сигналов; они используются при моделировании и при тестировании, как объясняется в разделе 4.6.7. Компилятор распознает несколько специальных констант, в том числе символ .X. для обозначения одиночного бита с безразличным значением. Оператором end отмечается конец модуля. Для задания значений сигналов на выходах комбинационных схем используется оператор нетактируемого присваивания = (unclocked assignment operator). Левая часть равенства обычно содержит имя сигнала. Правая часть равенства является логическим выражением, которое не обязательно должно быть вида сумма произведений . Имени сигнала в левой части равенства может предшествовать необязательный оператор ! (НЕ); это эквивалентно инвертированию логического выражения, стоящего справа. Задача компилятора состоит в том, чтобы создать такой рисунок соединений, при котором сигнал, названный в левой части равенства, будет результатом реализации логического выражения, указанного в правой части равенства. 4.6.2. Работа компилятора языка ABEL Программа, приведенная в табл. 4.11, реализует функцию ALARM, описанную в разделе 4.3.1. Сигналу, называвшемуся ранее ENABLE, в профамме соответствует идентификатор ENABLEA, поскольку ENABLE является зарезервированным словом языка ABEL. Обратите внимание, что не все равенства размещены вслед за оператором equations. Промежуточное равенство (intermediate equation) для идентификатора SECURE появляется раньше. Это равенство просто ифает роль определения, которое связывает выражение с идентификатором SECURE. Компилятор языка ABEL подставляет это выражение на место идентификатора SECURE всякий раз, когда SECURE встречается после его определения. На рис. 4.19 была приведена схема охранной сигнализации, непосредственно реализующая выражения SECURE и ALARM посредством многоуровневой логики. Компилятор языка ABEL так не поступает и не использует выражения для соединений вентилей, Наоборот, он разфызает выражения, стремясь получить минимальный двухуровневый вариант вида сумма произведений , пригодный для реализации в ПЛУ. Таким образом, в результате компиляции профамма, приведенная в табл. 4.11, должна выдать схему, эквивалентную схеме И-ИЛИ, изображенной нарис. 4.20, которая и оказывается минимальной. Компилятор действительно это делает. В табл. 4.12 приведен файл синтезированных равенств, созданный компилятором языка ABEL. Заметьте, что компилятор составляет равенства только для единственного выходного сигнала ALARM. Сигнал SECURE нигде не появляется. Компилятор находит минимальньЕе выражения вида сумма произведений как для самой функции ALARM, так и для ее дополнения ! ALARM. Как упоминалось ранее, во многих ПЛУ имеется возможность выбирать инвертированные или не 4/3 Best P-Term Total: 3 Total Pins: 7 Total NodsB: 0 Average P-Term/Output: 3 Equations: ALARM = (ENABLEA & EXITING fe !D00R # ENABLEA & EXITING fe !WINDOW # ENABLEA fe [EXITING fe !GARAGE # PANIC); Reverse-Polarity Equations: !ALARM = (.PANIC fe WINDOW fe DOOR & GARAGE # !PANIC fe EXITING # !PANIC fe !ENABLEA); инвертированные значения выходных сигналов схем И-ИЛИ. Равенство обратной полярности в табл. 4,12 представляет собой реализацию выражения для ! alarm вида сумма произведений ; если бы было выбрано инверсное значение выходного сигнала, то использовалось бы это равенство. В данном примере в равенстве обратной полярности на один терм-произведение меньше, чем в равенстве нормальной полярности для сигнала alarm, так что компилятор выберет это равенство, если программируемое устройство допускает выбор инвертированного или неинвертированного выходного сигнала. Пользователь может также заставить компилятор использовать нормальную или обратную полярность сигнала, включив в список свойств сигнала istype ключевое слово buffer или invert соответственно. (В некоторых компиляторах языка ABEL для той же цели можно использовать ключевые слова pos и neg , но при этом нужно принять во внимание то, о чем будет сказано в разделе 4.6.6.) Табл. 4.12. Файл синтезированных равенств, созданный компилятором языка ABEL для программы, приведенной в табл. 4.11 ABEL 6.30 Design alarmckt created Tue Nov 24 1998 Title; Alarm Circuit Example Title: J. Wakerly, Micro Systems Engineering P-Tenns Fan-in Fan-out Type Name (attributes) 4/3 6 1 Pin ALARM 4.6.3. Операторы WHEN и блоки равенств Кроме равенств, в языке ABEL имеется другой способ задания комбинационных логических функций - оператор WHEN (WHEN statement), также размещаемый в части профаммы, содержащей равенства. В табл. 4.13 показана общая структура оператора WHEN; она подобна структуре оператора IF в обычных языках программирования. Предложение ELSE является необязательным. Здесь LogicExpression - выражент, принимающее значение true (I) или false (0). В зависимости от значения LogicExpression исполняется либо TrueEquation, либо FalseEquation. Однако в данном случае необходимо уточнить, что именно мы понимаем под словом исполняется , и об этом говорится ниже. ------ - Табл. 4.13. Структура оператора when в языке WHEN LogicExpression THEN ABEL TrueEquation; ELSE FalseEquation; В простейщем случае TrueEquation и необязательное FalseEquation представляют собой операторы присваивания, как это имеет место в первых двух операторах WHEN в табл. 4.14 (в отношении XI и Х2). В этом случае выполняется логическая операция И, операндами которой являются LogicExpression и правая часть TrueEquation, а также логическая операция И, операндами которой являются дополнение к LogicExpression и правая часть FalseEquation. Таким образом, равенства для X1А и Х2А, в которых нет операторов WHEN, дают те же самые результаты, что и соответствующие операторы WHEN. Заметьте, что в первом примере XI фигурирует в TrueEquation, а FalseEquation отсутствует. Спрашивается, что будет с XI, если LogicExpression (! А#В) окажется ложным? Можно подумать, что для таких комбинаций входных сигналов значение XI должно быть безразличным, но это не так; сейчас мы это объясним. Формально оператором нетактируемого присваивания (=) задается комбинация входных сигналов, которую следует добавить в множество включений для выходного сигнала, фигурирующего в левой части равенства. Вначале множество включений данного выходного сигнала является пустым; оно пополняется всякий раз, как этот выходной сигнал появляется в левой части равенства. Другими словами, осуществляется логическая операция ИЛИ, операндами которой служат правые части всех равенств для одного и того же неинвертированного выходного сигнала. (Если в левой части равенства указано дополнение данного входного сигнала, то берется дополнение правой части этого равенства, и только после этого результат включается в операцию ИЛИ.) Таким образом, значение XI равно 1 только при такой комбинации входных сигналов, когда выражение LogicExpression (! А#В) истинно и выражение (С&! D), стоящее справа в равенстве TrueEquation, также истинно. Во втором примере Х2 фигурирует в левой части двух равенств, так что эквивалентное равенство для Х2А получается путем выполнения операции ИЛИ над вы- ООО «Мягкий Дом» - это Отечественный производитель мебели. Наша профильная продукция - это диваны еврокнижка. Каждый диван можем изготовить в соответствии с Вашими пожеланияи (размер, ткань и материал). Осуществляем бесплатную доставку и сборку. Звоните! Ежедневно! (926)274-88-54 Продажа и изготовление мебели. Копирование контента сайта запрещено. Авторские права защищаются адвокатской коллегией г. Москвы. |