Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MPS_kaf12_8 / MPS_kaf12_8.doc
Скачиваний:
114
Добавлен:
27.03.2016
Размер:
3.27 Mб
Скачать

2.1. Пример подготовки к выполнению лабораторной работы

Схемы подключения АЛУ к элементам стенда зависят от варианта задания. Общим в них является то, что обмен с МК может выполняться только через порт Р4 и через системную шину. Способы подключения сигналов из ПЛИС к порту Р4 описаны в разд. 1.4. Напомним только, что выходы порта Р4 соединяются с контактами ПЛИС, причем с теми же контактами, через которые могут выводиться сигналы на индикаторы А и В (см. табл.1.3).

В качестве примера рассмотрим вариант тестирования некоторого АЛУ. Над целыми числами в обратном коде АЛУ выполняет операцию умножения (результат – 8-разрядный) и операцию сложения с формированием признаков: 0 – сумма равна нулю, 1 – сумма меньше нуля, 2 – сумма больше нуля, 3 – переполнение.

На ПЛИС размещается схема АЛУ, имеющая внешние входы операндов А и В, вход кода операции (KOP), вход сигнала начала операции (SNO), тактовый вход и вход начальной установки (RESET). Выходами АЛУ кроме результата операции и признаков выполнения операции сложения является также сигнал конца операции (SKO).

Порт Р4 используем только для ввода-вывода битовых сигналов. Система будет иметь два режима работы: режим тестирования по периодическому анализу сигнала готовности (запуска) и режим автоматического тестирования.

МК должен выдавать на ПЛИС (АЛУ) сигнал SN0, реагировать на сигнал готовности и на сигнал SKO. Особенность создаваемой системы состоит в том, что и схема на ПЛИС, и сам МК – синхронные схемы, работающие от тактового сигнала. Хотя на УЛС обе части системы работают от одного генератора, но в ПЛИС длительность такта равна одному периоду сигнала С с генератора, а в МК частота генератора делится на 12 и длительность такта там равна 12 периодам сигнала С.

Сигнал SNO формируется, естественно, в МК битовыми командами setb и clr, и длительность его не может быть меньше одного такта синхронизации МК. А для АЛУ этот сигнал должен по длительности равняться одному такту С и быть активным в момент переднего фронта сигнала С. Для привязки сигнала SNO к таковым сигналам используется готовая схема, показанная на рис. 2.1.

При поступлении входного («длинного») сигнала SNOIN (Р4х) от МК триггер Т1, работающий как Т-триггер, по заднему фронту С два раза изменяет свое состояние, формируя на своём выходе сигнал SNO длительностью в 1 такт. Триггер Т2 устанавливается в «1» при наличии этого сигнала в момент заднего фронта С и далее запрещает прохождение входного сигнала через элемент D1 на триггер Т1.

Возврат схемы в исходное состояние можно было бы осуществлять сигналом SKO через элемент D3. Однако АЛУ может выработать этот сигнал раньше, чем закончится входной сигнал, или же сигнал SKO на каком-то наборе операндов может не выработаться. Поэтому для сброса схемы следует формировать сигнал в микроконтроллере и выдавать его на ПЛИС через контакт порта Р4. Для сброса можно было использовать и сигнал чтения результата АЛУ.

Рис. 2.1. Схема привязки сигнала SNO к тактовым сигналам

Результат моделирования схемы приведен на рис. 2.2.

Рис. 2.2. Результаты моделирования схемы привязки сигнала SNO

Схема привязки сигнала SNO может быть оформлена как подсхема и включена в проект.

Чтение результата выполнения операции в АЛУ микроконтроллером по шине должно выполняться после окончания работы АЛУ, т.е. после приёма сигнала SKO. Опрашивать его как сигнал готовности на контакте порта Р4 микроконтроллер не может, так как он не успеет определить момент равенства сигнала «1» или же определить переход «0/1», а затем «1/0» вследствие малой длительности (1 такт) сигнала SKO.

Использовать сигнал SKO как сигнал запроса прерывания (при запуске по срезу сигнала) тоже невозможно, так как у сигнала запроса прерывания длительность состояний «1» и «0» должна быть более 1 такта МК (12 периодов С).

Можно воспользоваться тем, что длительность выполнения операций в АЛУ не превышает 20 тактов для любой операции и любых операндов. Поэтому можно сделать программную задержку на 2-3 такта работы микроконтроллера и потом считывать уже готовый результат. Ясно, что эта задержка может быть и большей.

Если необходимо использовать сигнал готовности (запуска), то к нему сказанное выше тоже применимо. Для реализации этого режима нужно каким-то сигналом (импульсом) устанавливать в «1» триггер готовности, который сбрасываться в «0» будет микроконтроллером.

Запуск-установку триггера в «1» проще всего выполнить сигналом с генератора, который работает в одиночном режиме – CLR.

Назначение разрядов порта Р4 для рассматриваемого варианта показано в табл. 2.1.

Таблица 2.1

Назначение разрядов порта Р4

Разряд

P4.i

Назначение

Индикация

0

1

Режим 1

A0

1

1

Режим 2

A1

2

0

A2

3

1

Сброс готовности

A3

4

0

Сброс SNO

B0

5

1

Готовность

B1

6

0

Окончание

B2

7

0

SNOIN

B3

Сигнал «Окончание» может быть использован при необходимости для индикации окончания выполнения микроконтроллером одного или заданного количества тестов. Значение сигнала «Режим 1», равное «1», соответствует режиму периодического анализа сигнала готовности, значение сигнала, равное «0», – автоматическому режиму. Сигнал «Режим 2» – резервный.

Не следует точно копировать это распределение сигналов между разрядами порта Р4. Некоторые из сигналов могут не понадобиться, некоторые придется ввести дополнительно.

За исключением порта Р4 внешние устройства, входящие в состав УЛС, и дополнительные (требуемые вариантом задания) внешние устройства размещаются в адресном пространстве внешней памяти МК. Такие внешние устройства называются «отображёнными на память». Для внешних устройств, входящих в состав УЛС и подключённых к шине, в адресном пространстве выделен ряд отдельных адресов, а для дополнительных внешних устройств, размещаемых на ПЛИС, отведено всего два адреса – 7FFAh и 7FFBh. На ПЛИС выведены только сигналы дешифрации этих адресов – Х7FFA (контакт P70) и Х7FFB (контакт P68) и сигналы записи или чтения по этим адресам – MKWR (контакт P69) и MKRD (контакт P67). Все эти сигналы имеют нулевые активные уровни.

Данные между системной шиной и ПЛИС передаются через восемь внешних контактов (табл. 2.2).

Таблица 2.2

Соответствие разрядов системной шины контактам ПЛИС

Контакты

шины

Контакты

ПЛИС

0

84

1

83

2

79

3

81

4

78

5

77

6

72

7

80

Схема части проекта (без АЛУ), реализованная на ПЛИС, показана на рис. 2.3. Для выбранного варианта средств МПС, встроенных в УЛС (клавиатуры, семисегментных индикаторов и дисплея на жидко­кристаллических индикаторах – ЖКИ), не требуется. В качестве внешних устройств – приемников данных в ПЛИС необходимы два 4-разрядных буферных регистра RG1 и RG2 на входах А и В АЛУ. Они необходимы, так как данные на шине не хранятся. Запись кодов операндов в них может производиться одновременно 8-разрядным словом при обращении по адресу 7FFAh. Так как в тестируемом АЛУ у операндов разряд с индексом 0 – знаковый, то при подключении регистров к шинам А и В разряды приходится менять местами. В качестве внешнего устройства-источника возьмём только регистр результата без признаков. Чтение результата выполняется по адресу 7FFB.

Рис .2.3. Схема подключения АЛУ к МК

Для подключения регистра результата к шине использованы буферные элементы с «третьим» состоянием выхода – OBUFE. Так как обмен данными по шине осуществляется в двух направлениях (от ПЛИС у МК и от МК к ПЛИС), используются двунаправленные входы-выходы – IOPAD.

В этом примере индикация операндов А и В выполняется на индикаторах E и F, результата – на индикаторах C и D. Индикатор окончания тестирования не нужен, так как этот сигнал выдаётся через контакт Р4.6 и будет виден в разряде 1 индикатора В.

Далее дан пример программы тестирования АЛУ. Программа работает с внешней памятью, в которой записаны (в режиме редактирования внешней памяти данных или переписаны из файла) наборы операндов и заранее вычисленные результаты. Количество таких наборов – N. Величина N задается в программе.

В одиночном режиме («Режим 1» = 1) по сигналу готовности микроконтроллер читает пару операндов из памяти, подает их на АЛУ и результат записывает в ячейку памяти, соседнюю с ранее вычисленным результатом. Далее величина N уменьшается на 1 и МК вновь ожидает сигнала готовности. После перебора всех N наборов зажигается индикатор «Окончание», и программа зацикливается на одной команде.

В автоматическом режиме сигнал готовности опрашивается микроконтроллером только один раз. Далее после записи результата в память МК сразу переходит к чтению новой пары операндов. Пример загрузки памяти (для Nmax = 12) для операции умножения приведен в табл. 2.3.

Для каждого набора в первой ячейке памяти указаны значения операндов А и В, во второй – результат операции умножения, в следующей – результат второй операции. Значком «*» в таблице отмечены ячейки, в которые записывается результат той или иной операции.

Таблица 2.3

Таблица загрузки внешней памяти

Адрес

00

01

02

03

04

05

06

07

08

09

0A

0B

0C

0D

0E

0F

8000h

22

04

04

*

24

08

06

*

66

24

OC

*

77

21

0E

*

8010h

25

0F

07

*

62

0C

08

*

54

14

09

*

65

1E

0B

*

8020h

DD

04

FB

*

DB

08

F9

*

99

24

F3

*

88

31

F1

*

Четвертый набор – 7 х 7 имеет результатом 31h, в памяти записан ошибочный результат.

В последних четырех наборах записаны те же операнды, что и в первых четырёх наборах, но с другим знаком (в рассматриваемом варианте АЛУ числа представляются в обратном коде).

Блок-схема программы показана на рис. 2.4, текст программы – на рис. 2.5.

Рис. 2.4. Блок-схема программы

Рис. 2.5. Текст программы для тестирования АЛУ