21
elsif (urs='0' and dw='1' and ucu=,1' and ucd'event and ucd=,1') then if(z(0)='0' and z(1)='0' and z(2)='0' and z(3)='0') then wpd<='1'; end if; z <= z - 1 ; end if;
end process N;
q1<=z(0); q2<=z(1); q3<=z(2); q4<=z(3); end ie7;
1.3. Схема генератора пачки импульсов в ACTIVE-VHDL
Для завершения проекта необходимо синтезировать схему ОА и объеди-
нить ее с УА. Так как формальных методов синтеза операционных автоматов нет, то поиск схемы ОА и объединение УА и ОА в общую схему устройства полностью выполняется проектировщиком.
Для поиска схемы ОА необходимо для каждой переменной, которая полу-
чает значения в операторах ГСА, выписать все наборы операций, в результате выполнения которых переменной присваиваются значения. Анализируя наборы операций для каждой переменной, мы можем определить вид операционного устройства. Если используемые при проектировании серии микросхем не со-
держат готовых операционных устройств, то выполняется их разработка.
В нашем примере имеется единственная переменная СТ, которая получа-
ет значения в результате выполнения операторов алгоритма. В ГСА содержатся две операции с этой переменной: присваивание ей значения с шины данных
(CT=D) и вычитание единицы (СТ=СТ-1). Эти операции могут быть реализова-
ны на вычитающем счетчике со входом параллельной записи данных. Если мы возьмем микросхемы 155-й серии, то точно такого устройства не обнаружим,
но эта серия содержит реверсивный счетчик 155ИЕ7. Модель такого счетчика уже реализована. Он обеспечивает параллельную запись 4-х разрядного двоич-
ного кода и работает в режиме вычитания при подаче на вход суммирования высокого уровня напряжения (уровень 1).
Кроме того в операционном автомате необходимо сформировать сигнал СТ=0 равенства нулю содержимого счетчика - его можно получить на элементе
22
4ИЛИ-НЕ.
При объединении УА и ОА следует обеспечить формирование счетных импульсов (ведь УА формирует только сигнал разрешения вычитания СТМ1, а
не сами счетные импульсы).
Полная схема устройства в обозначениях Active-VHDL приведена на рис.
27. УА на схеме показан на структурном уровне. Сигнал разрешения парал-
лельной записи подается на вход W счетчика через инвертор, так как УА фор-
мирует высокий уровень сигнала (1), а в счетчике активным является низкий уровень (0). Значение СТ0 получаем, объединив выходы счетчика на элементе
4ИЛИ-НЕ. Счетные импульсы формируем на выходе элемента 3И-НЕ. На один из его входов поступает сигнал разрешения вычитания из УА (СТМ1), на вто-
рой тактовые импульсы и на третий - инвертированный сигнал СТО. Послед-
ний запрещает прохождение счетных импульсов на вход счетчика при дости-
жении им состояния 0000, что исключает возможные гоночные ситуации в схе-
ме. Инвертированные счетные импульсы служат выходом генератора - той са-
мой пачкой импульсов, которую необходимо сформировать, на схеме она на-
звана imp.
23
После преобразования схемы в VHDL-текст и ее компиляции выпол-
ним моделирование генератора. Результаты моделирования приведены на
рис. 28.
В счетчик последовательно записывались значения пять, (0101), один
(0001), пятнадцать (1111) и ноль (0000). Затем подавалась команда ПУСК.
Модель устройства правильно отработала все режимы.
Если предполагается реализация управляющего автомата на програм-
мируемых логических интегральных схемах (ПЛИС), то нет необходимости описывать автомат как композицию функционального преобразователя и ре-
гистров, а описать на VHDL непосредственно его таблицу переходов и вы-
ходов. Ниже приведены тексты описаний автоматов Мили и Мура для рас-
сматриваемого примера.
Вопросы:
1Создать блоки модели Мура.
2Создать блоки операционной части устройства и протестировать его функ-
ционирование.
3Создать блоки схемы генератора пачки импульсов и протестировать его функционирование.
4Какие из обеспечений САПР задействованы для выполнения задания.
24
Практическое занятие 3. Описание автоматов
3.1. Управляющий автомат по структуре Мили
-- File : uagpi_mili.vhd -- Generated
library IEEE; -- Стандартное описание подключаемых библио-
тек use IEEE.STD_LOGIC_1164.all;
-- Объявление элемента, перечисляются его входы и выходы -- Не забудь-
те вход тактирования и начальной установки (в примере входы с и rs) entity uagpi_mili is port(
wd, pusk, ct0, c, rs : in STD_LOGIC; dst, ctm1 : out STD_LOGIC); end uagpi_mili;
--Далее следует описание архитектуры architecture uagpi_mili of uagpi_mili is
type T_st is (s1,s2,s3); -- объявляется перечислимый тип T_st,
--включающий множество имен состояний автомата signal st, next_st :T_st; -- Объявляются внутренние переменные типа T_st -- st -
текущее состояние автомата и -- next_st - состояние перехода begin
NS: process (st,wd, pusk, ct0, c, rs) begin
if (rs=T) then -- Начальная установка автомата: выходы принимают
-- значение 0, автомат устанавливается в состояние si dst<='0'; ctm1<=,0'; st<=s1; next_st<=s1;
-- Далее переходы автомата по фронту тактового импульса elsif ( c'event and c='1') then -- так на VHDL выделяется фронт импульса case st is
-- Переключатель
when s1=> -- Переходы из состояния s1
-- Обратите внимание, что в УА Мили значения -- вы-
ходным переменным присваиваются в момент перехода if (wd=T) then next_st<=s2; dst<='1'; ctm1<='0'; elsif (wd='0' and
25
pusk='0')
then next_st<=s1; dst<='0'; ctm1<='0'; elsif (wd='0' and pusk-1' and ct0='1')
then next_st<=s1; dst<='0'; ctm1<='0'; elsif (wd='0' and pusk-1' and ct0='0')
then next_st<=s3; dst<='0'; ctm1<='1'; end if;
when s2=> -- Переходы из состояния s2 if (wd='1')
then next_st<=s2; dst<='0'; ctm1<='0'; elsif (wd='0') then next_st<=s1; dst<='0'; ctm1<='0';
end if;
when s3=> -- Переходы из состояния s3 if (ct0='0')
then next_st<=s3; dst<='0'; ctm1<='1'; elsif (ct0='1') then next_st<=s1; dst<='0'; ctm1<='0';
end if;
end
case; st<=next_s t; end if; end process
NS; end uagpi_mili;
3.2. Управляющий автомат по структуре Мура
-- Title : gpimr - File : gpimr.vhd --{entity {gpimr} architecture {gpimr}}