книги / Реализация цифровых автоматов в системе Quartus фирмы Altera
..pdfОпределим задержку (рис. 3).
Рис. 3. Определение временной задержки схемы реализации функции трех переменных №132 на «гибкой» логике
Ставим первый маркер на фронт сигнала 011(3), а второй – на первую формируемую «1» на выходе. Получаем 10 наносекунд. Как ни странно, она получилась даже меньше, чем у схемы на «жесткой» логике. Видимо, это связано с тем, что и в «жесткой» схеме каждый элемент – это тоже ПЗУ! А как в реальной схеме делает компилятор, нам не ведомо… Но там в цепи от входа к выходу – два элемента, а здесь три…
2. Варианты заданий
Построить схему реализации заданной функции трех переменных на «гибкой» логике по вариантам (указаны в лабораторной работе №1). Варианты заданий: соответствуют номеру по списку группы.
71
Лабораторная работа №5 СИНТЕЗ И ИССЛЕДОВАНИЕ ПОСЛЕДОВАТЕЛЬНОСТНОГО
АВТОМАТА-АКЦЕПТОРА (РАСПОЗНАВАТЕЛЯ) НА «ГИБКОЙ» ЛОГИКЕ
Задание: синтезировать автомат-распознаватель заданной последовательности двоичного двухразрядного сигнала на «гибкой» логике.
Пример. Пусть необходимо распознавать последовательность 013 двоичного двухразрядного сигнала. При ее получении сформировать выходной сигнал z1 «верно», при нарушении последовательности – сигнал z2 «неверно».
Воспользуемся таблицей переходов-выходов (ТПВ, табл. 3) из лабораторнойработы№2 иперенесем еевтабл. 1.
Таблица 1
Представим ее несколько иначе (табл. 2).
72
|
|
|
|
|
|
|
|
|
|
Таблица 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y |
|
|
a |
|
b |
|
y(t+1) |
|
|
|
|
|
|
|
|
|
|
|
d(t) |
z1 |
|
z2 |
|
0 |
|
|
0 |
|
0 |
0 |
0 |
|
0 |
|
|
0 |
|
|
0 |
|
1 |
1 |
0 |
0 |
||
|
|
|
|
||||||||
|
0 |
|
|
1 |
|
0 |
|
0 |
0 |
|
1 |
|
0 |
|
|
1 |
|
1 |
- |
- |
- |
||
|
1 |
|
|
0 |
|
0 |
1 |
0 |
1 |
||
|
1 |
|
|
0 |
|
1 |
1 |
0 |
0 |
||
|
1 |
|
|
1 |
|
0 |
- |
- |
- |
||
|
1 |
|
|
1 |
|
1 |
1 |
1 |
0 |
Это и будет почти таблица программирования ПЗУ. Здесь данные по семи адресам – три функции y(t+1)(d(t)), z1, z2. Только надо записать вместо «тильд» какие-нибудь конкретные значения, например нули (табл. 3).
|
|
|
|
|
|
|
|
|
Таблица 3 |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y |
|
|
a |
|
b |
y(t+1) |
|
|
|
|
|
|
|
|
|
|
|
|
d(t) |
z1 |
|
|
z2 |
|
|
0 |
|
|
0 |
|
0 |
0 |
0 |
|
0 |
|
|
|
|
|
|
|
||||||||
|
0 |
|
|
0 |
|
1 |
1 |
0 |
|
0 |
|
|
|
0 |
|
1 |
|
0 |
0 |
0 |
|
|
1 |
|
|
|
0 |
|
|
1 |
|
1 |
0 |
0 |
|
|
0 |
|
|
1 |
|
|
0 |
|
0 |
1 |
0 |
|
1 |
|
|
|
1 |
|
|
0 |
|
1 |
1 |
0 |
0 |
|
||
|
1 |
|
|
1 |
|
0 |
0 |
0 |
|
|
0 |
|
|
1 |
|
|
1 |
|
1 |
1 |
1 |
|
|
0 |
|
Таким образом, y(t+1)(d(t)) – это дизъюнкция наборов 1, 4, 5, 7; z1 – это один набор 7; z2 – это дизъюнкция наборов 2, 4.
1. Выполнение эксперимента
Реализуем постоянное запоминающее устройство, как и ра-
нее, на основе дешифратора 74154 (megafunctions, others, maxplus2) и элементов ИЛИ. В качестве элемента памяти возьмем четырехразрядный регистр 74175.
73
У дешифратора «занулен» адресный вход D, так как у нас функции трех переменных, а также «занулены» инверсные управляющие входы G1N, G2N. Занулены и три оставшихся входа регистра. Получим рис. 1.
Рис. 1. Схема автомата-распознавателя на «гибкой» логике
Поскольку выходы дешифратора инверсные, то они инвертируются инверторами. Обращаем внимание на порядок переменных на адресных входах дешифратора: старшая – y, далее – a, младшая – b.
Обращаем внимание, что на схеме не должно быть одинаковых имен элементов и контактов! Иначе при компиляции будет зафиксирована ошибка.
После компиляции приступаем к временному моделированию (рис. 2).
Видим формирование 1 по z1. Сформируем неправильную последовательность 02 (рис. 3).
Сформируем неправильнуюпоследовательность010 (рис. 4).
74
Рис. 2. Проверка правильной последовательности 013
Рис. 3. Формирование z2 = 1
75
Рис. 4. Проверка последовательности 010
Все работает!
76
Лабораторная работа №6 СИНТЕЗ И ИССЛЕДОВАНИЕ СХЕМЫ МИКРОПРОГРАММНОГО
УСТРОЙСТВА УПРАВЛЕНИЯ НА «ГИБКОЙ» ЛОГИКЕ ПО ЗАДАННОЙ ГСА
Задание: синтезировать микропрограммное устройство управления на «гибкой» логике по заданной графической схеме алгоритма.
Пример. Построим микропрограммное устройство управления на «гибкой» логике по заданной ГСА из лабораторной работы №3. Результат сведем в обобщенную таблицу перехо- дов-выходов (табл. 1).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица |
1 |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y2 |
|
y1 |
x2 |
|
x1 |
y2(t+1) |
|
y1(t+1) |
|
|
Микрооперации |
|
|
|||||||||
|
|
|
|
|
|
|
|
|
d2(t) |
|
d1(t) |
z1 |
|
z2 |
|
z3 |
|
z4 |
z5 |
|
||
0 |
0 |
|
~ |
~ |
|
|
0 |
1 |
|
1 |
0 |
0 |
0 |
|
0 |
|
||||||
0 |
|
1 |
|
~ |
~ |
|
|
1 |
1 |
|
0 |
1 |
0 |
0 |
|
0 |
|
|||||
1 |
1 |
|
~ |
0 |
|
|
1 |
0 |
|
0 |
0 |
1 |
0 |
|
0 |
|
||||||
1 |
1 |
|
~ |
1 |
|
|
1 |
1 |
|
0 |
1 |
0 |
0 |
|
0 |
|
||||||
1 |
0 |
|
0 |
~ |
|
|
0 |
0 |
|
0 |
0 |
0 |
1 |
|
0 |
|
||||||
1 |
0 |
|
1 |
~ |
|
|
0 |
0 |
|
0 |
0 |
0 |
0 |
|
1 |
|
||||||
|
Преобразуем все функции в СДНФ для получения таблицы |
|||||||||||||||||||||
программирования ПЗУ (табл. 2). |
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица |
2 |
|
|||
|
|
Адреса |
|
|
|
|
|
|
|
|
Данные |
|
|
|
|
|
|
|
||||
y2 |
|
y1 |
x2 |
|
x1 |
y2(t+1) |
|
y1(t+1) |
|
|
Микрооперации |
|
|
|||||||||
|
|
|
|
|
|
|
|
|
d2(t) |
|
d1(t) |
z1 |
|
z2 |
|
z3 |
|
z4 |
z5 |
|||
0 |
|
0 |
|
0 |
|
0 |
|
|
0 |
|
1 |
|
1 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
1 |
|
|
0 |
|
1 |
|
1 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
1 |
|
0 |
|
|
0 |
|
1 |
|
1 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
1 |
|
1 |
|
|
0 |
|
1 |
|
1 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
77
Окончание табл. 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
1 |
|
1 |
|
0 |
|
1 |
0 |
0 |
0 |
1 |
0 |
0 |
|
|
1 |
|
1 |
|
0 |
|
1 |
|
1 |
1 |
0 |
1 |
0 |
0 |
0 |
|
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
1 |
0 |
1 |
0 |
0 |
0 |
|
|
1 |
|
0 |
|
0 |
|
0 |
|
0 |
0 |
0 |
0 |
0 |
1 |
0 |
|
|
1 |
|
0 |
|
0 |
|
1 |
|
0 |
0 |
0 |
0 |
0 |
1 |
0 |
|
|
1 |
|
0 |
|
1 |
|
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|
|
1 |
|
0 |
|
1 |
|
1 |
|
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|
Обращаем внимание, что в табл. 2 номера клеток расположены не по порядку!
Получим символическую форму функций: y2(t+1) = d2(t) = 4, 5, 6, 7, 12, 13, 14, 15;
y1(t+1) = d1(t) = 0, 1, 2, 3, 4, 5, 6, 7, 14, 15; z1 = 0, 1, 2, 3;
z2 = 4, 5, 6, 7, 14, 15; z3 = 12, 14;
z4 = 8, 9;
z5 = 10, 11.
Запишем массив шестнадцатеричных чисел – таблицу программирования ПЗУ (это строки данных табл. 2): 30Н, 30Н, 30Н,
30Н, 68Н, 68Н, 68Н, 68Н, 02Н, 02Н, 01Н, 01Н, 44Н, 68Н, 44Н, 68Н.
Схема имеет вид (рис. 1).
|
|
|
A ROM D |
|
|
|
Логические |
x1 |
|
1 |
1 |
z5 |
|
x2 |
|
2 |
2 |
z4 |
Выходные сигналы – |
|
условия |
y1(t+1) |
3 |
z3 |
|||
|
|
4 |
4 |
z2 |
микрооперации |
|
|
|
y2(t+1) 8 |
5 |
z1 |
|
|
|
|
|
16 |
6 |
|
|
|
|
|
7 |
|
|
|
|
|
|
|
к генератору |
|
|
|
|
|
|
|
импульсов |
|
|
|
|
|
c |
D2D 1 |
Хранитель состояния |
|
|
|
|
|
RG |
автомата |
|
|
|
|
|
|
Рис. 1. Микропрограммное устройство управления на «гибкой» логике – на основе ПЗУ
78
1. Выполнение эксперимента
Сформируем НЕХ массив. Для этого используем некоторую программу PLA16, в которой имеется таблица TABL, в нее и записываем нашу таблицу.
Открываем папку «Ассемблер 51» (рис. 2).
Рис. 2. Выбор рабочей папки
Открываем готовый (созданный ранее) файл PLA16.ASM и изменяем в нем таблицу. На саму программу не обращаем внимания.
TABL:
db 30H,30H,30H, |
|
db 30H,68H,68H, |
|
db 68H,68H,02H, |
|
db 02H,01H,01H, |
|
db 44H,68H,44H, |
|
db 68H,00H,00H, |
|
db 00H,00H,00H, |
|
db 00H,00H,00H, |
00H |
P1 EQU 90H
P2 EQU 0A0H
Begin: MOV A, P1 |
; Считываем и заносим в аккумулятор А |
ANL A, #03h |
; Маскируем |
MOV R1, A |
; в R1 |
79
MOV A, R3 |
; Внутреннее состояние в R3 |
ORL A, R1 |
; Получаем полное входное слово |
MOV R1, A |
; Полное входное слово в R1 |
MOV R2,#0 |
; Обнуляем R2 в нем выход |
MOV DPTR,#TABL |
; Указатель на массив констант |
CLR A |
; Очищаем аккумулятор |
MOVC A,@A+DPTR |
; Загружаем Х0(i) в А |
MOV R0,A |
; Х0(i) в R0 |
Next: MOV A, R0 |
; Х0(i) в A |
ANL A,R1 |
; Маскируем входное слово Х0(i) |
MOV R0,A |
; Результат в R0 |
CLR A |
; Очищаем аккумулятор |
INC DPTR |
; Инкрементируемрегиструказатель |
MOVC A,@A+DPTR |
; Загружаем ХD(i) в А |
XRL A,R0 |
; Сложение по модулю 2 |
|
; с предыдущим результатом |
INC DPTR |
; Инкремент регистра указателя |
JNZ Check |
; Переход если ноль |
CLR A |
; Очищаем аккумулятор |
MOVC A,@A+DPTR |
; Загружаем Z(i) |
ORL A,R2 |
; Получаем выходное слово |
MOV R2,A |
; Сохраняем результат в R2 |
Check: CLR A |
; Очищаем аккумулятор |
INC DPTR |
; Инкрементируемрегиструказателя |
MOVC A,@A+DPTR |
; Загружаем Х0(i + 1) |
MOV R0,A |
; Х0(i + 1) в R0 |
JNZ Next |
; Переход по нулю |
MOV A,R2 |
; Выход в R2 |
ANL A,#0CH |
; Выделяем y2(t + 1)y1(t + 1) |
MOV R3,A |
; Результат в R3 |
MOV P2, R2 |
; Выход на Р2 |
jmp Begin |
|
NOP |
|
NOP |
|
NOP |
|
NOP |
|
NOP |
|
NOP |
|
80 |
|