close

Вход

Забыли?

вход по аккаунту

?

lab FSM 2012

код для вставкиСкачать
Московский Государственный Технический Университет имени Н.Э. Баумана
факультет "Информатика и системы управления"
Методические указания к лабораторной работе №3
"Проектирование конечных автоматов "
по курсу "Прикладная теория цифровых автоматов"
Продолжительность работы: 4 часа
Составил: Ромашкин В.И.
Федоров С.В.
"Утверждаю"
Зав. кафедрой ИУ-3
д. т. н., профессор Девятков В. В.
Москва
2012
Содержание
Цель работы2
Порядок выполнения работы2
Создание и настройка проекта в среде Quartus II2
Анализ конечного автомата6
Приложение 1. Реализация конечного автомата в среде Quartus II7
Приложение 2. Описание реализуемого конечного автомата12
Идея работы конечного автомата12
Условия переходов14
Цель работы
Изучение методики реализации конечных автоматов в среде Altera Quartus II на языке Verilog. Реализация и моделирование конечного автомата согласно варианту.
Порядок выполнения работы
1. Ознакомьтесь с материалами по описанию КА на Verilog в приложении Приложение 1. Реализация конечного автомата в среде Quartus II.
2. Реализуйте конечный автомат, описанный в приложении Приложение 2. Описание реализуемого конечного автомата, создайте для него тестбенч и проведите моделирование в пакете Quartus II.
3. Реализуйте счетчик из пункта 3 домашнего задания №2 как конечный автомат на языке Verilog, тестбенч для него и проведите моделирование в пакете Quartus II. При реализации разрешается использовать шаблоны среды Quartus II.
4. Проведите моделирование счетчика, реализованного в рамках домашней подготовки на уровне регистровых передач в пакете Quartus II (запишите полученные уравнения по результатам синтеза в домашнем задании). Проверьте корректность работы счетчика. Изучите реализацию счетчика в RTL Viewer и Technology Map Viewer. Создание и настройка проекта в среде Quartus II
* Запуск
1. Запустите Windows.
2. Создайте в папке D:\PTCA\ папку Lab3\<группа>\<фамилия> и скопируйте в него полученный файл dev_fsm.v.
3. Выберите группу программ Altera в меню Пуск -> Программы.
4. Запустите Quartus II.
5. Распахните окно на весь экран.
* Создание проекта
1. Выберите пункт меню File -> New Project Wizard.
2. Следуйте указаниям мастера. На странице 1 из 5 введите:
* В верхней строке каталог проекта D:\PTCA\Lab3\<группа>\<фамилия>.
* В средней и нижней строках соответственно имя проекта dev_fsm и такое же имя файла на верхнем уровне иерархии.
3. На странице 2 добавьте в проект файл dev_fsm.v.
4. На странице 3 ничего менять не нужно.
5. На странице 4 все переключатели должны быть отключены.
6. На странице 5 нажмите Finish. Будет создан пустой проект с настройками по умолчанию.
* Навигатор проекта1
1. Убедитесь, что на закладке иерархии Hierarchy в качестве верхнего уровня указан файл dev_fsm.
2. Убедитесь, что на закладке файлов проекта Files в группе Device Design Files появился файл dev_fsm.v.
* Открытие рабочего файла
1. Выберите пункт меню File -> Open и откройте файл dev_fsm.v или откройте файл двойным щелчком на имени файла на закладке файлов проекта Files в навигаторе проекта.
2. Допишите условия перехода для состояний конечного автомата в соответствии с описанием логики работы автомата, приведенным в приложении Приложение 2. Описание реализуемого конечного автомата.
3. Напишите тестбенч и сохраните его под именем dev_fsm_tb.v в папке проекта.
* Компиляция
1. Запустите анализ проекта, выбрав пункт меню Processing -> Start -> Start Analysis & Elaboration.
2. В случае, если в процессе компиляции возникли ошибки, изучите их. В случае, если ошибки допущены в файлах проекта, двойным щелчком по ошибке или через меню Locate -> Locate in Design File перейдите к причине ошибки. Устраните её и запустите компиляцию повторно.
* Настройка связи с пакетом ModelSim
1. Будем проводить функциональное моделирование в пакете ModelSim, который можно запускать непосредственно из САПР Quartus II. Достаточно настроить параметры вызова ModelSim и указать тестбенч. Для этого вызовите диалог настройки через меню Assignments -> EDA Tool Settings и выберите раздел Simulation (рисунок Рисунок 1).
2. В списке ToolName выберите ModelSim-Altera. Убедитесь, что параметры формирования списка соединений EDA Netlist Writer установлены в соответствии с рисунком Рисунок 1.
Рисунок 1. Настройка среды моделирования.
3. Для настройки тестбенча нажмите на кнопку Test Benches... В появившемся диалоге Test Benches для создания нового тестбенча нажмите на кнопку New... 4. В диалоге настройки тестбенча добавьте в группу Test bench files написанный вами файл dev_fsm_tb.v. Укажите имя модуля верхнего уровня в тестбенче dev_fsm_tb в поле Top level module. Задайте имя тестбенча, например, tb, как приведено на рисунке Рисунок 2. Нажмите OK.
5. Убедитесь, что в диалоге Test Benches появился созданный тестбенч и нажмите OK. Таким образом можно создать несколько тестбенчей для разных режимов тестирования.
6. В настройках вызова ModelSim из Quartus II выберите созданный тестбенч в соответствии с рисунком Рисунок 1. Нажмите OK.
Рисунок 2. Настройка тестбенча.
* Функциональное моделирование
1. Для проведения функционального моделирования требуется провести анализ проекта. Во время этой процедуры из описания на Verilog будет извлечен т.н. список узлов - внутреннее представление схемы в САПР, которое требуется для дальнейшей работы с проектом. Для проведения анализа вызовите меню Processing -> Start -> Start Analysis & Elaboration.
2. Для запуска функционального моделирования выберите Tools -> Run EDA Simulation Tool -> EDA RTL Simulation. Автоматически будет запущен ModelSim, создана библиотека используемых функций, сформировано окно временных диаграмм и проведено моделирование.
3. Удостоверьтесь в правильности работы конечного автомата, анализируя временную диаграмму. Используйте панель управления курсорами (рисунок Рисунок 3) для добавления маркеров, измерения временных интервалов и переходов между изменениями сигналов.
Рисунок 3. Панель управления курсорами
4. Добавим внутренние сигналы для просмотра на временной диаграмме. Для этого в панели sim найдите и выделите экземпляр модуля, реализующий модуль dev_fsm. При этом в панели Objects будут отображены объекты (переменные, параметры и т.д.) этого модуля. Выберите интересесующие вас объекты, например регистр состояния, и перетащите их на временную диаграмму.
5. Для перезапуска моделирования в командной строке введите команды restart и run -all. Убедитесь, что новые значения теперь отражены на временной диаграмме.
6. Для сохранения вывода добавленных узлов при последующих запусках моделирования сохраним настройку вывода временных диаграмм в виде макроса. Находясь в окне Wave, выберите File -> Save Format и сохраните настройку временных диаграмм в файле wave.do.
7. Закройте ModelSim.
8. В Quartus откройте диалог настройки через Assignments -> EDA Tool Settings и в качестве скрипта настройки моделирования выберите сохраненный файл wave.do (рисунок Рисунок 4). Нажмите OK.
Рисунок 4. Настройка вызова скрипта настройки моделирования.
После добавления скрипта настройки моделирования автоматический запуск моделирования осуществляться уже не будет. Откройте в редакторе Quartus II файл wave.do. Файл содержит команды создания временной диаграммы и добавления в нее сигналов. Изучите его. В конце файла добавьте команду run -all. Сохраните файл и проведите моделирование.
Анализ конечного автомата
Среда Quartus II позволяет просматривать схему на уровне регистровых передач. 1. Откройте диалог Assignments -> Settings. Перейдите на страницу Analysis and Synthesis Settings. Нажмите на кнопку More Settings.... Убедитесь, что настройка извлечения конечных автоматов Extract Verilog State Machines включена. По умолчанию настройка кодирования конечных автоматов должна быть установлена в режиме Auto.
2. Запустите компиляцию проекта Processing -> Start Compilation. После завершения компиляции запустите просмотрщик уровня регистровых передач Tools -> Netlist Viewers -> RTL Viewer. Распознанный конечный автомат там отображается блоком желтого цвета и его название совпадает с именем регистра состояния (см. рисунок Рисунок 5).
Рисунок 5. RTL Viewer.
1. Сделайте двойной щелчок на блоке автомата. Запустится окно State Machine Viewer, на котором можно увидеть состояния, переходы и их условия.
2. Изучите условия перехода, сопоставьте с описанными условиями в исходном файле. Изучите кодирование автомата (см. описание настроек в приложении 1). Определите тип кодирования. 3. Откомпилируйте автомат с тремя разными настройками кодирования. После каждой компиляции также сохраняйте информацию об объеме проекта в логических элементах (меню Processing -> Compilation Report, закладка Flow Summary, значение Total logic elements (рис. 6)). Рисунок 6. Отчет компилятора.
Приложение 1. Реализация конечного автомата в среде Quartus II
Среда разработки Altera Quartus II позволяет создавать проекты не только с использованием современных цифровых модулей и элементов, но и при помощи описания цифровых автоматов. Для того, чтобы синтезатор мог распознать конечный автомат в написанном коде, требуется соблюдать ряд требований:
* Значение переменной состояния не должно подаваться на выход модуля;
* В качестве значений, присваиваемым переменной (регистру) состояния, могут использоваться константы, параметры и значения переменных состояния;
* Определено и присваивается переменной состояния как минимум два различных значения;
* Конечный автомат не будет распознан, если осуществляется обращение к части бит вектора состояния, например:
y=state[2];
* Конечный автомат не будет распознан, если переменная состояния используется в арифметических выражениях, в частности, если логика переходов будет описана с использованием арифметических операторов, как на примере:
case (state)
0: begin
if (ena) next_state <= state + 2;
else next_state <= state + 1;
end
1: begin
...
endcase
В случае, если эти рекомендации не будут соблюдены, схема будет синтезирована как схема, состоящая из комбинационной логики и регистров без извлечения конечного автомата. С точки зрения эффективности аппаратной реализации такая схема может и не уступать реализации, в которой конечный автомат был распознан синтезатором, однако это не дает возможность получить выигрыш от применения синтезатором ряда специфичных оптимизаций, например, выбора тип кодирования или синтеза безопасных конечных автоматов, автоматически переходящих в начальное состояние при попадании в нереализованное.
Также авторы среды Altera Quartus II предлагают соблюдать при описании конечных автоматов ряд рекомендаций, позволяющих повысить эффективность синтеза конечного автомата и избежать ряда ошибок при проектировании:
* Отделяйте логику конечного автомата от всех других арифметических функций и трактов обработки данных, включая формирование выходных значений.
* Используйте асинхронный или синхронный сброс, чтобы быть перевести конечный автомат в начальное состояние. Сброс также стоит производить, если автомат перешел в некорректное (нереализованное) состояние, т.к. синтезатор не обеспечивает контроль такой ситуации по умолчанию. Также в такой ситуации не стоит рассчитывать на логику, описанную в разделе default оператора case, т.к. синтезатор удаляет его, если он не достижим при корректной работе автомата.
* Используйте отдельную переменную для расчета следующего состояния, например next_state.
* Конечный автомат не должен содержать состояний, недостижимых из начального.
* Конечный автомат не должен содержать тупиковых состояний (deadlock states), имеющих переходы только на сами себя.
* Конечный автомат не должен содержать тупиковых переходов (dead transition), условие перехода по которым никогда не встречается во входной последовательности автомата.
В качестве примеров задания конечных автоматов в текстовом редакторе даже предусмотрены шаблоны автоматов Мура и Мили. Чтобы воспользоваться этими шаблонами, достаточно нажать иконку на панели инструментов (или меню Edit -> Insert Template...) и перейти в пункт меню Verilog HDL -> Full Designs -> State Machines.
На рисунке 7 приведен пример автомата Мура, а его описание с учетом описанных рекомендаций - в листинге Листинг 1. Рисунок 7. Пример автомата Мура.
module four_state_moore_state_machine
(
inputclk, in, reset,
output reg [1:0] out
);
// Регистр состояния
reg[1:0] state, next_state;
// Объявление состояний
parameter S0 = 0, S1 = 1, S2 = 2, S3 = 3;
// Выходы зависят только от состояний
always @ (state) begin
case (state)
S0:
out = 2'b01;
S1:
out = 2'b10;
S2:
out = 2'b11;
S3:
out = 2'b00;
default:
out = 2'b00;
endcase
end
// Формирование регистра состояния
always @ (posedge clk or negedge reset) begin
if (!reset)
state <= S0;
else
state <= next_state;
end
// Определение следующего состояния (логика переходов)
always @ (*) begin
case (state)
S0:
next_state = S1;
S1:
if (in)
next_state = S2;
else
next_state = S1;
S2:
if (in)
next_state = S3;
else
next_state = S1;
S3:
if (in)
next_state = S2;
else
next_state = S3;
endcase
end
endmodule
Листинг 1. Описание автомата Мура.
Разработчик может влиять на обработку синтезатором распознанного конечного автомата, задавая тип кодирования. Для этого используется параметр State Machine Processing, расположенный в меню Assignments -> Settings -> Analysis & Synthesis Settings -> кнопка More Settings... и может принимать следующие значения:
* Auto (значение по умолчанию) - компилятор сам выбирает лучший вариант кодирования для цифрового конечного автомата.
* One-Hot - единичное кодирование (каждое состояние представлено индивидуальным битом) или прямое кодирование с инвертированным младшим разрядом. Разрядность синтезируемого регистра состояния равна N.
* Minimal Bits - двоичное кодирование, использует минимально возможное количество бит для кодирования. Разрядность синтезируемого регистра состояния равна ceil(log2N), где N - количество состояний.
* Sequential - последовательное кодирование - вариант двоичного кодирования, при котором состояния нумеруются двоичным кодом подряд начиная с нуля.
* Gray - кодирование кодом Грея - аналогично последовательному, нумерация состояний кодом Грея.
* Johnson - кодирование кодом счетчика Джонсона. Разрядность синтезируемого регистра состояния равна N/2.
* User-Encoded - заданное пользователем кодирование, при этом используется разрядность регистра состояния и значения констант, заданные в исходном файле.
Приложение 2. Описание реализуемого конечного автомата
В лабораторной работе предлагается реализовать конечный цифровой автомат (КЦА или просто ЦА) некоего устройства (вычислителя). Рассматриваемое устройство по команде от управляющего устройства производит некоторые арифметические действия над операндами и возвращает результат. Предоставлением операндов и считыванием результатов тоже занимается управляющее устройство. Проанализировав совершаемые нашим устройством действия, можно построить его упрощенный граф состояний (см. рисунок 8). Позже, уяснив логику состояний, можно будет составить полный граф.
Рисунок 8. Упрощенный граф КЦА.
Идея работы конечного автомата
Идея работы рассматриваемого конечного автомата следующая.
Большую часть времени ЦА проводит в состоянии ожидания Idle, пока нет запроса на обработку данных. Запрос выставляется внешним управляющим устройством, и происходит это в 2 этапа:
1. Сначала выставляется адрес устройства, которое будет заниматься обработкой (некий идентификационный номер устройства). Это довольно удобно, когда много обрабатывающих устройств, и все они подключены к одной шине данных.
2. Выставляется непосредственно сам сигнал запроса обработки.
По приходе запроса на обработку осуществляется проверка выставленного на шину данных адреса с тем, что хранится в обрабатывающем устройстве. И если эта проверка проходит, то осуществляется переход в состояние анализа требуемой от устройства операции Analyse operation. Здесь с входа данных считывается код требуемой операции. По результатам анализа кода операции могут быть выполнены следующие действия:
* отправка результата;
* считывание операндов;
* обработка операндов.
Каждому действию соответствует свое состояние. Рассмотрим их более подробно.
Отправка результата. В данном состоянии в выходной порт данных записывается значение из регистра результата. Также данные как бы "накрываются" высоким уровнем сигнала tdv (transmit data valid), что символизирует готовность и достоверность данных.
Считывание операндов. Данное состояние обеспечивает считывание данных с входного порта. Надо обеспечить считывание одного или двух операндов, в зависимости от кода операции. Перед считыванием выставляется сигнал rdy (ready), который сообщает передающему устройству о готовности цифрового автомата к приему. Данный сигнал будем выставлять перед каждым считывание данных с входного порта.
Обработка операндов. Это состояние обеспечивает выполнение арифметических операций над операндами, таких как сложение двух операндов, вычитание второго из первого, сложение или вычитание операнда из значения, находящегося в регистре результата.
Таким образом, у рассматриваемого конечного автомата будут следующие входы и выходы:
* входы:
* clk - вход тактовых импульсов;
* ena - вход разрешения работы;
* rst - вход сброса (перехода в начальное состояние);
* cs - запрос обработки;
* datain - порт входных данных;
* выходы:
* tdv - подтверждение корректности выставленных данных;
* rdy - готовность к чтению данных;
* dataout - порт выходных данных.
Порты данных в рассматриваемом автомате будут 8-миразрядными, сигналы - одноразрядными.
Код операции. Немаловажным будет описание формата кода операции. Как вы, наверное, уже догадались, он состоит из двух основных частей: первая описывает варианты получения и отправки данных, а вторая - арифметические операции. Разрядность кода операции совпадает с разрядностью входных данных. Формат кода операции следующий (см. рисунок 9).
Рисунок 9. Формат кода операции.
Будем считать, что логика положительная, т.е. если мы хотим задействовать какое-то поле (бит), то должны записать в него 1. Для считывания одного операнда необходимо выставить бит 1, а для считывания двух операндов ‒ биты 1 и 2.
Смена состояний будет происходить по положительному фронту тактового импульса clk, если он разрешен высоким уровнем сигнала ena. Сброс в начальное состояние будет происходить синхронно с тактовым импульсом по низкому уровню входа rst, т.к. именно низкий уровень обладает большей помехозащищенностью в цифровых схемах (вспоминаем электронику и схемотехнику :)). Возможен и асинхронный вариант сброса по отрицательному фронту, но в данном примере рассматривается полностью синхронная схема.
Условия переходов
Теперь представляя себе работу конечного автомата, можно сформулировать условия переходов межу состояниями. Номера переходов взяты с рисунка Рисунок 7.
* Переход 2 осуществляется при одновременной установке низкого уровня на входе cs и значения 0F на входе datain.
* Переход 4 - установлена 1 в младшем разряде входа datain.
* Переход 6 - установлен 1й бит в коде операции (считывание 1го операнда).
* Переход 7 - установлен 2й бит в коде операции (считывание 2го операнда).
Остальные переходы осуществляться при невыполнении других условий (если из данного возможно несколько переходов), либо всегда по разрешенному тактовому импульсу.
1 В случае, если навигатор проекта не отображается, включите его, выбрав View -> Utility Windows -> Project Navigator
---------------
------------------------------------------------------------
---------------
------------------------------------------------------------
Документ
Категория
Рефераты
Просмотров
133
Размер файла
620 Кб
Теги
lab, 2012, fsm
1/--страниц
Пожаловаться на содержимое документа