Цук. 118 компоненты и технологии 2 '2010 проектирование моделирование работы
Скачать 0.68 Mb.
|
118 КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 2 '2010 проектирование моделирование работы Александр ШАлАгинов shalag@vt.cs.nstu.ru Г лавное достоинство графического представления проекта — его нагляд- ность, удобство восприятия человеком. Но для компьютера — это лишнее звено в маршруте проектирования: схему все равно приходится конвертировать в текстовый фор- мат, например в VHDL- или Verilog-код. Заметим, что наглядность графического изображения проявляет себя в полной мере только для простых проектов. Когда же описание превращается в толстый «Альбом схем» с многочисленными межстраничными ссылками, даже разработчики старой закалки теряют энтузиазм. Конечно, схема в какой-то мере защи- щает пользователя от необходимости изу- чать языки описания аппаратуры (Hardware Description Language, HDL). Но противиться новым технологиям автоматизированного проектирования просто неразумно. Время, когда можно было вручную нарисовать при- нципиальную схему или составить карту прошивки, безвозвратно уходит. Сказанное ни в коей мере не означает, что данный урок можно пропустить. Вероят- нее всего, правильное решение, как всегда, лежит посередине: нужно овладеть всеми возможными инструментами описания ап- паратуры и использовать их совместно. Например, поведенческое (языковое) опи- сание компонентов нижнего уровня удачно сочетается с графическим представлением структуры проекта на верхнем уровне. Знакомство с редактором State Diagram Editor Со схемным редактором Block Diagram Editor мы познакомились на седьмом и вось- мом уроках. Теперь нам предстоит встреча еще с одним графическим редактором — State Diagram Editor (SDE). Он предназначен для создания диаграмм состояний цифровых автоматов. Запустим Active-HDL 7.1 и создадим в ра- бочем пространстве Lessons новый рабочий проект Lesson_12. Активизируем закладку Design Flow (рис. 1) и щелкнем мышкой по иконке FSM (аббревиатура от слов Finite State Machine — «конечный автомат»). Появится «старый знакомый» — «мастер» New Source File Wizard. Но теперь он наме- рен создать asf-файл, содержимым которого будет диаграмма состояний автомата. Следуя указаниям «мастера», выполним все, что он от нас потребует: укажем язык проектирования VHDL, имя файла, напри- мер T_trigger («счетный триггер»), и зададим внешние сигналы (порты): R • — асинхронный сброс; C • — счетный вход; Q • — прямой выход; NQ • — инверсный выход. На вопрос «Хотите ли вы добавить такто- вый вход с именем ‘CLK’?» ответим «Нет». Получив нужную информацию, «мастер» за- кончит свою работу и передаст управление редактору диаграмм ( State Diagram Editor). В основном окне среды проектирования Active-HDL 7.1 появится новая закладка с име- нем открытого файла — T_trigger.asf (рис. 2). Нам предстоит построить элементар- ный автомат, описывающий работу счет- ного триггера. Это синхронный автомат, и «мастер» неспроста предлагал добавить тактовый вход. Но мы отказались, потому что роль тактового входа будет играть счет- ный вход C. Двойным щелчком по графи- ческому обозначению порта откроем диа- логовую панель Port Properties («свойства не секрет, что графические методы описания цифровой аппаратуры ус- тупают текстовым по многим показателям и постепенно сдают им свои позиции. однако, несмотря на это, они остаются непременным атрибутом современных САПР. изучаем Active-HDL 7.1. Урок 12. Проектирование цифровых автоматов Продолжение. Начало в № 3`2009 Рис. 1. Фрагмент закладки менеджера маршрута проектирования Design Flow Рис. 2. В редактор State Diagram Editor загружен файл T_trigger.asf 119 КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 2 '2010 www.kite.ru проектирование моделирование работы порта») и установим флажок Clock («такто- вый импульс»). Сигнал C получит статус так- тового входа, о чем говорят изменения в его обозначении . Если вы забудете проделать эту операцию, то при компиляции проекта в окне Console получите сообщение об отсутствии тактового сигнала для автомата Sreg0 (Missing CLOCK signal for the Sreg0 machine). Кстати, задан- ное по умолчанию имя автомата Sreg0 всегда можно изменить (например, на T_trigger), щелкнув по нему правой кнопкой мыши и вы- брав в контекстном меню команду Properties. Как видно, у нас есть два способа изменять свойства объекта: напрямую — дважды щелкнув на редакти- • руемом объекте; косвенно — вызвав сначала контекстное • меню, а затем активизировав команду Properties. Первый способ немного быстрее, второй дает большие возможности. Для создания и редактирования диаграмм состояний цифровых автоматов нам потре- буются специальные инструменты. Их можно найти в выпадающем меню FSM, которое по- является только в том случае, когда активна закладка редактора диаграмм SDE. Меню со- держит полный набор возможных операций. Однако удобнее пользоваться пиктограм- мами инструментальных панелей. В редакто- ре SDE их три: FSM VHDL (или Verilog) Diagram Toolbar • ; FSM Edit Toolbar • ; FSM Hierarchy Toolbar • Сейчас нас интересует первая панель, пред- назначенная для рисования диаграмм состоя- ний конечного автомата (рис. 3). Фундаментальными понятиями в теории автоматов являются два объекта: состояние ( State) и переход (Transition). Они-то и по- надобятся нам в первую очередь. Нажмем на пиктограмму State и поместим в ра- бочей области диаграммы (она выделена сплошной рамкой) два состояния — S1 и S2. Затем с помощью кнопки Transition соеди- ним их переходами (рис. 4). Если вы хотите сразу увидеть дугу, а не прямую линию, поставьте на предпола- гаемой траектории хотя бы одну промежу- точную точку. И наоборот, дугу всегда мож- но выпрямить командой Straight Transition («прямой переход») из контекстного меню. В принципе наш проект уже можно моде- лировать. Откомпилируем файл T_trigger.asf (пиктограмма или горячая клавиша F11), убедимся, что в окне Console нет ошибок ( Compile success 0 Errors 0 Warnings), и вы- полним пробный модельный эксперимент (рис. 5). Обратите внимание, триггер изме- няет свое состояние на каждом периоде так- тового сигнала C, то есть так, как и должен работать Т-триггер. Но почему работа началась с состояния S1, а переходы происходят на фронтах сигнала C? Возможно, вы уже знаете ответ. Состояние S1 на диаграмме появилось первым. И если посмотреть VHDL-код (файл T_trigger.vhd), автоматически сгенерированный при компи- ляции проекта, то мы увидим строку: type T_trigger_type is (S1, S2); В объявленном перечислимом типе значе- ние S1 занимает левую позицию, а по умол- чанию именно эта позиция использует- ся при инициализации моделирования. Поменяйте местами имена состояний S1 и S2 и вы увидите, что автомат начинает работу с состояния S2 (после эксперимента восста- новите все, как было). Чтобы гарантировать старт с любого жела- емого состояния, в редакторе SDE есть специ- альный символ Reset (рис. 3). Сброс (ина- че — установка исходного состояния) может привязываться к тактовому сигналу и л и в ы п ол н я т ь с я а с и н х р о н н о По внешнему виду их легко отличить. Добавим объект Reset в наш проект, подведя переход к состоянию S2. По умолчанию мы по- лучили синхронный сброс. Щелкнем по значку правой кнопкой и установим переключатель в положение Asynchronous ( ). Зададим условие, при выполнении кото- рого будет происходить сброс, то есть вы- полняться переход в исходное состояние S2. Мы уже знаем, что на панели инструментов (рис. 3) для этих целей имеется подходящий значок Condition («условие») . Активизируем данную операцию, подве- дем небольшой прямоугольник , привязан- ный к курсору мыши, так, чтобы он пересе- кал дугу перехода , и снова щелкнем левой кнопкой мыши. Откроется небольшое окно, в которое введем желаемое условие перехода, напри- мер R=’1’. Написанное условие означает, что в момент времени, когда сигнал сброса R примет уровень «логической единицы», авто- мат должен перейти в S2, каким бы ни было его текущее состояние. Повторим модельный эксперимент с но- вой версией автомата (рис. 6). Прежде всего, отметим, что сброс действи- тельно выполняется асинхронно и перево- дит автомат в состояние S2 (момент време- ни 20 нс). На третьем такте (250 нс) автомат должен был перейти в состояние S1, но ему «помешал» сигнал сброса, имеющий более высокий приоритет. Чтобы «заставить» Т-триггер реагировать на срез ( Falling) тактового сигнала C, надо Рис. 3. Инструментальная панель SDE-редактора для проектирования диаграмм состояний цифровых автоматов Рис. 4. Элементарный автомат Т-триггера Рис. 5. Результаты моделирования «полуфабриката» Т-триггера Рис. 6. Сигнал сброса R исправно выполняет свои функции 120 КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 2 '2010 проектирование моделирование работы щелкнуть мышью на свободной области ав- томата (внутри прямоугольной рамки), вы- брать в контекстном меню опцию Properties и в разделе Clock диалоговой панели Machine Properties («свойства автомата») установить переключатель в положение Falling. Раз уж мы оказались на панели Machine Properties, то проделаем еще одну вещь: в разделе Encoding («кодирование») заме- ним символическое кодирование ( Symbolic) на альтернативное значение Encoded и выбе- рем двоичное кодирование состояний авто- мата ( Binary/sequential), как самое эконом- ное (рис. 7). Строго говоря, эта информация исполь- зуется для последующего синтеза автомата, и нам она пока что не нужна. Однако заданное по умолчанию инструментальное средство синтеза Synopsys FPGA Express не поддержи- вает атрибут ENUM_ENCODING в режиме символического кодирования. Поэтому каж- дый раз при генерации VHDL-кода появля- ется неприятное предупреждение (Warning): Attribute ENUM_ENCODING is not supported for Symbolic encoding. Больше вы его не уви- дите, а вот под именем каждого состояния появится его двоичный кодовый эквивалент: /0/ и /1/. Однако мы отвлеклись. Выходные сиг- налы Q и NQ до сих пор не определены. Присвоение (назначение) им конкретных значений называется действием. На панели инструментов (рис. 3) для этих целей имеют- ся две пиктограммы: — State Action («дейс- твие в состоянии») и — Transition Action («действие на переходе»). Но какую выбрать? Оказывается, все просто: первая иконка ис- пользуется для автоматов Мура, вторая — для автоматов Мили. В схемотехнике преобладают автоматы Мура, и наш триггер не является исключением. В автоматах Мура выходные сигналы зависят только от его текущего состояния и не могут измениться, если состояние остается прежним. Значит, действие следует «вложить» в состояние. Нажмем на кнопку State Action, на кур- соре мыши «повиснет» специальный значок , левым краем которого надо указать на ре- дактируемое состояние. Особенно целиться не имеет смысла: действие в любом случае ока- жется привязанным к правой крайней точке кружка, изображающего состояние. Подведем курсор к состоянию S1 и зафиксируем пози- цию левой кнопкой мыши. В появившееся окно введем текст: Q<=’0’; NQ<=’1’; и сно- ва щелкнем мышью на свободной области. Напомним, что символ <= в языке VHDL на- зывается назначением ( assignment) или при- своением сигналу конкретного значения. Другой способ, на наш взгляд, более удоб- ный, задает действия с помощью диалоговой панели State Properties. Мы уже знаем, что па- нель свойств любого элемента диаграммы вы- зывается двойным щелчком левой кнопкой мыши или одинарным правой с последую- щим выполнением команды Properties. Зададим действия для состояния S2. Дважды щелкнем на нем, активизируем за- кладку Actions и в среднее поле State введем нужный текст: Q<=’1’; NQ<=’0’;. Обратите внимание, действия можно задавать не толь- ко в состоянии, но и на входе ( Entry Action) и выходе ( Exit Action) из него. Законченный проект будет выглядеть так, как показано на рис. 8 (сброс перенесен в со- стояние S1), и функционировать он должен в соответствии с рис. 9. Вам не нравится, что первый сброс не про- извел никакого действия? Тогда выполните в выпадающем меню FSM команду View/Sort Objects и на закладке State отбуксируйте состо- яние S2 на первую позицию. Теперь перечис- лимый тип будет начинаться с состояния S2: type T_trigger_type is (S2, S1); По умолчанию оно и будет приниматься за исходное. При этом двоичные коды состо- яний тоже изменятся на противоположные, но не ранее, чем вы выполните повторную компиляцию. Построение асинхронных цифровых автоматов Графический редактор SDE позволяет строить не только синхронные, но и асинх- ронные автоматы. Мы рассмотрим эту воз- можность на простейшем RS-триггере, часто называемом защелкой ( latch). Создадим новый asf-файл в том же самом рабочем проекте Lesson_12. Назовем его test_ RS_latch. Введем входные S, R и выходные Q, NQ порты. На диалоговой панели Machine Properties в разделе Machine установим переключатель в положение Asynchronous («асинхронный») и в поле Propagation Delay («задержка рас- пространения») введем абстрактное, но близ- кое к реальному значение задержки, напри- мер 10 нс. Заменим предлагаемое по умолча- нию имя автомата Sreg0 на RS_latch. Нарисуем диаграмму состояний, как пока- зано на рис. 10. S1 и S2 — это рабочие состо- яния триггера. Состояние Ban («запрет») до- бавлено в диаграмму для того, чтобы «отлав- ливать» запрещенную комбинацию входных сигналов: S=’1’ и R=’1’. Обратите внимание на косую штриховку символа. В редакторе SDE таким способом помечается особое со- стояние, называемое состоянием по умолча- нию ( Default State). Автомат переходит в состояние по умол- чанию во всех случаях, когда ни одно из ус- ловий, назначенных на выходящие из теку- щего состояния переходы, не выполняется. В нашем примере таким способом имитиру- ется реакция автомата на запрещенный на- бор сигналов: S=’1’ и R=’1’. Чтобы состояние получило статус Default State, дважды щелкните на нем левой кноп- кой мыши и установите флажок Default на закладке General. Состояние по умолчанию особенно полез- но при отладке цифровых автоматов, когда у вас остаются сомнения относительно пол- ноты его переходов. Обратите внимание еще на одну вещь. Символ Reset , используемый в синхрон- Рис. 7. Выбор значения Encoded в панели Encoding Рис. 8. Цифровой автомат, реализующий функцию Т-триггера Рис. 9. Результаты моделирования элементарного автомата Рис. 10. Цифровой автомат асинхронного RS триггера-защелки 121 КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 2 '2010 www.kite.ru проектирование моделирование работы ных автоматах, заменен здесь другим объ- ектом , который называется индикатором инициализированного состояния ( Initial State Indicator). Назначение у него пре- жнее — указать начальное состояние, в ко- торое автомат должен перейти в момент его инициализации. Но есть и разница. В синхронных автома- тах вы можете многократно возвращать схе- му в исходное состояние на интервале одного модельного эксперимента. В асинхронных автоматах такой возможности нет. Поэтому на дуге, соединяющей индикатор с инициа- лизируемым состоянием, не задается никако- го условия перехода. Добавим, что SDE-редактор автоматически заменяет символ Reset на символ Initial State Indicator , как только вы захотите сменить тип синхронного автомата на асинхронный. При этом будет удалено и потеряно условие перехода к инициализируемому состоянию. Кроме того, если в синхронных автоматах разрешено использовать несколько символов Reset, то в асинхронных — всего один инди- катор. Как только вы разместите на чертеже первую копию индикатора, его пиктограмма на панели инструментов (рис. 3) станет недо- ступной для использования. Не стоит забывать еще про одну особен- ность асинхронных автоматов. Дело в том, что в режиме One Process («один процесс»), ко- торый установлен по умолчанию, программа конвертации не может сгенерировать шаблон для асинхронного автомата, и в окне Console будет выдано соответствующее сообщение: Cannot generate code for asynchronous machine in 1 process template. Please choose 2/3 process template. Поэтому лучше сразу открыть выпадаю- щее меню FSM и выполнить команду Code Generation Setting («установка генерации кода»). В разделе HDL-style надо поставить переключатель в положение Two Processes («два процесса») или Three Processes («три процесса»). Результаты моделирования RS триггера- защелки показаны на рис. 11. В момент вре- мени 250 нс на триггер поступает запрещен- ный набор сигналов, и автомат переходит в состояние Ban, информируя разработчика проекта о некорректном наборе входных сиг- налов. Конечно, модель можно улучшить, до- бавив в нее запрещенное состояние и дру- гие аномальные состояния триггера (мета- стабильные и колебательные). Но стоит ли овчинка выделки? Проще убедиться, что схе- ма не попадает в такие состояния. Асинхронные автоматы вполне годятся и для описания поведения комбинационных схем. Возможно, этот тезис звучит странно, ведь комбинационная схема не является ав- томатом с памятью, а ее выходные сигналы не зависят от предыдущего состояния. Тем не менее все работает. В подтверждение этих слов рассмотрим двухвходовой мультиплексор mux2, работа- ющий как асинхронный автомат (рис. 12). Процесс создания цифрового автомата mux2 мы не станем подробно комментировать, предполагая, что он уже хорошо усвоен. Мультиплексор может находиться в одном из двух состояний. В состоянии S1 на выход Y передается сигнал с входа D0, в состоянии S2 на выход коммутируется сигнал D1. Переход из одного состояния в другое определяется значением сигнала на селекторном входе A. Условие перехода — булевское выражение, например A=’1’ или A=’0’. Однако вместо явного выражения мы можем использовать конструкцию @else, которая считается ис- тинной, если никакие другие условия для вы- ходящих из состояния переходов не прини- мают значение True («истинно»). Другими словами, условие @else читается как «во всех остальных случаях». На рис. 13 показан фрагмент сгенериро- ванного по диаграмме состояний VHDL-кода для мультиплексора mux2. Конструкция @else представлена в условном операторе IF пред- ложением else, выделенным красным цветом. Рассмотренная конструкция @else особен- но полезна при проектировании сложных ав- томатов, когда трудно заранее предусмотреть все возможные переходы. Временные диа- граммы, показанные на рис. 14, подтвержда- ют правильность работы мультиплексора. Мы уже отмечали, что новое состояние ав- томата для комбинационных схем не зависит от предыстории, а это значит, что переход в новое состояние возможен из любого пре- дыдущего состояния. Возникают опасения, что для сложных схем число переходов окажется настолько боль- шим, что сделает неэффективным автомат- ный способ описания комбинационных схем. Однако на деле этого не происходит, выруча- ют так называемые глобальные переходы. На рис. 15 показана диаграмма состояний мультиплексора, имеющего четыре инфор- мационных ( D0, D1, D2, D3) и два селектор- ных ( A0, A1) входа. Но вместо 12 обычных переходов, которыми пришлось бы соеди- нить все возможные сочетания состояний, на рисунке всего 4 глобальных перехода. Как видно, глобальный переход не име- ет стартового состояния. Предполагается, что он может начинаться «ниоткуда», точнее из любого состояния. Другими словами, если условие перехода выполняется, то происхо- дит переход в указанное им состояние неза- висимо от прежнего состояния автомата. Рис. 11. Результаты моделирования RS триггера-защелки Рис. 12. Мультиплексор mux2, описанный в терминах цифрового автомата Рис. 13. Конструкция @else диаграммы состояний замещается в условном операторе VHDL-кода предложением else Рис. 14. Результаты моделирования асинхронного цифрового автомата mux2 122 КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 2 '2010 проектирование моделирование работы Глобальный переход создается так. Сначала вы рисуете обычный переход. Затем щелкаете на нем правой кнопкой мыши и выполняете команду Global. На исходящем конце перехода появляется жирная точка — признак глобального перехода. Попробуйте отбуксировать ее на какое-нибудь состояние, и, в отличие от обычного перехода, «соединения» не произойдет. Результаты работы мультиплексора mux4 показаны на рис. 16. Обратите внимание, сигналы с информационных входов D0…D3 передаются на выход без задержки (момент времени 68 нс), а смена состояний запаздывает на указанную в параметре Propagation Delay величину в 10 нс (момент времени 260 нс). Поэтому на выход Y про- никает только часть сигнала с входа D1. Способы описания цифровых автоматов Создавая диаграммы состояний цифровых автоматов, вы можете использовать несколько стилей описания: низкоуровневое (структур- ное), потоковое и высокоуровневое (поведенческое). Отличаются они уровнем абстракции и числом рабочих состояний. При низкоуровневом (структурном) описании проект представля- ется взаимосвязанными параллельными автоматами (рис. 17), каж- дый из которых имитирует работу одного или нескольких входящих в систему элементов. На рис. 17 показана диаграмма состояний трехразрядного двоич- ного счетчика с параллельным переносом. Каждый из трех автоматов фактически описывает работу одного разряда счетчика (триггера и соответствующей логики формирования переносов). Для всех трех автоматов общими являются сигнал сброса R и так- тирования C. Триггер Q1 будет переключаться только в том случае, если младший разряд счетчика Q0 находится в ‘1’ (см. автомат Sreg1, условие Q0=’1’). Для переключения старшего разряда Q2 должно выполняться аналогичное условие — оба предыдущих разряда установлены в ‘1’: Q1=’1’ and Q0=’1’. Обратите внимание, выходы счетчика Q2…Q0 объявлены дву- направленными ( Inout) . Это сделано по необходимости, чтобы их можно было использовать в булевых выражениях, задающих усло- вия на переходах. Результаты моделирования счетчика показаны на рис. 18. Потоковый стиль описания реализуется с помощью одного циф- рового автомата. Отличительным признаком этого стиля является полное соответствие числа состояний реального объекта и его диа- граммы состояний. Например, 2-разрядный двоичный реверсивный счетчик имеет четыре состояния, столько же состояний должно быть и на его диаграмме (рис. 19). Направление счета задается сигналом UpDn. При UpDn=’1’ счетчик работает на сложение, и автомат последовательно проходит состоя- ния: S1–S2–S3–S4 (рис. 20). При UpDn=’0’ счетчик работает в обрат- ном направлении: S4–S3–S2–S1. Рис. 15. Глобальные переходы позволяют создавать очень компактные автоматные описания комбинационных схем Рис. 16. Результаты моделирования мультиплексора mux4 Рис. 17. Диаграмма состояний 3-разрядного двоичного счетчика, представленная тремя взаимосвязанными автоматами Рис. 18. Результаты моделирования двоичного суммирующего счетчика Рис. 19. Потоковый стиль описания работы 2-разрядного реверсивного счетчика 123 КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 2 '2010 www.kite.ru проектирование моделирование работы Обратите внимание на один новый графический элемент , с кото- рым мы встречаемся впервые (на рис. 19 он расположен в правом верх- нем углу). Он называется link («связь») и применяется в тех случаях, ког- да возникают трудности с непосредственным проведением переходов. В нашем примере при переполнении счетчика автомат должен перейти из состояния S4 в состояние S1. Чтобы не тянуть длинную дугу через весь рисунок, можно создать короткий переход, закан- чивающийся на объекте link, заменив заданное по умолчанию имя StateName на имя состояния S1, которым должен заканчиваться дан- ный переход. Добавим, что этот механизм работает и при подключении состоя- ний, расположенных на различных иерархических уровнях диаграм- мы. Подробнее об этом мы поговорим позднее. Потоковый стиль описания неудобен тем, что для схем с боль- шим числом состояний диаграмма получается очень сложной. Действительно, для 3-разрядного счетчика потребуется уже 8 состоя- ний, для 4-разрядного — 16, для 8-разрядного — 256 состояний. Этот недостаток отсутствует в поведенческом стиле описания цифрового автомата. Показанная на рис. 21 диаграмма состояний 2-разрядного реверсивного счетчика выполнена именно в таком сти- ле. Она строится на основании логической таблицы, описывающей работу (поведение) проектируемого объекта. Отсюда и название — «поведенческий стиль описания автомата». В нашем примере счетчик имеет три режима работы: сброс Reset, счет вверх Up и счет вниз Down. На графе переходов автомата им со- ответствуют три состояния с теми же самыми именами. Исходное состояние счетчика задается асинхронно высоким уровнем на входе R (R=’1’). Направление счета определяется значени- ем сигнала на входе UpDn. При UpDn=’1’ счетчик работает на сложе- ние, при UpDn=’0’ — на вычитание (рис. 22). Для того чтобы заставить данную реализацию правильно работать, пришлось пойти на определенные уловки. Прежде всего, это касается выходного сигнала Q. Его нельзя использовать в правых частях выра- жений типа Q<=Q+’1’ или Q<=Q–“01” (рис. 21). Поэтому пришлось заменить выходной порт Q на двунаправленный , что нельзя назвать изящным решением. Кроме того, потребовалось сделать этот порт регистровым ( Registered) и использовать команду FSM/Action/Entry («действия на входах») вместо рекомендуемой по умолчанию команды FSM/ Action/State («действия в состояниях»). Итак, для получения верного результата потребовались весьма не- очевидные манипуляции. Поэтому в название объекта проекта UpDn_ count_bad включено слово bad («плохой»). И мы не рекомендуем действовать подобным образом. Способы построения эффективных, компактных и наглядных диаграмм состояний цифровых автоматов будут рассмотрены на следующем уроке. n Продолжение следует Рис. 20. Результаты моделирования реверсивного счетчика Рис. 21. Поведенческий стиль описания цифрового автомата Рис. 22. Результаты моделирования реверсивного счетчика при использовании поведенческого стиля описания его диаграммы состояний |