- •Введение
- •1 Структурная схема
- •2 Форматирование таблиц истинности
- •3 Вычислительный блок
- •4 Описание схемы на hdl
- •1. 1. Блок входной синхронизации и хранения данных (красный)
- •5. Коммутатор результатов и задание лимитов (синий)
- •6. Выходной каскад и Конечный автомат (фиолетовый)
- •Заключение
- •2. Блок преобразования gcr-кода (зелёный)
- •3. Блок побитовой логики (оранжевый)
- •4. Блок арифметического сложения (жёлтый)
3 Вычислительный блок
Функцональная схема вычислительного блока представлена на рисунке 3.1
Р
исунок
3.1 — Функцональная схема
Далее рассмотрим схему по блокам. Функциональная схема входного блока представлена на рисунке 3.2.
Данный блок содержит в себе записывающий регистр и счетчик.
Р
исунок
3.2 — Входной
блок
Функциональная схема операционного блока представлена на рисунке
3.3. В нем имеется устройства для выполнения логической и арифметической операции. Блок для выполнения проверки Commodore GCR-кода. Блок для выбора операции для выполнения.
Р
исунок
3.3
—
Операционный
блок
Функциональная схема выходного блока представлена на рисунке 3.4
Рисунок
3.4 — Выходной
блок
Далее был составлен план моделирования схемы, представленный в таблице 3.1
Таблица 3.1 – План моделирования
Входы |
Выходы |
||||||||||
КОП |
А |
В |
|||||||||
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
Y4 |
Y3 |
Y2 |
Y1 |
Y0 |
|
01 |
X |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
01 |
X |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
01 |
X |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
01 |
X |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
01 |
X |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
10 |
0 |
0 |
0 |
0 |
1 |
0 |
- |
- |
1 |
0 |
1 |
10 |
0 |
1 |
0 |
1 |
1 |
1 |
- |
- |
0 |
1 |
0 |
11 |
0 |
0 |
0 |
0 |
0 |
1 |
- |
- |
0 |
1 |
0 |
11 |
0 |
1 |
1 |
0 |
0 |
1 |
- |
- |
1 |
0 |
1 |
00 |
X |
X |
X |
X |
X |
X |
0 |
1 |
0 |
1 |
0 |
сброс |
|||||||||||
00 |
X |
X |
X |
X |
X |
X |
0 |
0 |
0 |
0 |
1 |
Система обрабатывает входные данные data_in и код операции code_in по переднему фронту внешнего синхроимпульса C_ext. При подаче активного сигнала RD = 1 происходит выдача значений в строку dout последовательным кодом, начиная с младших разрядов (LSB first). Выдача синхронизируется импульсами C_out, которые зависят от количества выдаваемых значений. Сброс всех регистров выполняется сигналом RST синхронно с внутренним тактовым сигналом C_int.
Операции обработки:
Код 01 — проверка Commodore GCR-кода (задача №9);
Код 10 — логическая побитовая операция A ∪ B̅;
Код 11 — арифметическая операция A+B+1;
Код 00 — вывод количества выполненных операций.
В результате моделирования были реализованы несколько наборов данных для каждой из операций. Разберем каждый код операции.
Cигнал C_int возникает каждые 100 нс.
Первый код 01 на промежутке 400 — 600 нс. Момент нарастающего фронта C_ext 500 нс, входные данные data_in = X00111 и code_in = 01, активный уровень сигнала RD = 1 на интервале 600 — 800 нс. Нисходящие фронты C_out на отметках 750 нс (dout=0), 950 нс (dout=0), 1,15 мкс (dout=0), 1,35 мкс (dout=0) и 1,55 мкс (dout=1). На выходе при последовательной передаче младшими разрядами вперёд (LSB first) получаем поток dout = 00001, что соответствует параллельному коду 10000 из таблицы.
Второй код 01 на промежутке 1,8 — 2,0 мкс. Момент нарастающего фронта C_ext 1,9 мкс, входные данные data_in = X11100 и code_in = 01, активный уровень сигнала RD = 1 на интервале 2,0 — 2,2 мкс. Нисходящие фронты C_out на отметках 2,15 мкс (dout=0), 2,35 мкс (dout=0), 2,55 мкс (dout=0), 2,75 мкс (dout=1) и 2,95 мкс (dout=0). На выходе при последовательной передаче младшими разрядами вперёд (LSB first) получаем поток dout = 00010, что соответствует параллельному коду 01000 из таблицы.
Р
исунок
3.5 — Моделирования в режиме Functional
для 1 и 2 операции
Р
исунок
3.6 — Моделирования в режиме
Timing для 1 и 2 операции
Третий код 01 на промежутке 3,2 — 3,4 мкс. Момент нарастающего фронта C_ext 3,3 мкс, входные данные data_in = X10100 и code_in = 01, активный уровень сигнала RD = 1 на интервале 3,4 — 3,6 мкс. Нисходящие фронты C_out на отметках 3,55 мкс (dout=0), 3,75 мкс (dout=0), 3,95 мкс (dout=1), 4,15 мкс (dout=0) и 4,35 мкс (dout=0). На выходе при последовательной передаче младшими разрядами вперёд (LSB first) получаем поток dout = 00100, что соответствует параллельному коду 00100 из таблицы.
Четвёртый код 01 на промежутке 4,6 — 4,8 мкс. Момент нарастающего фронта C_ext 4,7 мкс, входные данные data_in = X10001 и code_in = 01, активный уровень сигнала RD = 1 на интервале 4,8 — 5,0 мкс. Нисходящие фронты C_out на отметках 5,05 мкс (dout=0), 5,25 мкс (dout=1), 5,45 мкс (dout=0), 5,65 мкс (dout=0) и 5,85 мкс (dout=0). На выходе при последовательной передаче младшими разрядами вперёд (LSB first) получаем поток dout = 01000, что соответствует параллельному коду 00010 из таблицы.
Р
исунок
3.7 — Моделирования в
режиме Functional для
3 и 4 операции
Р
исунок
3.8 — Моделирования в
режиме Timing для
3 и 4 операции
Пятый код 01 на промежутке 6,0 — 6,2 мкс. Момент нарастающего фронта C_ext 6,1 мкс, входные данные data_in = X11111 и code_in = 01, активный уровень сигнала RD = 1 на интервале 6,2 — 6,4 мкс. Нисходящие фронты C_out на отметках 6,45 мкс (dout=1), 6,65 мкс (dout=0), 6,85 мкс (dout=0), 7,05 мкс (dout=0) и 7,25 мкс (dout=0). На выходе при последовательной передаче младшими разрядами вперёд (LSB first) получаем поток dout = 10000, что соответствует параллельному коду 00001 из таблицы.
Первый код 10 на промежутке 7,4 — 7,6 мкс. Момент нарастающего фронта C_ext 7,5 мкс, входные данные data_in = 000010 и code_in = 10, активный уровень сигнала RD = 1 на интервале 7,6 — 7,8 мкс. Нисходящие фронты C_out на отметках 7,95 мкс (dout=1), 8,15 мкс (dout=0) и 8,35 мкс (dout=1). На выходе при последовательной передаче младшими разрядами вперёд (LSB first) получаем поток dout = 101, что соответствует параллельному коду 101 из таблицы.
Р
исунок
3.9 — Моделирования в режиме Functional
для 5
и 6
операции
Р
исунок
3.10 — Моделирования в режиме
Timing для 5 и
6 операции
Второй код 10 на промежутке 8,9 — 9,1 мкс. Момент нарастающего фронта C_ext 9,0 мкс, входные данные data_in = 010111 и code_in = 10, активный уровень сигнала RD = 1 на интервале 9,1 — 9,3 мкс. Нисходящие фронты C_out на отметках 9,45 мкс (dout=0), 9,65 мкс (dout=1) и 9,85 мкс (dout=0). На выходе при последовательной передаче младшими разрядами вперёд (LSB first) получаем поток dout = 010, что соответствует параллельному коду 010 из таблицы.
Первый код 11 на промежутке 10,4 — 10,6 мкс. Момент нарастающего фронта C_ext 10,5 мкс, входные данные data_in = 000001 и code_in = 11, активный уровень сигнала RD = 1 на интервале 10,6 — 10,8 мкс. Нисходящие фронты C_out на отметках 11,25 мкс (dout=0), 11,45 мкс (dout=1) и 11,65 мкс (dout=0). На выходе при последовательной передаче младшими разрядами вперёд (LSB first) получаем поток dout = 010, что соответствует параллельному коду 010 из таблицы.
Р
исунок
3.11 — Моделирования в режиме Functional
для 7
и 8
операции
Р
исунок
3.12 — Моделирования в режиме
Timing для 7 и
8 операции
Второй код 11 на промежутке 12,2 — 12,4 мкс. Момент нарастающего фронта C_ext 12,3 мкс, входные данные data_in = 011001 и code_in = 11, активный уровень сигнала RD = 1 на интервале 12,4 — 12,6 мкс. Нисходящие фронты C_out на отметках 12,85 мкс (dout=1), 13,05 мкс (dout=0) и 13,25 мкс (dout=1). На выходе при последовательной передаче младшими разрядами вперёд (LSB first) получаем поток dout = 101, что соответствует параллельному коду 101 из таблицы.
Первый код 00 на промежутке 13,9 — 14,1 мкс. Момент нарастающего фронта C_ext 13,8 мкс, входные данные data_in = XXXXXX и code_in = 00, активный уровень сигнала RD = 1 на интервале 14,0 — 14,2 мкс. Нисходящие фронты C_out на отметках 14,25 мкс (dout=0), 14,45 мкс (dout=1), 14,65 мкс (dout=0), 14,85 мкс (dout=1) и 15,05 мкс (dout=0). На выходе при последовательной передаче младшими разрядами вперёд (LSB first) получаем поток dout = 01010, равное 10 операциям, что соответствует параллельному коду 01010 из таблицы.
Р
исунок
3.13 — Моделирования в режиме Functional
для 9
и 10
операции
Р
исунок
3.14 — Моделирования в режиме
Timing для 9 и
10 операции
Следующая команда — это сброс RST на промежутке 15,5 — 15,7 мкс. Сброс синхронный — по восходящему фронту C_ext в момент времени 15,6 мкс. Входных и выходных данных нет. После сброса счётчик операций обнуляется, все регистры и триггеры возвращаются в исходное состояние.
Второй код 00 на промежутке 15,9 — 16,1 мкс. Момент нарастающего фронта C_ext 16,0 мкс, входные данные data_in = XXXXXX и code_in = 00, активный уровень сигнала RD = 1 на интервале 16,1 — 16,3 мкс. Нисходящие фронты C_out на отметках 16,35 мкс (dout=1), 16,55 мкс (dout=0), 16,75 мкс (dout=0), 16,95 мкс (dout=0) и 17,15 мкс (dout=0). На выходе при последовательной передаче младшими разрядами вперёд (LSB first) получаем поток dout = 10000, что соответствует параллельному коду 00001 из таблицы (счётчик операций после сброса и выполнения одной операции с кодом 00).
Р
исунок
3.15 — Моделирования в режиме Functional
для 11
и 12
операции
Р
исунок
3.16 — Моделирования в режиме
Timing для 11 и
12 операции
