Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Altera / Плис

.pdf
Скачиваний:
85
Добавлен:
10.12.2013
Размер:
1.41 Mб
Скачать

-31-

12. Разработать схему сдвига 4-разрядного числа влево или вправо на 0, 1 или 2 разряда (свободные разряды заполняются 0).

Операнд вводится переключателями S6-S3, при сдвиге вправо число разрядов задается переключателями S2-S1, при сдвиге влево - переключателями S8-S7. Индикация результата на светодиодах: при отсутствии сдвига на L6-L3, при сдвигах -соответствующее изменение позиций влево или вправо. При неправильном задании (сдвиг на 3 позиции или одновременный сдвиг влево и вправо) - индикация "1" на всех светодиодах.

13. Разработать логическое устройство, реализующее при поступлении микрокоманды M=m2mlm0 следующий набор логических функций над двумя 2-разрядными операндами

А=а1а0 и В=b1b0:

 

инверсия А:

М = 000,

инверсия В:

М = 001,

конъюнкция:

М = 010,

дизъюнкция:

М = 011,

исключающее ИЛИ: М = 100,

равнозначность:

М=101.

Операнд А вводится переключателями S2-S1, операнд В - переключателями S4-S3, микрокоманда М - переключателями S8-S6. Результат выводится на светодиоды L2-L1. При поступлении неправильного кода М = 110 или 111 зажигается сигнал ошибки - светодиод L8.

14. Разработать логическое устройство, реализующее при поступлении микрокоманды M=m3m2m1m0 полный набор из 16 логических функций над двумя 2-разрядными операндами А=а1а0 и В=b1b0.

Операнд А вводится переключателями S2-S1, операнд В - переключателями S4-S3, микрокомандам - переключателями S8-S5. Результат выводится на светодиоды L2-L1.

15. Разработать схему вычитания (А-В) двух 4-разрядных операндов А = a3a2ala0 и В=bЗb2b1b0 с формированием знакового разряда N. Отрицательный результат представляется в дополнительном коде.

Операнд А вводится переключателями S4-S1, операнд В - переключателями S8-S5, результат выводится на светодиоды L4-L1, знаковый разряд N на светодиод L5.

16. Разработать схему умножения двух 4-разрядных операндов А = a3a2alaO и

В=bЗb2b1b0.

Операнд А вводится переключателями S4-S1, операнд В - переключателями S8-S5, результат выводится на светодиоды L8-L1.

Примечание, возможно выполнение вариантов заданий с выводом исходных операндов и(или) результата на 7-сегментные дисплеи c динамической индикацией.

-32-

РАБОТА 4

Проектирование последовательностных схем, временной анализ в системе Max+plusII Цель работы: освоение методики проектирования последовательностных схем с использованием платы Stend001, проектирование последовательностных схем и временной

анализ их функционирования с помощью системы MAX+plusII.

ВВЕДЕНИЕ

Последовательностными называются цифровые устройства, логическое состояние которых определяется комбинацией входных сигналов, поступивших как в настоящий, так и в предыдущие моменты времени. Таким образом, их текущее состояние зависит от последовательности поступления входных сигналов. Последовательностные устройства должны "помнить" ранее поступившие значения входных сигналов, поэтому в дискретной математике их называют конечные автоматы с памятью.

Основными типами последовательностных устройств, используемых в современных цифровых системах, являются регистры, счетчики и генераторы кодов. Регистром (хранения, сдвига) называется последовательностное устройство, выполняющее хранение поступившего операнда и его сдвиг (влево или вправо) на заданное число разрядов. Реверсивные регистры производят сдвиг поступившего операнда вправо или влево в зависимости от значения управляющего сигнала. Счетчиком называется последовательностное устройство, на выходе которого формируется число, соответствующее количеству поступивших на вход импульсов. Суммирующие счетчики формируют на выходе число, которое увеличивается на 1 при поступлении каждого следующего импульса. Вычитающие счетчики формируют на выходе число, которое уменьшается на 1 при поступлении каждого следующего импульса. Реверсивные счетчики работают в режиме суммирования или вычитания в зависимости от значения управляющего сигнала. Генератором кодов (числовых последовательностей) называется устройство, формирующее на выходе заданную последовательность кодов (двоичных чисел). Генераторы кодов могут быть реализованы на основе счетчиков или регистров.

Функциональное описание последовательностного устройства задается в виде таблицы переключений, отражающей состояние устройства в различные моменты времени, графа переходов или описания на специализированном языке высокого уровня (VHDL, AHDL, Verilog и другие).

Для реализации последовательностных устройств используются два возможных способа.

1. Сборка устройства из отдельных логических элементов (И-НЕ, ИЛИ-НЕ и других), триггеров (D-, RS-, Ж- и других) и стандартных функциональных узлов (регистры, счетчики). Этот способ применяется при разработке устройств, реализуемых на серийно выпускаемых микросхемах малой и средней степени интеграции, или при проектировании последовательностных блоков для сложнофункциональных устройств, реализуемых в виде заказных или полузаказных БИС, которые разрабатываются с использованием функциональных библиотек, содержащих логических элементы, триггеры и .

2. Создание устройства на базе программируемых логических интегральных схем (ПЛИС), в которых заданная логическая функция реализуется путем соответствующего программирования и соединения универсальных логических элементов и блоков, составляющих внутреннюю структуру ПЛИС.

Методы проектирования последовательностных устройств, ориентированные на первый способ их реализации, описаны в учебном пособии [1] и ряде других монографий. В настоящем практикуме описывается методика реализации последовательностных устройств на базе ПЛИС семейства FLEX 8000 компании Altera с использованием системы проектирования MAX+plusII.

-33-

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

Поскольку при работе на больших частотах период сигнала может быть сравним с задержкой распространения сигнала внутри схемы, важно определить предельную частоту, на которой устройство еще будет работать. Минимальный интервал времени, который может быть распознан схемой счета, называется разрешением. Он влияет на время реакции системы на произошедшее событие и является очень важным в системах управления. Система MAX+plusII позволяет после трансляции проекта осуществить временной анализ спроектированной схемы. Для этого в ее составе имеется специальное приложение - Timing Analyzer. Временной анализ может быть выполнен в одном из трех режимов:

анализ задержек распространения сигналов между входными и выходными точками схемы;

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

вычисление минимальной величины времени установки и удержания сигналов на входных выводах ПЛИС, необходимых для правильной работы триггеров, защелок и асинхронных ОЗУ.

Для временного анализа используется файл с расширение .snf, созданный при компиляции, а также системный файл с расширением .dmf, в котором хранится информация о параметрах ПЛИС фирмы Altera.

ОПИСАНИЕ ЗАДАЧИ

В данной работе рассмотрим блок программируемого 8-разрядного счетчика/таймера (рис.4.1). Он включает:

8-разрядный регистр данных с возможностью чтения/записи. При его переполнении (переходе с FF в 0) выставляется флаг запроса на прерывание, и если данное прерывание разрешено, микроконтроллер переходит к его обработке;

8-разрядный масштабирующий регистр (prescaler - предделитель);

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

Из этих регистров два обычно включаются в адресное пространство регистрового файла и становятся т.о. программно доступными для записи/чтения. Это регистр данных счетчика/таймера и регистр управления.

-34-

Рис.4.1. Блок программируемого счетчика/таймера Биты регистра управления блока счетчика/таймера имеют следующее назначение.

Бит

Назначение

 

 

 

TMR0.7.. TMR0.0

Регистр данных счетчика/таймера

 

 

 

T0ON

Флаг запуска/останова таймера ( 1 - таймер запущен, 0 - остановлен)

 

 

T0IF

Флаг запроса на прерывание от блока счетчика/таймера (1 -

есть запрос

на

 

прерывание, 0 - запроса нет)

 

 

 

Т0IF

Маска прерывания от блока счетчика/таймера

(1 - прерывание

разрешено,

0 -

 

запрещено)

 

 

 

T0CS

Выбор источника сигнала (1 - режим счетчика, 0 - режим таймера)

 

 

T0SE

Выбор уровня сигнала (1 - срез внешнего сигнала, 0 - фронт внешнего сигнала),

 

используется только в режиме счетчика (T0CS=1)

 

 

 

PSA

Включение предделителя (1 - выключен, 0 - включен)

 

 

PS2..PS0

Управление предделителем, позволяет установить отношение 1:2, 1:4, ..., 1:256.

 

Режим таймера. Режим таймера выбирается битом T0CS (T0CS=0). В режиме таймера регистр данных TMR0 инкрементируется в каждом машинном цикле (в работе в качестве машинного цикла принимается частота внешнего тактового генератора), если не установлен масштабирующий коэффициент.

Режим счетчика. Режим счетчика выбирается установкой бита T0CS (T0CS=1). В этом режиме регистр данных TMRO инкрементируется либо по фронту внешнего сигнала (в работе в качестве внешнего сигнала используется одна из кнопок макета), либо по срезу. Уровень сигнала устанавливается программно с помощью бита T0SE. Сброс бита T0SE в ноль устанавливает в качестве инкрементирующего сигнала фронт.

Предделитель. Масштабирующий коэффициент включается программно с помощью бита PSA. Сброс бита PSA (PSA=0) включает масштабирующий коэффициент. Предделитель программно недоступен. Если масштабирование включено, коэффициент деления устанавливается с помощью битов PS2..PS0. Код PS2..PS0 определяет ряд отношений (1:2, 1:4,..., 1:256) частот на входе и выходе делителя. При выполнении операции записи в регистр данных TMR0 внутреннее значение масштабирующего регистра сбрасывается в ноль.

-35-

Прерывание от блока счетчика/таймера. При переполнении регистра данных TMR0 (когда значение проходит от FF к 00) происходит установка флага T0IF запроса на прерывание от блока счетчика/таймера. Это прерывание может быть замаскировано с помощью бита маски T0IE. Если бит установлен (Т0IF=1), то прерывание разрешено и при возникновении запроса программа перейдет к его обработке. После обработки флаг запроса на прерывание должен быть сброшен программно.

Задержка срабатывания. В большинстве микроконтроллеров рассматриваемый блок в режиме счетчика стробирует внешний асинхронный сигнал внутренним синхросигналом. Схема синхронизации в данной работе исключена и не рассматривается в целях упрощения. При таком подходе в случае поступления внешнего сигнала (фронта или среза, в зависимости от установленного активного перепада) значение регистра данных инкрементируется не сразу, а только при совпадении тактовой сетки. Из-за этого возникает задержка срабатывания. При включенном масштабирующем коэффициенте, когда значение инкрементируется только после переполнения масштабирующего регистра в соответствии с установленным отношением, эта задержка еще увеличивается. В системах управления, в которых скорость реакции на внешнее воздействие имеет значение, эта задержка должна быть как можно меньше. Таким образом при синхронизации от внешнего источника тактовой частоты таймерный блок имеет некоторое минимальное разрешение. На основе временного анализа распространения сигнала это разрешение будет оценено по порядку величины.

ПОСЛЕДОВАТЕЛЬНОСТЬ РЕШЕНИЯ ЗАДАЧИ

Распределение ресурсов лабораторного макета. Для проверки функционирования разработанного устройства на аппаратуре распределим ресурсы лабораторного макета Stend001.

Предлагается текущее значение регистра TMR0 отображать на двух правых семисегментных индикаторах. На первом из них будем отображать программно недоступный масштабирующий регистр (при масштабирующем отношении меньше 1:32 старшая тетрада масштабирующего регистра не используется, индикатор будет отображать весь спектр значений).

Биты регистра управления T0ON, T0IE, T0CS, T0SE, PSA, PS2, PS1, PS0 будем задавать с помощью переключателей Swl..Sw8. Значение битов T0IF, T0IE, T0CS, T0SE, PSA, PS2, PS1, PSO будем отображать на линейке светодиодов Ledl..Led8.

Сигнал тактовой частоты будет поступать с генератора OSC, в режиме счетчика источником сигнала будет кнопка Keyl. Кнопка Кеу2 будет сбрасывать таймерный регистр TMRO, имитируя запись значения, а кнопка КеуЗ будет сбрасывать флаг запроса на прерывание TOIF.

При возникновении запроса прерывания (Т0IF=1) с помощью пьезодинамика формируется звуковой сигнал.

Декомпозиция и описание устройства. Устройство предлагается реализовать в виде иерархического проекта, все модули которого представляют собой текстовые файлы на языке AHDL. Для сокращения времени на выполнение данной работы все необходимые файлы проекта уже созданы. Их перечень и назначение модулей следующие:

Имя файла

Описание

Tmr0Block.tdf

Блок программируемого счетчика/таймера

din7. tdf

Дешифратор динамического семисегментного индикатора

Lab4.tdf

Интерфейс с платой, отображающий ресурсы на порты

 

исследуемого устройства

Примечание: при размещении файлов проекта в разных каталогах следует ввести пути поиска для компилятора используя Option | User Libraries, и добавить каталоги с вашими проектами.

-36-

Файл динамической индикации на 7 сегментный индикатор имеет следующий вид:

SUBDESIGN din7

(

-- Глобальный клок

clk: INPUT;

-- Входные тригеры, записанное значение отображается на индикатор

DI1[3..0], DI2[3..0], DI3[3..0]: INPUT; -- На индикатор

en1, en2, en3: OUTPUT; a,b,c,d,e,f,g: OUTPUT;

)

VARIABLE prescaler[8..0]: DFF;

Q1[3..0], Q2[3..0], Q3[3..0]: DFF;

qq[3..0]: DFF;

ww: MACHINE WITH STATES (WriteQ1, Idle1, WriteQ2, Idle2, WriteQ3, Idle3); BEGIN

DEFAULTS en1= vcc; en2= vcc; en3= vcc;

END DEFAULTS;

Q1[]= DI1[];

Q2[]= DI2[];

Q3[]= DI3[];

-- делитель prescaler[].clk= clk; prescaler[]= prescaler[]+ 1;

-- clk Q1[].clk= clk; Q2[].clk= clk; Q3[].clk= clk;

qq[].clk= clk; ww.clk= clk;

--machine state CASE WW IS

WHEN WriteQ1 => en1= gnd; qq[]= Q1[];

if prescaler[] == 0 then ww= Idle1;

else

ww= WriteQ1; end if;

WHEN Idle1 => qq[]= Q2[]; ww= WriteQ2;

WHEN WriteQ2 => en2= gnd; qq[]= Q2[];

if prescaler[] == 0 then ww= Idle2;

else

ww= WriteQ2; end if;

WHEN Idle2 => qq[]= Q3[]; ww= WriteQ3;

-37-

WHEN WriteQ3 => en3= gnd; qq[]= Q3[];

if prescaler[] == 0 then ww= Idle3;

else

ww= WriteQ3; end if;

WHEN Idle3 => qq[]= Q1[]; ww= WriteQ1;

WHEN OTHERS => ww= Idle3;

END CASE;

TABLE

--Таблица перекодировки

 

 

qq[]

=>

(a, b, c, d, e, f, g);

H"0"

=>

B"0000001";

H"1" =>

B"1001111";

H"2" =>

B"0010010";

H"3" =>

B"0000110";

H"4" =>

B"1001100";

H"5" =>

B"0100100";

H"6" =>

B"0100000";

H"7" =>

B"0001111";

H"8" =>

B"0000000";

H"9" =>

B"0000100";

H"A" =>

B"0001000";

H"B" =>

B"1100000";

H"C" =>

B"0110001";

H"D" =>

B"1000010";

H"E" =>

B"0110000";

H"F" =>

B"0111000";

END TABLE;

 

END;

 

-38-

Откроем основной файл tmr0block.tdf (командой File|Open из директории lаb4) и изучим приемы описания устройства.. Текст имеет следующий вид:

INCLUDE "MUX.INC";

SUBDESIGN TMR0BLOCK

(

:input; -- сигнал машинного цикла

CLK

T0CKI

:input; -- сигнал с внешнего вывода

-- регистр управления

T0ON

:input;

T0IE

:input;

T0CS

:input;

T0SE

:input;

PSA

:input;

PS[2..0]

:input;

T0IF

:output;-- флаг запроса на прерывание

-- шина данных

DATA[7..0] :input;

SET

:input;

-- содержимое регистров для отображения на дисплеях

PRSCLSB[3..0] :output;

TMR0MSB[3..0] :output;

TMR0LSB[3..0] :output;

)

 

VARIABLE

 

-- таймерный регистр

TMR0[7..0]

:DFF;

-- масштабирующий регистр

PRESCALER[7..0] :DFF;

SOURCE : NODE;

BEGIN

 

DEFAULTS

 

TMR0[].d = 0;

PRESCALER[].d = 0;

END DEFAULTS;

-- выбор источника сигнала масштабирующего счетчика

IF (T0CS == 1) THEN

SOURCE = T0CKI XOR T0SE;

ELSE

SOURCE = CLK; END IF;

PRESCALER[].clk = SOURCE; PRESCALER[].prn =VCC; --PRESCALER[].clrn = VCC;

PRESCALER[].d = PRESCALER[].q + 1; -- выбор источника сигнала таймера

IF (PSA == 0) THEN

 

 

TMR0[].clk

=

MUX(PRESCALER[].q,PS[2..0])WITH(WIDTH= 8, WIDTHS= 3);

ELSE

 

 

 

TMR0[].clk

=

SOURCE;

END IF;

 

 

 

--TMRO[].prn

= VCC;

 

--TMRO[].clrn = VCC;

 

IF (T0ON == 1) THEN

TMR0[].d = TMR0[].q + 1;

ELSE

TMR0[].d = TMR0[]. q;

END IF;

-- запись значения в таймерный регистр

!TMR0[].prn = SET AND DATA[];

-39-

!TMR0[].clrn = SET AND !DATA[];

!PRESCALER[].clrn = SET; -- при операциях записи в таймерный регистр содержимое масштабирующего регистра сбрасывается

-- установка флага запроса на прерывание при переполнении

IF (TMR0[].q == H"FF") THEN T0IF = VCC;

ELSE

T0IF = GND; END IF;

PRSCLSB[3..0]

= PRESCALER[3..0].q;

TMR0MSB[3..0]

=

TMR0[7..4].q;

TMR0LSB[3..0]

=

TMR0[3..0].q;

END;

В начале файла описывается интерфейс блока счетчика/таймера. Сравните описание интерфейса устройства с блок-схемой на рис.4.1 и обратите внимание на порты битов управления и источников тактовых сигналов. В разделе описания переменных найдем описание регистра данных (таймерного) и масштабирующего регистра. Для их реализации используются элементы библиотеки примитивов.

Изучите описание примитива DFF, используя справочную систему (Help IAHDL Elements Primitives IDFF).

Следует обратить внимание на то, что для промежуточной линии, сигнал которой является тактовым для масштабирующего регистра PRESCALER, создана отдельная переменная SOURCE типа NODE.

Из исходного текста видно, что простые мультиплексоры реализованы через оператор IF..THEN. Но для создания мультиплексора из 8 в 1 использована макрофункция библиотеки MUX+PLUS. Для этого в начале файла заголовок макрофункции включается с помощью директивы INCLUDE. Данная функция является параметризованной и при ее вызове помимо входных переменных необходимо задать значения параметров, что осуществляется с помощью конструкции WITH.

Реализация интерфейса. Для реализации и тестирования полученного устройства будем использовать плату Stend001. В рабочей директории находится файл Iab4.tdf, описывающий интерфейсное устройство. Это устройство служит для преобразования информации между блоком счетчика/таймера и ресурсами платы, выделенными для его обслуживания (см. выше).

-40-

Текст описания интерфейсного устройства имеет следующий вид:

TITLE "TIMERO BLOCK.";

INCLUDE "TMR0BLOCK.INC";

INCLUDE "DIN7.INC";

SUBDESIGN Lab4 (

Osc :input;

Key[3..1] :input;

Sw[8..1] :input;

Led[8..1] :output; Beep :output; a :output;

b :output; c :output; d :output; e :output; f :output; g :output; en1: output;

 

en2: output;

 

en3: output;

)

 

 

VARIABLE

 

 

TIMER0

:TMR0BLOCK;

 

Digit

:DIN7;

--

Digit [3..1] -.DECODE?;

 

Divider[18..0] :DFF;

 

INTCON

:DFF;

BEGIN

DEFAULTS

Divider[].d = 0;

INTCON.d =0;

END DEFAULTS;

Digit.clk= Osc;

--предварительный делитель частоты

--частоту тактового генератора мы делим, чтобы визуально наблюдать изменения таймерного регистра

--частоту подбираем следующим образом

--4 МГц : 400000 = 10 Гц или период 0.1 сек.

--для создания такого делителя нам необходим 19-разрядный регистр Divider[].clk = Osc; -- фронт тактового сигнала

Divider[].prn = VCC;

Divider[].clrn = VCC;

IF (Divider[].q == 399999) THEN

Divider[].d = 0;

ELSE

Divider[].d = Divider[].q + 1;

END IF;

TIMER0.CLK = Divider[18]; -- выход генератора тактовой частоты

TIMER0.T0CKI = !Key[1]; -- внешний выход

--регистр управления

--значения переключателей Sw инвертируются, т.к. уровень On низкий

--порядок битов соответствует общепринятому

(TIMER0.T0ON,TIMER0.T0IE,TIMER0.T0CS,TIMER0.T0SE,TIMER0.PSA,TIMER0.PS[2..0 ]) = !Sw[1..8];

-- регистр прерываний

Соседние файлы в папке Altera