Содержание

Вступление (Introduction)
Cравнение методов описания конечного автомата (Comparison of State Machine Description Methods)
Цель этого руководства (The Purpose of This Tutorial)
Создание диаграммы состояния (Creating a State Diagram)
Реализация (Implementation)
Создание проекта BLACKJACK (Creating BLACKJACK Design)
Использование помощника по созданию новых исходных файлов (Using New Source File Wizard)
Добавление портов (Adding Ports)
Добавление дополнительных портов (Adding Extra Ports)
Описание дополнительных переменных (Defining Additional Variables)
Добавление состояния сброса (Adding a Reset State)
Добавление инициализации (Adding Initialization Actions)
Добавление состояния для запроса карты (Adding a State to Request a Card)
Генерация кода HDL (HDL Code Generation)
Прием и обработка Новой Карты (Receiving and Handling of the New Card)
Анализирование Общего Результата (Analyzing the Total Score)
Проверка Окончательного Счета (Testing the Final Score)
Назначение Приоритетов Условия (Assigning Condition Priorities)
Выбор Кодирования Состояния (Selecting State Encoding)
Компилирование проекта (Compiling the Design)
Нахождение и исправление ошибок (Locating and Correcting Errors)
Имитатор (Simulator)
Заключение (Conclusion)

 

 

Вступление

Редакторы конечного автомата предоставляют простой графический ввод проекта. Так как установки состояния могут быть легко перенастроены на любые устройства, редакторы состояния становятся очень популярными среди проектировщиков, которые ценят технологическую независимость. Эта обучающая программа предназначена для пользователей Active-VHDL, кто хотят узнать, как работать с редактором конечного автомата, который используется для графического ввода проектов VHDL.

 

Сравнение методов описания конечного автомата

Давайте рассмотрим очень простой конечный автомат, который используется для управления светофором. Так как самый лучший способ начинать любую разработку конечного автомата - устное описание, давайте опишим операции контроллера светофора следующим образом:

Контроллер основан на таймере, который включает все лампы светофора в предопределенной последовательности.

Когда красный индикатор включен и таймер сигналит, что зеленый индикатор должен быть зажжен (GO_GREEN, сигнал переходит в Высокое состояние), включить ЗЕЛЕНЫЙ сигнал и выключить другие сигналы. Когда зеленый индикатор включен и таймер сигналит, что желтый индикатор должен быть зажжен (GO_YELLOW, сигнал переходит в Высокое состояние), включить ЖЕЛТЫЙ сигнал и выключить другие сигналы. Когда желтый индикатор включен и таймер сигналит, что красный индикатор должен быть зажжен (GO_RED, сигнал переходит в Высокое состояние), включить КРАСНЫЙ сигнал и выключить другие сигналы.

Диаграмма Состояния - графический метод описания конечного автомата. Например, диаграмма состояния для контроллера светофора показывается ниже:

 

 

Конечные автоматы могут быть преобразованы в HDL код, который может затем быть преобразован в физическую реализацию (netlist) программами логического синтеза.

VHDL описание контроллера светофора показано ниже:

Image10.gif (9111 bytes)
 

Основные преимущества и недостатки проектов конечного автомата перечислены в таблице ниже:

  Устное Описание                 Диаграмма Состояния                     HDL Описание

компактное

очень компактная

длинное

легко читаемое

очень легко читаемая

тяжело читаемое

трудно составляемое

легко составляемая

легко составляемое

 

само-документируемая

требует документации

 

 

Цель этого руководства

Это руководтво обучит Вас, как использовать Редактор Конечного Автомата для ввода диаграмм конечного автомата и логического синтеза проектов. Мы предполагаем, что Вы уже знакомы с приложением Active-VHDL.

 

Создание диаграммы состояний

Типовой проект, созданный в этом руководстве - конечный автомат, который играет в Blackjack.

Цель игры состоит в том, чтобы выбрать ряд карт, сумма которых будет так близко к 21 насколько возможно. Каждая карта имеет десятичное значение между 2 и 11, где 11 называется ТУЗОМ и может быть зассчитана как 1 если нужно. Игрок с самым большим количеством очков, но ниже чем 21 будет победителем.

Просьба о дополнительной карте обозначена выводом SAY_CARD (этот сигнал Высокого уровня или логическая 1), который генерируется каждый раз, когда общяя сумма всех карт - менее 17. Однако, он никогда не может быть сгенерирован, если общая сумма карт превышает 21.

Поступление новой карты обозначено сигналом NEW_CARD, изменяющимся с 0 в 1.

Автомат должен вывести сигнал SAY_BUST, когда сумма карт превышает 21. В случае, если общее количество очков между 17 и 21, автомат должна вывести сигнал SAY_HOLD.

Общий счет нужно показать на ОБЩЕМ выводе (выводе общего результата). После достижения условия SAY_HOLD или условия SAY_BUST, автомат должен остаться в последнем состоянии до появления на входе сигнала NEW_GAME (сброса).

Сигнал NEW_GAME сбрасывает конечный автомат.

 

Реализация

Автомат будет реализовываться, рисуя диаграмму состояний. Диаграмма будет автоматически преобразована в соответствующий VHDL код. Затем, Вы можете проверить функциональные возможности автомата, моделируя код в VHDL имитаторе.

 

Создание проекта BLACKJACK

  1. Запустите Active-VHDL. Появится окно Getting started.

 

  1. Выберите опцию Create new design и нажмите OK. Это откроет серию поледовательных окон помощника.
  2. Введи имя проекта BLACKJACK.

 

  1. В следующем окне выберите Create an empty design.

 

  1. Перейдите на последнее окно помощника, нажав кнопку Next и затем Finish для завершения создания нового проекта.

 

 

Использование помощника по созданию новых исходных файлов

Чтобы открыть новое окно Редактора Состояний, выберите State Diagram из New в меню File.

Используя ряд последовательно появляющихся окон помощника, Вы можете создать новый проект.

Для создания шаблона диаграммы состояний:

  1. Нажмите Next в окне New Source File Wizard.
    Появится
    окно New Source File Wizard - Name.

 

  1. Наберите имя файла BLACKJACK и нажмите Next.

 

  1. Появится окно Design Wizard – Ports для ввода сигналов В/В (портов).

 

Примечание: Расширение файлов диаграмм состояния по-умолчанию *.ASF и новый файл будет назван BLACKJACK.ASF.

 

Добавление портов

Для добавления портов в окне Design Wizard Ports выполните следующие операции:

  1. Нажмите New.
  2. Введите имя порта в ячейке Name.
  3. Выберите направление порта (in, out, inout, buffer) выбрав одну из опций в поле Port Direction.

Все назначенные имена порта отображаются в поле над кнопкой New и в области предварительного просмотра символа, которая размещена слева от имени порта.

С помощью процедуры, описанной выше, введите следующие порты:

Для ввода диапазона шины [3;0] для сигнала CARD, нажмите кнопку Type, чтобы открыть диалог Port Type. Затем выберите тип порта STD_LOGIC_VECTOR, и введите диапазон шины, используя массивы в поле Range.
Вы можете также ввести диапазон шины, используя поле Array Indexes в диалоговом окне Design Wizard - Ports.
 

 

 

Обратите внимание, что все назначенные порты В/В появляются внутри символа, который отображается слева вышеупомянутого окна.

ОБРАТИТЕ ВНИМАНИЕ: Редактор Состояний поддерживает только синхронные конечные автоматы, что означает, что все переходы из одного состояния в другой, выполняются только при поступлении сигналов таймера, и проект не может функционировать без сигналов таймера.

  1. Нажмите кнопку Finish поле окончания установки портов В/В. Когда помощник предложит добавить порт часов (таймера), нажмите Yes.

 

Новая диаграмма состояний, созданная помощником показана ниже:

ОБРАТИТЕ ВНИМАНИЕ: Если Вы выбирете множественные автоматы, они будут преобразованы в отдельные параллельные процессы в VHDL.

 

 

Добавление дополнительных портов

Дополнительные порты ввода - вывода могут быть добавлены в любое время к диаграмме состояния, нажатием кнопки Output/ / Input Port, размещенной внизу вертикальной инструментальной панели. Так как мы нуждаемся в порте вывода, показывающем общий счет игры Blackjack, давайте добавим его сейчас:

  1. Нажмите кнопку (Output Port) и затем кликните над символом порта SAY_BUSTl. Новый выходной порт Port1 будет помещен над портом SAY_BUST.
  2. Кликните на символ порта, который вы только-что поместили на диаграмму правой кнопкой мыши и выберите Properties из появившегося меню. Появится окно Port Properties.
  3. Введите TOTAL в строку Name и выберите 4:0 в строке Range. Также выберите опции Output и Registered.
  4. Нажмите OK для завершения операции.

 

Окно Port Properties позволяет Вам определить выбранный входной сигнал как таймер, и порты вывода как комбинаторный или зарегистрированный. Зарегистрированные (Registered) порты содержат установленое значение в дополнительном регистре. Комбинаторные (combinatorial) выводы изменяются каждый раз при изменении входных условий.

ОБРАТИТЕ ВНИМАНИЕ: Так как общая сумма всех карт может быть 26 (самое большое количество очков, при котором новая карта выводится - 16, а самое большое количество очков в новой карте может быть 10), порт TOTAL должен иметь двоичный диапазон от 0 до 31, который требует 5 битов данных [4:0].

Новые порты вывода, перечисленные в верхнем правом углу основнго экрана Редактора Состояния должны выглядеть как показано ниже:

 

 

 

Описание дополнительных переменных

Конечный автомат должен знать,является ли любая из карт ТУЗОМ, потому что, когда счет превышает 21 (с ТУЗОМ, рассчитанным как 11), ТУЗ может быть рассчитан как 1 для уменьшения счета.

Следующая процедура описывает, как определить новую переменную с именем Ace (Туз):

  1. Нажмите кнопку Signal на левой панели инструментов .
  2. Поместите курсор под текст Sreg0 text.

 

  1. Нажмите на иконку Signal 1 правой кнопкой мыши и выберите Properties из появившегося меню. Появится окно Signal Properties.

 

  1. Наберите Ace в поле Name.
  2. Выберите тип Boolean.
  3. Нажмите OK.
 

Добавление состояния сброса

Каждый конечный автомат должен быть проинициализирован. В случае игры Blackjack инициализация происходит, когда начата новая игра. Давайте добавим инициализацию всех портов вывода к диаграмме состояния прямо сейчас.

  1. Нажмите кнопку State расположенную вверху на вертикальной панели инструментов.
  2. Поместите символ состояния в середину листа, как показано ниже (используйте левую кнопку мыши, чтобы поместить новое состояние и правую кнопку мыши, чтобы отменить этот режим). Новое состояние будет автоматически названо S1.

 

  1. Для изменения имени состояния, два раза щелкните на S1.

 

  1. Замените S1 на Start введя его в поле для редактирования. Для выхода из редактирования кликните вне пределов поля для редактирования. Вид состояния с новым именем показывается ниже:

  1. Щелкните внутри пустой области правой кнопкой мыши и выберите Properties из меню. Откроется окно Machine Properties. Это окно используется, чтобы определить глобальные установки выбранного конечного автомата. Некоторые из глобальных установок типа Sreg0 именуются автоматически.

 

  1. Замените Sreg0, отобращенное в поле Name на Action. Это установит имя сигнала конечного автомата, используемое, чтобы сохранить текущее значение в VHDL

 

Окно Machine Properties имеет несколько меток для группировки различных опций внутри окна. Щелкните на Reset и выберите следующее:

Это будет гарантировать, что сигнал NEW_GAME будет использоваться как сброс машины и когда он активизирован, машина автоматически перейдет в состояние Start.

 

  1. Нажмите OK в окне Machine Properties. Диаграмма состояний сейчас должна выглядеть как показано ниже:

 

ОБРАТИТЕ ВНИМАНИЕ: Треугольный символ сброса - не состояние; это указывает, что связанный переход будет выполнен в любое время, когда встретится это условие и будет выполнен независимо от текущего состояния машины. Переход сброса показывается только для документационной цели.

 

Добавление инициализации

Как только условие сброса выполнено, машина переходит в состояние Start. Чтобы определять действия, которые следуют за сбросом, мы будем должны определить входные действия. Входные действия автоматически присоединены к верхней части символа состояния и указывают, что определенный код выполняется только один раз, когда машина переходит в это состояние.

  1. Нажмите кнопку Entry Action .
  2. Поместите ‘dot end’ указателя мыши над состоянием Start и нажмите левую кнопку мыши.
  3. В поле для ввода наберите следующее:
Ace := false;
TOTAL <= "00000";
SAY_CARD <= '0';
SAY_HOLD <= '0';
SAY_BUST <= '0';
  1. Щелкните левой кнопкой мыши вне поля для ввода.

Обратите внимание, что Вы должны использовать VHDL синтаксис:

Перечисленные действия показаны ниже:

 

ОБРАТИТЕ ВНИМАНИЕ: Комбинаторные назначения порта вывода в состояние сброса также используются как значения по умолчанию в других состояниях. Это означает, что вывод будет установлен в значение по умолчанию во всех состояниях, даже, где значение явно не было задано. В данном примере, SAY_BUST будет '0' во всех состояниях, если только Вы не добавите операцию SAY_BUST < = '1'.

 

Добавление состояния для запроса карты

Как только сброс выполнился, конечный автомат запускаетсяс, запрашивая карту. Это будет осуществлено добавлением состояния Hit_me.

1. Добавьте состояние Hit_me под состоянием Start (используйте процедуру, описанную выше для ввода состояния Start).

2. Для того, чтобы нарисовать переход между Start и Hit_me, нажмите кнопку Transition.

3. Затем, кликните где-нибудь внутри Start и затем Hit_me. Строка будет выведена между этими состояниями.

4. Для того, чтобы выйти из режима редактирования, нажмите левую кнопку мыши снаружи значков состояния.

ОБРАТИТЕ ВНИМАНИЕ: Переход из состояния Start в состояние Hit_me безусловен, и он будет автоматически выполнен в следующем цикле таймера, после входа в состояние Start (это означает, что состояние Reset будет длиться один цикл таймера).

Чтобы выразить просьбу о новой карте, SAY_CARD должен быть установлен в '1'. Так как этот сигнал должен остаться активным все время, мы должны использовать state action а не entry action.

ОБРАТИТЕ ВНИМАНИЕ: State actions выполняются на каждом цикле часов, пока автомат остается в данном состоянии. Exit Action выполняется только при переходе в выбранное состояние. Exit Action выполняется после выхода из активного состояния.

1. Нажмите кнопку State Action.

2. Поместите 'dot end' указателя мыши над Hit_me и нажмите левую кнопку мыши.

3. Напечатайте SAY_CARD < = '1' в окне редактирования.

4. Нажмите левую кнопку мыши вне поля редактирования. После этой операции диаграмма состояния будет выглядеть как показано ниже:

 

 

Генерация кода HDL

На этом этапе была создана часть конечного автомата. Прежде, чем расширить проект, мы рассмотрим генерируемый код, чтобы показать, как элементы диаграммы соответствуют сгенерированному коду.

ОБРАТИТЕ ВНИМАНИЕ: Процесс генерации HDL кода проверяет некоторые ошибки диаграммы, но не проверяет ваши VHDL-выражения. Полная проверка синтаксиса будет выполняться позже, когда проект будет синтезироваться.

1. Используя вкладку File из окна Design Browser, нажмите правой кнопкой мыши на файле Blackjack.asf.

2. Выбирает опцию Generate Code из меню, чтобы просмотреть сгенерированный код.

ОБРАТИТЕ ВНИМАНИЕ: Необходимо, чтобы Вы обучились связывать код, который генерируется c элементами на рисунке. Редактор состояний использует стандартные шаблоны для создания VHDL проекта. Понимание конструкции VHDL очень полезно при отладке проекта с помощью VHDL имитатора.

VHDL код, сгенерированный Редактором Состояний может быть разделен на несколько разделов.

 
Image12.gif (2287 bytes)
· Entity declaration section содержит список всех портов, определенных в диаграмме состояний.
Image13.gif (3185 bytes)
· Global declarations section описывает:
Image14.gif (2791 bytes)
· Machine declarations section описывает объекты, персональные для каждой машины (процесса).
Image16.gif (1808 bytes)
· Reset definition section определяет поведение машины при инициализации.
Image17.gif (1909 bytes)
· Machine action description section определяет действия, выполняемые в специфических состояниях и переходах между состояниями
Image20.gif (2089 bytes)
· Output port assignment section определяет логическое моделирование выводов Image19.gif (3096 bytes)

Прием и обработка новой карты

Как только новая карта была запрошена, машина должна подождать, пока ее не получит. Поступление новой карты будет отмечено сигналом NEW_CARD. Приведенное ниже добавит раздел проекта, который обрабатывает сигнал NEW_CARD:

  1. Добавьте новое состояние после Hit_me
  2. Переименуйте его в Got_it, так же, как при переименовании S1 в Start.
  3. Щелкните правой кнопкой мыши внутри значка состояния, но снаружи имени состояния.
  4. Выберите Properties из меню.
  5. Убедитесь, что имя Got_it находится в поле Name. Нажмите OK.

 

  1. Добавьте переход из Hit_me в Got_it.
  2. Нажмите кнопку Condition для добавления условия к нарисованому переходу.
  3. Щелкните на строке перехода.
  4. Наберите NEW_CARD='1' в окне редактирования.
  5. . Click the mouse button outside the edit box.

ОБРАТИТЕ ВНИМАНИЕ:

Так как эти действия должны быть выполнены, только один раз при вводе состояния, будет использоваться entry action.

Чтобы назначать entry action к состоянию, используйте карту Actions окне State Properties :

1. Нажимает правую кнопку мыши внутри значка состояния

2. Выберите Properties в появившемся меню

3. Нажмите вкладку Actions.

4. Наберите в поле Entry:

TOTAL<=TOTAL+CARD;

Ace:=(CARD=11) or Ace;

5. Нажимает кнопку OK, чтобы завершить операцию.

 

ОБРАТИТЕ ВНИМАНИЕ: Вышеописанные действия должны быть определены как действия входа (entry actions). Иначе, общий счет будет увеличиваться на каждом активном фронте синхроимпульса, пока машина остается в состоянии Got_it.

Диаграмма состояния должна теперь выглядеть как показано ниже:

 

 

Анализирование общего счета

Как только новая карта была получена, общий счет карт должен быть модифицирован и проверен. Если он менее 17, конечный автомат должен запросить новую карту и возвратиться к состоянию Hit_me.

Добавление новой карты:

  1. Добавьте состояние Test16 после Got_it.
  2. Добавьте переход из Got_it в Test16.
  3. Добавьте условие NEW_CARD=’0’ к вышеописанному переходу.

ОБРАТИТЕ ВНИМАНИЕ: Добавление условия NEW_CARD = '0' предупреждает конечный автомат от использования той же самой карты больше чем один раз.

После завершения этого шага диаграмма состояния будет выглядеть как показано ниже:

 

 

Обнаружение условий Hold/Bust:

  1. Добавьте состояние Test21 после Test16.
  2. Добавьте переход из состояния Test16 в Test21; назначьте условие TOTAL > 16.
  3. Добавьте переход из состояния Test16 в Hit_me; назначьте условие @ELSE.

ОБРАТИТЕ ВНИМАНИЕ: Переход @ELSE выполняется, когда никакие другие условия не выполнены в этом состоянии. Этот переход будет выполнен, если значение TOTAL = 16 или меньше, и он заставит машину запрашивать новую карту в состоянии Hit_me.

Диаграмма состояний с 5 состояниями должна выглядеть так:

 

 

 

Проверка окончательного счета

Как только машина переходит в состояние Test 21, то общий счет - 17 или больше. Теперь конечный автомат должен проверить, не превыил ли счет 21. Если нет, он установит сигнал SAY_HOLD. Если счет более чем 21, должен быть активизирован сигнал SAY_BUST, указывая, что машина проиграла игру. Перед установкой сигнала SAY_BUST, машина должна проверить, была ли любая из ранее выбранных карт ТУЗОМ. Если имелся Туз, это может уменьшить общий счет на 10, чтобы избавиться от ситуации "bust".

  1. Добавьте еще два состояния : Bust и Hold.

 

  1. Добавьте переход из состояния Test21 в Bust и из Test21 в Hold.
  2. Добавьте условие TOTAL < 22 к переходу Test21 Ю Hold.
  3. Добавьте действие SAY_HOLD <=’1’ к состоянию Hold.
  4. Добавьте переход из состояния Test21 в Test16 с условием ACE.

NOTE: Т.к. ACE – переменная типа Boolean, то никаких дополнительных операторов отношения не требуется добавлять к данному условию.

  1. Click the Transition Action button , then click the transition line and type in the action text: TOTAL <= TOTAL-10. In this way you have added the action to the last transition.

ОБРАТИТЕ ВНИМАНИЕ: Действия перехода позволяют избегать избыточных состояний. Если Вы не назначали это действие к переходу, другое состояние должно быть создано, чтобы выполнить действие TOTAL <= TOTAL-10.

  1. Добавьте условие @ELSE к переходу Test21 Ю Bust.
  2. Добавьте действие SAY_BUST <=’1’ к состоянию Bust.

Конечная диаграмма состояний со всеми состояниями, переходами, условиями, и действиями должна выглядеть как показано ниже:

 

 

Назначение приоритетов условия

Обратите внимание, что в состоянии Test21, оба условия TOTAL < 22 и ТУЗ (Ace) могут появиться одновременно. В таком случае, поведение машины зависит от последовательности оценок условий. Чтобы избежать беспорядка, Вы должны назначить различные приоритеты к каждому переходу. Так как наш автомат должен сначала проверить,является ли TOTAL меньше чем 22, назначьте приоритет 1 переходу "Test21 Ю Hold" и приоритет 2 переходу "Test21 Ю Test16".

Для изменения приоритета перехода:

  1. Клинките на строке перехода.
  2. Нажмите на правую кнопку мыши для появления меню.
  3. Выберите требуемый приоритет используя команду Priority.
  4. Нажмите кнопку мыши для завершения операции.

 

ОБРАТИТЕ ВНИМАНИЕ: Переходы без назначенного приоритета выполняються в последнюю очередь.

 

Выбор кодирования состояния

Когда конечные автоматы компилируются в логику, текущие состояния сохраняются в регистре "состояния" (state), являющемся группой переключателей. Каждое состояние назначено отдельному переключателю. Однако, если имеются некоторые параллельные переходы состояний, они могут создать сбой в комбинаторной логике, и конечный автомат может перейти в запрещенное состояние. Рекомендуемый тип кодирования для всего FPGAs - One-Hot, который назначает такие значения каждому состоянию, чтобы только один бит регистра переходов мог быть утановлен в данный момент времени. One-Hot кодирование, однако, использует большее количество разрядов, т.к. каждое состояние требует один бит в регистре. По этой причине это не рекомендуется для CPLDs, который требователен к ресурсам. Редактор Состояния поддерживает One-Hot и двоичное кодирование. Другие типы кодирования могут быть созданы вручную путем назначения кодов к каждому состоянию.

Двоичный метод кодирования будет использоваться в этом руководстве, чтобы упростить анализ проекта в имитаторе.

1. Вызовите окно Machine Properties. (Для этого нажмите на пустую область диаграммы состояния правой кнопкой мыши).

2. В поле Encoding выбирите опцию Encoded и опцию Binary из списка, и затем нажмите ОК.

 

ОБРАТИТЕ ВНИМАНИЕ: Команда кодирования Symbolic позволяет инструменту синтеза автоматически выбирать метод кодирования привилегированного состояния. Metamor XVHDL использует по умолчанию двоичное кодирование, если коды не назначены каким-либо значениям.

 

Компилирование проекта

Чтобы скомпилировать проект, выберите Compile из меню Design или нажмите кнопку. AVHDL автоматически генерирует VHDL код, соответствующий диаграмме состояния.

 

Нахождение и исправление ошибок

Порты вывода не могут использоваться конечным автоматом для чтения. При чтении порта требуется, чтобы он был определен как двунаправленный. Обратите внимание, что сигнал 'TOTAL' не читаем, потому что он находится в режиме OUT и будет выдаваться ошибка каждый раз, когда TOTAL будет появляться в правой части выражения назначения сигнала.

Для исправления этой ошибки:

  1. Щелкните на символе порта TOTAL правой кнопкой мыши.
  2. Выберите Properties из появившегося меню.
  3. Измените тип порта на двунаправленный (Bi-directional).
  4. Перекомпилируйте проект - на этот раз ошибок быть не должно.
 

Имитация

  1. Для инициализации процесса имитации выберите Initialize Simulation из меню Simulation.
  2. В окне Design Settings на вкладке Top-level Selection выберите элемент top-level и нажмите OK.

  1. Ипользуйте опцию New Waveform из меню File или щелкните на чтобы открыть окно new waveform.
    Active-VHDL автоматически переключится на вкладку
    Structure окна Design Browser.
  2. Щелкните на Root чтобы отобразить сигналы в нижней части окна Design Browser.
  3. Выберите Add Signals из меню Waveform и появится диалоговое окно Add Signals. Нажав Ctrl, выберите следующие сигналы : CARD, CLK, NEW_CARD, NEW_GAME, SAY_BUST, SAY_CARD, SAY_HOLD, TOTAL..

 

  1. Щелкните на Add чтобы добавить сигналы к окну Waveform для наблюдения.
  2. Чтобы назначить имитаторы (stimulators) сигналам:
Используя процедуру, описанную выше, назначьте следующие имитаторы (stimulators) к сигналам:

NEW_CARD

0 0, 1 80 -r 100

NEW_GAME

1 0, 0 20 -r 600

CARD

16#0 0, 16#A 100, 16#3 200, 16#8 300

CLK

0 0, 1 5 -r 10

Приведенная формула базируется на очень простом синтаксисе:
value [ time { , value time } [ -r period ] ]

где:
[] Квадратные скобки указывают необязательный элемент

{} Фигурные скобки указывают необязательный элемент, который может повторяться

 

Названия сигнала в окне Waveform должны выглядеть как показано ниже :

 

 

  1. Установите шаг имитации в 100ns в поле Increase/ Decrease time расположенном на основной панели инструментов.
  2. Выполните несколько шагов имитации используя опцию Run Until из меню Simulation.

Вы должны получить результаты, подобные показанным ниже:

 

 

Заключение

Как показано выше, Редактор Состояний - мощный инструмент для создания проектов логического управления в VHDL. Графические диаграммы обеспечивают превосходную документацию проекта и позволяют Вам эффективно генерировать результаты синтеза.