Материал: Методические указания к выполнению лабораторных работ по дисциплине «Проектирование цифровых устройств в базисе ПЛИС» для студентов направления «Электроника и наноэлектроника». Строгонов А.В., Кошелева Н.Н

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Рис. 3. Диаграмма состояний конечного автомата

Пример проектирования автомата Мили (Mealy) с использованием пакета расширения Stateflow системы

Matlab/Simulink и САПР ПЛИС Xilinx ISE Design Suite.

Система Matlab/Simulink содержит встроенный генератор кода языка описания аппаратных средств HDL (Simulink HDL Coder. Simulink HDL Coder – программный продукт для генерации VHDL-кода без привязки к конкретной архитектуре ПЛИС и платформе по Simulink-моделям и графавтоматам (Stateflow-диаграммы).

Дополнительную информацию по применению системы

Matlab/Simulink с пакетом расширения Stateflow и САПР

Quartus II для разработки простейшего торгового автомата можно посмотреть в работе [3].

Разработаем имитационную модель 2-разрядного синхронного суммирующего счетчика. В дальнейшем такую схему будем называть конечный автомат. Входной сигнал EN на диаграмме переходов обозначается следующим образом: [EN==1]. Выходной сигнал MAX кодируется следующим образом:

{MAX=0} – счетчик находится в процессе счета;

4

{MAX=1} – счетчик досчитал до трех, “готов”. Квадратные скобки [] обозначают условие, фигурные {}

– действие по условию. Запись [EN==1]{MAX=0} говорит о том, что выход автомата Мили является функцией, как текущего состояния, так и начального внешнего воздействия, т.е. от сигнала EN.

Автомат может принимать четыре состояния (рис. 4): st0, st1, st2 и st3 в соответствии с рис. 3. На вход автомата EN задается тестовая последовательность из набора единиц. Для того чтобы извлечь VHDL-код из диаграммы переходов необходимо в свойствах диаграммы Properties (правый клик мышки) в поле Execute (enter) Chart At Initialization

поставить галочку (рис. 4г).

После того как, будет создана модель конечного автомата, необходимо выбрать численный метод решения системы дифференциальных уравнений. C помощью проводника модели (Model Explorer) выбираем дискретный метод решения (discrete) дифференциальных уравнений в настройках Solver и настраиваем генератор кода языка VHDL в меню HDL coder. Результат имитационного моделирования показан на рис. 4. На рис. 5 показано имитационное моделирование конечного автомата.

Пример 1 демонстрирует код автомата Мили с регистерным выходом на языке VHDL, полученный с использованием Simulink HDL Coder системы Matlab/Simulink.

Анализируя полученный VHDL-код в автоматическом режиме можно сделать вывод, что используется двухпроцессный шаблон описания конечного автомата и перечисляемый тип данных (Enumerated type) T_state_type_is_Chart, который описан в пакете USE work.Avt_pkg (пример 2).

Перечисляемый тип – это такой тип данных, при котором количество всех возможных состояний конечно. Такой тип наиболее часто используется для обозначений состояний конечных автоматов. Любой перечисляемый тип имеет внутреннюю нумерацию: первый элемент всегда имеет номер 0, второй - 1 и т.д. Первый оператор PROCESS со

5

списком чувствительности (clk, reset) описывает память состояний конечного автомата, а второй оператор PROCESS со списком чувствительности (is_Chart, En, MAX_reg) описывает логику переходов и логику формирования выхода.

Для того чтобы на базе этого кода создать проект в САПР ISE необходимо тип real относящийся к внешним сигналам En, MAX и внутренним MAX_1, MAX_reg, MAX_reg_next заменить на тип std_logic при этом также обеспечить замену 0.0 на '0' и 1.0 на '1' (пример 3). Далее необходимо разработать испытательный стенд (пример 4). На рис.6 показано функциональное моделирование конечного автомата.

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

 

USE IEEE.numeric_std.ALL;

 

 

USE work.Avt_pkg.ALL;

 

 

 

ENTITY Avt IS

 

 

 

PORT( clk

:

IN

std_logic;

reset

:

IN

std_logic;

clk_enable

:

IN

std_logic;

En

:

IN

real; -- double

ce_out

:

OUT std_logic;

MAX

: OUT

real -- double

);

 

 

 

END Avt;

 

 

 

ARCHITECTURE rtl OF Avt IS

 

-- Signals

 

 

 

SIGNAL enb

 

: std_logic;

SIGNAL is_Chart

 

: T_state_type_is_Chart; -- uint8

SIGNAL MAX_1

 

: real := 0.0; -- double

SIGNAL MAX_reg

 

: real := 0.0; -- double

SIGNAL is_Chart_next

 

: T_state_type_is_Chart; -- enumerated

type (4 enums)

 

 

 

SIGNAL MAX_reg_next

 

: real := 0.0; -- double

BEGIN

 

 

 

enb <= clk_enable;

Chart_process : PROCESS (clk, reset)

6

BEGIN

IF reset = '1' THEN MAX_reg <= 0.0; is_Chart <= IN_st0;

ELSIF clk'EVENT AND clk = '1' THEN IF enb = '1' THEN

is_Chart <= is_Chart_next; MAX_reg <= MAX_reg_next; END IF;

END IF;

END PROCESS Chart_process;

Chart_output : PROCESS (is_Chart, En, MAX_reg) BEGIN

is_Chart_next <= is_Chart; MAX_reg_next <= MAX_reg; CASE is_Chart IS

WHEN IN_st0 => IF En = 1.0 THEN

MAX_reg_next <= 0.0; is_Chart_next <= IN_st1; END IF;

WHEN IN_st1 => IF En = 1.0 THEN

MAX_reg_next <= 0.0; is_Chart_next <= IN_st2; END IF;

WHEN IN_st2 => IF En = 1.0 THEN

MAX_reg_next <= 0.0; is_Chart_next <= IN_st3; END IF;

WHEN OTHERS =>

IF En = 1.0 THEN MAX_reg_next <= 1.0; is_Chart_next <= IN_st0; END IF;

END CASE;

END PROCESS Chart_output; MAX_1 <= MAX_reg_next;

7

ce_out <= clk_enable; MAX <= MAX_1; END rtl;

Пример 1. Код автомата Мили с регистерным выходом на языке VHDL полученный с использованием Simulink HDL Coder системы Matlab/Simulink

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

USE IEEE.numeric_std.ALL; PACKAGE Avt_pkg IS

TYPE T_state_type_is_Chart IS (IN_st0, IN_st1, IN_st2, IN_st3); END Avt_pkg;

Пример 2. Пакет, в котором описан перечисляемый тип данных

T_state_type_is_Chart

LIBRARY IEEE;

 

 

 

USE IEEE.std_logic_1164.ALL;

 

USE IEEE.numeric_std.ALL;

 

 

USE work.Avt_pkg.ALL;

 

 

 

ENTITY Avt IS

 

 

 

PORT( clk

:

IN

std_logic;

reset

:

IN

std_logic;

clk_enable

:

IN

std_logic;

En

:

IN

std_logic;

ce_out

:

OUT std_logic;

MAX

:

OUT

std_logic);

END Avt;

 

 

 

ARCHITECTURE rtl OF Avt IS

 

-- Signals

 

 

 

SIGNAL enb

 

: std_logic;

SIGNAL is_Chart

 

: T_state_type_is_Chart;

SIGNAL MAX_1

 

: std_logic;

SIGNAL MAX_reg

 

: std_logic;

SIGNAL is_Chart_next

 

: T_state_type_is_Chart;

SIGNAL MAX_reg_next

 

: std_logic;

BEGIN

 

 

 

enb <= clk_enable;

Chart_process : PROCESS (clk, reset)

8

Источник: https://studfile.net/preview/16563550/