
Altera / Плис
.pdf-41-
--управляется не тактовым сигналом а портами ргп и clrn
--установка производится запросом на прерывание от таймера
--сброс осуществляется с помощью кнопки КеуЗ
INTCON.d |
= GND; |
|
INTCON.clk |
= GND; |
|
INTCON.prn |
= |
!TIMER0.T0IF; |
INTCON.clrn = |
Key[3]; |
--запись значения в таймерный регистр (сброс таймера) TIMER0.SET = !Key[2];
TIMER0.DATA[7..0] = H"00";
--вывод содержимого регистров на дисплеи через дешифраторы
Digit.DI1[] = TIMER0.PRSCLSB[]; Digit.DI2[] = TIMER0.TMR0MSB[]; Digit.DI3[] = TIMER0.TMR0LSB[]; a= Digit.a;
b= Digit.b; c= Digit.c; d= Digit.d; e= Digit.e; f= Digit.f; g= Digit.g;
en1= Digit.en1; en2= Digit.en2; en3= Digit.en3;
--уровень сигнала, при котором загораются светодиоды низкий, поэтому значения флагов инвертируются
--порядок следования битов обратный, что соответствует общепринятому
--первый светодиод линейки загорается при установке флага запроса на прерывание
Led[1..8] = (!INTCON.q,Sw[2..8]);
--при возникновении запроса на прерывание возникает зуммер
--если данное прерывание разрешено (незамаскировано)
--в качестве сигнала выбрана линия 14 входного делителя, что соответсвует
--частоте звучания 250 Гц
--сброс запроса на прерывание осуществляется нажатием кнопки КеуЗ
Beep = INTCON.q AND Divider[14] AND !Sw2;
END;
Следует обратить внимание, что некоторые входные и выходные сигналы предварительно инвертируются и задаются в обратном порядке (относительно определения), что связано с особенностью внешних ресурсов платы и их расположением (см. Приложение
1).
На плате имеется генератор, формирующий синхросигнал с частотой 4 МГц, но прямо использовать эту частоту в режиме таймера невозможно из-за слишком быстрого изменения результатов на индикаторах. Поэтому на исследуемый таймерный блок подается сигнал с предварительного делителя частоты, имитирующего тактовую сетку микроконтроллера и также реализованного на ПЛИС. Делитель рассчитан таким образом, чтобы входной тактовый сигнал в режиме таймера (бит регистра управления T0CS=0) имел частоту 10 Гц. Внутренняя линия делителя частотой 250 Гц используется для формирования звукового сигнала при возникновении незамаскированного запроса на прерывание (T0IF=1, T0IE=1).
В качестве источника сигнала в режиме счетчика используется сигнал от кнопки Keyl. Следует обратить внимание, что поскольку уровень сигнала при нажатой кнопке низкий (см. Приложение1), то значение этого сигнала предварительно инвертируется.
-42-
По той же причине инвертируются сигналы от переключателей Swl..8, задающие значения битов регистра управления. Таймерный блок использует регистр управления только на чтение, за исключением флага запроса на прерывание Т0IF, поэтому для реализации битов регистра управления мы воспользовались переключателями. Однако, для реализации флага запроса на прерывание создан регистр (в исходном тексте обозначен как INTCON). От таймерного блока поступает только линия запроса на прерывание, значение которой необходимо защелкнуть в регистр и хранить там до тех пор, пока процедура обработки прерывания не сбросит данный флаг (в работе это осуществляется с помощью кнопки КеуЗ). Регистр INTCON не имеет тактового сигнала, установка значения в этом регистре осуществляется с помощью порта prn, а сброс с помощью порта clrn. На этапе трансляции компилятор выдаст предупреждение об этом. Для записи значения в таймерный регистр используется кнопка Кеу2, по которой значение счетчика сбрасывается.
На линейке светодиодов отображаются биты регистра управления. Вместо бита T0ON на светодиоде Ledl выводится значение флага запроса на прерывание. При возникновении прерывания в случае, когда оно незамаскировано, появится сигнал зуммера. Для выполнения работы необходимо установить в качестве имени текущего проекта lab4. Для этого выберем в меню пункт FileProject | Name и в диалоговом окне выберем имя lab4. Выполним трансляцию проекта с помощью приложения Compiler, предварительно установив опцию Total Recompile в меню Processing. Для успешной трансляции проекта необходимы не только исходные файлы (с расширением .tdf), но и головной файл конфигурации проекта, имя которого совпадает с именем головного исходного файла, а расширением является .acf. При создании нового проекта этот файл создается системой автоматически и содержит как настройки проекта, так и назначение выводов микросхемы портам интерфейса создаваемого устройства. Для назначения семейства ПЛИС и функций выводов необходимо воспользоваться командами Assign|Device и Assign|Pin/Location/Chip. Назначение выводов рассматривалось в предыдущей работе. В данной работе для уменьшения времени выполнения проект уже содержит конфигурационный файл Lab4.acf, в котором все необходимые назначения уже выполнены. Для того чтобы система считала настройки из данного файла, необходимо при задании имени проекта в диалоговом окне File|Project|Name установить флажок Show Only Tops of Hierarchies и выбрать в качестве имени проекта Lab4.
Поскольку данной работе создается иерархический проект, для его трансляции необходимо иметь заголовочные файлы (*.inc) всех исходных файлов нижнего уровня. Подключение файлов нижнего уровня производится с помощью директивы INCLUDE в головном исходном файле. В директиве указывается имя включаемого заголовочного файла. Для создания заголовочного файла необходимо открыть исходный файл и указать его в качестве текущего проекта, выбрав в меню пункт File|Project|Set Project To Current File. После этого необходимо выбрать пункт меню File|Create Default Include File. Если интерфейс исходного файла не изменяется, то обновлять включаемый файл не нужно. В данной работе все необходимые заголовочные файлы уже созданы. Подключим питание к Stend001, откроем приложение Programmer и загрузим код конфигурации в ПЛИС.
Тестирование устройства. Сразу после загрузки кода конфигурации в ПЛИС устройство начнет работать. При создании рабочих программ для реальных систем управления придерживаются следующей последовательности действий, которую мы и воспроизведем во время теста:
1. Установим начальные значения регистра управления. Для этого отключим блок счетчика/таймера, сбросив бит T0ON (установив переключатель Swl макета в положение Off). При этом какой бы режим блока счетчика/таймера не был установлен, поскольку значение таймерного регистра (данных) не инкрементируется, запроса на прерывание не возникает, и рабочая программа микроконтроллера будет передавать управление только программно. Обычно такое значение устанавливается в микроконтроллерах при включении питания (по умолчанию), значения остальных битов регистра управления могут быть неопределенными.
-43-
2.Замаскируем прерывание от блока счетчика/таймера, сбросив бит ТОГЕ (Sw2). Прерывание всегда необходимо маскировать до окончания программирования блока, в противном случае может произойти нежелательный вызов процедуры обработки прерывания.
3.Выберем источник сигнала для блока счетчика/таймера. Для этого воспользуемся битом TOCS (с помощью переключателя Sw3 установим либо режим счетчика - On, либо режим таймера Off). Если установлен режим счетчика внешнего сигнала (в работе он поступает от кнопки Keyl), то выставим активный уровень сигнала с помощью бита TOSE (переключатель Sw4 в положении On - срез, Off - фронт). Если используется режим таймера, то значение бита TOSE не имеет значения.
4.Выберем значение коэффициента деления (масштабирующего коэффициента) с помощью битов PS2..PS1 (переключатели Sw5..Sw8). Если масштабирующий регистр не будет использоваться, что определяется битом PSA (переключатель Sw5 положении On), то установленное значение игнорируется, хотя как видно из рис.4.1, масштабирующий регистр все равно будет инкрементироваться и это будет видно на индикаторе 1. Если необходимо включить масштабирование, то бит PSA должен быть сброшен (переключатель Sw5 установлен в положение Off).
5.Если прерывание блока счетчика/таймера будет обрабатываться в гипотетической программе микроконтроллера, то необходимо разрешить его. Для этого необходимо установить бит Т0IF=1 (переключатель Sw2 в положение On). Но если в этот момент флаг запроса на прерывание T0IF уже установлен, программа сразу перейдет к процедуре обработки прерывания. Для того, чтобы нежелательный переход не произошел, необходимо перед разрешением прерывания сбросить флаг запроса. Для этого необходимо воспользоваться кнопкой КеуЗ.
6.Теперь все готово, можно запустить счетчик/таймер (установить Swl в положение On) и наблюдать на индикаторах результаты его работы.
Для полного тестирования блока счетчика/таймера необходимо повторить пункты 1-6, перебирая все возможные режимы. Необходимо проверить различные источники сигнала. В случае внешнего источника сигнала необходимо проверить срабатывание таймера от разных активных уровней. При этом в одном случае инкремент значения будет происходить при нажимании кнопки, а в другом при отпускании. Следует отметить, что в целях упрощения работы не рассматривалась схема защиты от дребезга, который возникает при нажатии кнопки. Этот эффект выражается в том, что при нажатии (отпускании) кнопки внешнего тактового сигнала значение таймера может инкрементироваться сразу на несколько значений. Такой эффект является нежелательным в реальных системах, его подавляют с использованием программных или аппаратных средств.
Далее необходимо проверить работу масштабирующего регистра. Для этого следует, изменяя значения PS2..PSO, добиться различной скорости работы блока счетчика/таймера.
После этого, разрешив прерывание, дождаться переполнения таймерного регистра. При этом загорится светодиод Ledl (крайний левый) и раздастся звуковой сигнал. Флаг запроса на прерывание сбрасывается с помощью кнопки КеуЗ.
Проверить процедуру сброса значения таймерного регистра (данных) при нажатии кнопки Кеу2. Следует обратить внимание, что при записи любого значения (в работе всегда
0)в таймерный регистр значение масштабирующего регистра сбрасывается.

-44-
Временной анализ и определение временных задержек распространения сигнала.
Для проведения временного анализа устройства необходимо провести компиляцию проекта с выделением временной информации. Для этого необходимо убедиться, что в качестве текущего проекта установлен головной файл lab4. После этого открыть приложение
Compiler, включить опцию Timing SNF Extractor (меню Processing) и запустить процесс компиляции. После успешного завершения компиляции все готово к проведению временного анализа.
Запустите приложение Timing Analyzer (меню MAX+plus II), укажите тип анализа и определите цепи проекта (nodes), временные задержки между которыми должны измеряться. Для выбора типа анализа используется меню команды Analysis. Для задания цепей (сигналов) служит меню команды Node, при помощи которого вводятся имена интересующих сигналов. Выбранные имена будут отображаться на заголовках строк и столбцов матрицы задержек.
Для запуска процедуры анализа необходимо в окне анализатора щелкнуть указателем мыши по панели Start. По результатам анализа будет сформирована и отображена матрица задержек, на пересечении каждой строки и столбца будет указано время распространения сигнала.
При выборе в качестве типа анализа пункта меню Analysis|Registered Performance можно определить предельную частоту, на которой устройство способно работать. Выполнив анализ, и выбрав в выпадающем списке порт Keyl, который в работе является источником внешнего сигнала, мы найдем предельную частоту сигнала от внешнего источника, при которой таймерный блок работает правильно (рис.4.2.)
Рис.4.2. Результаты расчета быстродействия устройства
Следует отметить, что временной анализ имеет смысл только после процедуры размещения/трассировки и назначения ресурсов ПЛИС реализуемому устройству. В работе этой процедуре подвергалось устройство, включающее не только блок счетчика/таймера, но и блок интерфейса. Кроме того, определенные выводы ПЛИС на плате лабораторного макета заранее подключены к определенным внешним устройствам. При таких условиях процедура размещения получила жесткие ограничения и временные параметры (быстродействие) нашего устройства снизилось.
-45-
ЗАДАНИЯ
1. Изменить исходный текст таким образом, чтобы сделать таймерный блок реверсивным. При этом значение таймерного регистра при сбросе должно инициализироваться значением FF, вместо инкремента должен выполняться декремент, а флаг запроса на прерывание должен выставляться при прохождении значения от 0 к FF (underflow).
2.Дополнить таймерный блок функцией захвата-сравнения (Capture-Compare). Для этого предлагается изменить назначение бита TOON, который будет задавать режим блока (1
-захват сигнала, 0 - сравнение). В режиме захвата по сигналу от кнопки Кеу2 значение таймерного регистра должно фиксироваться в регистре захвата. В режиме сравнения регистр захвата содержит некоторую константу, которая заносится на этапе конфигурации микросхемы. По кнопке Кеу2 таймерный блок начинает считать сигнал с нуля. При совпадении значений таймерного регистра и регистра сравнения таймер останавливается и возникает запрос на прерывание. Значение занесенной на этапе конфигурации константы в регистр сравнения можно наблюдать на дисплеях таймерного регистра, поскольку значения совпадают.
3.Разработать реверсивный 4-разрядный кольцевой регистр сдвига с параллельным вводом данных. Режим работы задается микрокомандой М = mlmO: хранение при m1m0=00, ввод данных при mlm0=ll, сдвиг вправо при mlm0=01, сдвиг влево при m1m0=10.
Вводимые данные устанавливаются переключателями S4-S1, микрокоманда М - переключателями S8-S7, вывод результата на светодиоды L4-L1. Сигналы ввода - сдвига подаются нажатием кнопки К1.
4.Разработать счетчик с переменным модулем счета Кс = 10/11 и предварительным сбросом в 0. Модуль счета задается управляющим сигналом М: Кс=10 при М=0, Кс=11 при М=1.
Сигнал управления М устанавливается переключателем S8. Сброс счетчика в состояние 0000 производится при нажатии кнопки К1, счет - при нажатии кнопки К2. Результат выводится на светодиоды L4-L1, светодиод L8 указывает режим работы (значение сигнала М).
5.Разработать двоично-десятичный счетчик с модулем счета Кс = 100 (две декады) и предварительным сбросом в 0.
Сброс счетчика в состояние 00000000 производится при нажатии кнопки К1, счет - при нажатии кнопки К2. Результат выводится на светодиоды L4-L1 - младшая декада, светодиоды L8-L5 - старшая декада.
Возможный вариант - включение звукового сигнала при содержимом счетчика более 9 (переход ко второму десятичному разряду). Разрешение подачи звукового сигнала путем установки переключателя S1.
6.Разработать генератор последовательности чисел от 0 до 9 в прямом коде и коде "с избытком 3". Режим работы задается управляющим сигналом М: прямой код при М=0, код "с избытком 3" при М=1.
Сигнал управления М устанавливается переключателем S8. Сброс генератора в состояние 0000 производится при нажатии кнопки К1, генерация очередного числа - при нажатии кнопки К2. Результат выводится на светодиоды L4-L1, светодиод L8 указывает режим работы (значение сигнала М).
-46-
7.Разработать генератор последовательности чисел от 0 до 63 в прямом и дополнительном коде. Режим работы задается управляющим сигналом М: прямой код при М=0, дополнительный код при М=1.
Сигнал управления М устанавливается переключателем S8. Сброс генератора в состояние 000000 производится при нажатии кнопки К1, генерация очередного числа -при нажатии кнопки К2. Результат выводится на светодиоды L6-L1, светодиод L8 указывает режим работы (значение сигнала М).
8.Разработать генератор последовательностей 4-битовых кодов (0-3-5-8-3-11-15-3 - 12
-8 - 10 - 6 -) и (1 - 3 - 5 - 8 - 3 - 7 - 10 - 6 - 4 - 3 -) и контролем числа сформированных последовательностей (до п=7). Выбор последовательности задается управляющим сигналом М: 1-я последовательность при М=0, 2-я последовательность при М=1.
Сигнал управления М устанавливается переключателем S8. Сброс генератора в исходное состояние (0000 при М=0, 0001 при М=1) производится при нажатии кнопки К1, генерация очередного кода - при нажатии кнопки К2. Результат выводится на светодиоды L4-L1. Светодиоды L8-L6 указывают число п сформированных последовательностей каждого вида: п=0 устанавливается при сбросе в исходное состояние и каждом изменении значения М, значение п увеличивается на 1 после завершения очередной последовательности (перехода к исходному состоянию).
Возможный вариант - выдача звукового сигнала с помощью пьезоизлучателя, если значение п превысит 7.
9.Разработать электронный секундомер, обеспечивающий индикацию секунд и
минут.
Сброс секундомера по нажатию кнопки К1, запуск по нажатию кнопки К2. Индикация числа секунд светодиодами L6-L1, минут - светодиодами L8-L7. Возможный
вариант - индикация числа секунд индикаторами D2-D1, минут -индикатором D3.
10. Разработать таймерный блок, формирующий выходной сигнал Q=l в заданный момент времени со звуковой индикацией. Время формирования определяется совпадением содержимого таймера X и заданного значения Y.
Значение времени Y задается в пределах 10-30 секунд и устанавливается с помощью переключателей S8-S1. Его значение выводится на светодиоды L8-L1 или индикаторы D3D1. Формирование сигнала Q=l фиксируется звуковым сигналом пьезоизлучателя. Звучание пьезоизлучателя обеспечивается с помощью генератора сигналов звуковой частоты, реализованного на используемой в макете ПЛИС.
11. Разработать звуковой генератор с программируемой частотой, использующий пьезоизлучатель. Реализовать 8 значений частоты звука, кратные двум (коэффициенты деления 1 - 2 - 4 - 8 - 16 - 32 - 64 - 128) в диапазоне 500 Гц - 5 кГц.
Коэффициент деления устанавливается переключателями S3-S1, значения частоты индицируются с помощью светодиодов L8-L1 или 7-сегментных индикаторов D3-D1. Включение генератора осуществляется нажатием кнопки К1.
12. Разработать звуковой генератор переменной частоты, использующий пьезоизлучатель. Период звучания программируется в пределах от 1 до 15 с, диапазон частот 500 - 5000 Гц, число градаций частоты не менее 20 (частота звука постепенно меняется за время периода звучания)
Период звучания устанавливается переключателями S4-S1, текущее значение частоты (три старших десятичных разряда) индицируется с помощью 7-сегментных индикаторов D3D1. Включение генератора осуществляется нажатием кнопки К1.
-47-
13. Разработать реверсивный счетчик с модулем счета Кс=16 и предварительной записью данных и индикацией переполнения. Режим работы задается управляющим сигналом М: прямой счет при М=0, обратный счет при М=1.
Вводимые данные устанавливаются переключателями S4-S1, сигнал управления М устанавливается переключателем S8. Ввод данных производится при нажатии кнопки К1, счет - при нажатии кнопки К2. Результат выводится на светодиоды L4-L1. Переполнение фиксируется зажиганием светодиода L8 при переключении счетчика в состояние 0000 при прямом счете, в состояние 1111при обратном счете.
Возможный вариант - выдача при переполнении звукового сигнала с помощью пьезоизлучателя.
Примечание, возможно выполнение вариантов заданий 1-7 с выводом результата на 7-сегментные дисплеи.
-48-
Приложение 1. Структура и основные характеристики ПЛИС компании Altera.
Компания Altera выпускает широкую номенклатуру ПЛИС, отличающихся структурой и степенью интеграции, которые обеспечивают возможности эффективной реализации комбинационных и последовательностных устройств различного назначения. В настоящем лабораторном практикуме используются ПЛИС типа EPF8282A семейства Flex8000. В состав этого семейства входят 13 типов ПЛИС, имеющих степень интеграции от 5000 до 32000 эквивалентных вентилей.
ПЛИС типа EPF8282A содержит 5000 эквивалентных логических вентилей. Структура этой ПЛИС приведена на рис. П1.1. В состав ПЛИС входят 26 логических блоков LAB (Logic Array Block), которые размещены на кристалле в виде матрицы, содержащей 2 строки (А и В) и 13 столбцов. Каждый блок LAB содержит 8 логических элементов LE (Logic Element), соединяемых между собой программируемой локальной матрицей соединений (ЛМС). Таким образом данная ПЛИС содержит 208 элементов LE. Соединения между блоками LAB и подключение буферных элементов ввода-вывода IOE (Input-Output Element) выполняется с помощью программируемой глобальной матрицы соединений (ГМС). В состав элементов LE и IOЕ входят синхронизируемые фронтом D-триггеры, общее число которых составляет 282.
При проектировании реальных цифровых устройств коэффициент использования элементов составляет около 50%, поэтому на базе этой ПЛИС можно реализовать устройства, сложность которых эквивалентна 2500 логических вентилей.
Базовые логические элементы
Схема базового элемента LE показана на рис. П1.2. Основные логические функции выполняются программируемым логическим модулем (ПЛМ), который реализован на базе мультиплексера. В зависимости от типа проектируемого устройства ПЛМ программируется на выполнение любой заданной логической функции четырех переменных D1-D4 (один универсальный модуль УМ-4) или используется для выполнения двух логических функций трех переменных (два универсальных модуля УМ-3), как показано на рис. П1.3. Выбор выполняемых ПЛМ функций осуществляется подачей определенной комбинации электрических сигналов, поступающих от внутреннего ОЗУ, содержимое которого определяет конфигурацию и функции, реализуемые ПЛИС. Соответствующее содержимое заносится в это ОЗУ в процессе предварительного программирования ПЛИС.
В состав элемента LE входит также синхронизируемый фронтом D-триггер со схемами синхронизации и предварительного (асинхронного) сброса-установки. Ко всем 8 элементам LE, входящим в состав одного логического блока LAB, подведены четыре общих локальных управляющих сигнала LC1-LC4 (рис. П1.2). В качестве синхросигнала может быть использован один из сигналов LC3, LC4. Сигналы LC1, LC2 совместно с одной из логических переменных D3 служит для формирования сигналов асинхронного сброса Ra и установки Sa для D-триггера (рис. П1.2). Различные варианты выбора синхросигнала и формирования сигналов Ra, Sa реализуются с помощью программируемых мультиплексеров (ПМ), которые выбирают тот или иной вариант выходного сигнала в зависимости от управляющего (программмирующего) сигнала, поступающего от внутреннего ОЗУ, содержимое которого задает требуемую конфигурацию ПЛИС.

-49-
Рис. П1.1. Структура ПЛИС типа EPF8282A.

-50-
Рис. П1.2. Схема базового элемента LE