Следующая команда — это сброс 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 операции
21
4 ОПИСАНИЕ СХЕМЫ НА HDL
По варианту было определенно, что для работы будет использоваться язык описания VHDL. Ниже, на рисунке 4.1 представлен код описывающий схему вычислительного блока.
Рисунок 4.1 — Описание на VHDL
Строки 1–3: Подключение стандартных библиотек IEEE: STD_LOGIC_1164 для работы с логическими типами и STD_LOGIC_UNSIGNED для арифметических операций над векторами.
Строки 5–15: Объявление сущности lb4_vhdl с портами: data_in (6 бит), code_in (2 бит), тактовые сигналы C_int и C_ext, сигнал сброса RST, сигнал разрешения выдачи RD, выходной строб C_out и последовательный выход dout.
Строки 17–34: Архитектура synth. Объявлены внутренние сигналы: op
— код операции, data — входные данные, rescount — 5-битный счётчик операций, resOP0, resOP1, resOP2 — результаты трёх операций, res —
22
итоговый результат. Также объявлен конечный автомат stout (3 состояния), max_cnt — максимальное число выдаваемых битов, cnt — счётчик выданных битов, CLR — сигнал сброса. Псевдонимы A и B̅ обозначают старшие и младшие 3 бита данных.
Строки 36–48: Процесс по C_ext и CLR. При CLR = '1' обнуляются счётчик, код операции, данные и сам CLR. По фронту C_ext защёлкиваются code_in и data_in, счётчик rescount инкрементируется, в CLR записывается RST.
Строки 50–61: Комбинационный процесс по data(4 downto 0) реализует таблицу проверки GCR-кода Commodore: для пяти фиксированных 5-битных комбинаций на resOP0 выдаётся соответствующий 5-битный признак, для остальных — "00001". Параллельно формируются resOP1 (побитное ИЛИ A с инверсией B̅ с двумя ведущими нулями) и resOP2 (сумма A + B̅ + 1 с ведущим нулём).
Строки 63–76: Мультиплексор по op выбирает результат: "00" — счётчик rescount, "01" — таблица resOP0, "10" — логика resOP1, "11" — арифметика resOP2.
Строки 78–85: Комбинационный процесс устанавливает max_cnt: для операций "10" и "11" — 3 бита, для остальных — 5 бит.
Строки 87–129: Процесс по C_int и CLR реализует конечный автомат выдачи. При сбросе — начальное состояние. Состояние 0: при RD = '1' выдаётся res(0), cnt = 1, переход в состояние 1. Состояние 1: строб C_out = '0', переход в состояние 2. Состояние 2: если cnt < max_cnt, выдаётся res(cnt), строб C_out = '1', инкремент cnt, возврат в состояние 1; иначе — строб C_out = '1' и возврат в состояние 0.
23
Рисунок 4.3 — Моделирования в режиме Timing
Рисунок 4.4 – Моделирования в режиме Functional
24
На рисунке 4.5 представлена RTL на базе написанного кода.
Рисунок 4.5 — RTL схема
1. 1. Блок входной синхронизации и хранения данных (красный) Отвечает за фиксацию входных сигналов по внешнему тактовому
сигналу C_ext и формирование базовых управляющих сигналов. Входные порты: RST, C_ext, code_in[1..0], data_in[5..0], RD. Регистры фиксации:
Регистр op[1..0] — код выполняемой операции. Регистр data[5..0] — входные данные.
Регистр CLR — управление сигналом сброса .
25
Счётчик операций: Сумматор Add0 и регистр rescount[4..0] — счётчик с инкрементом по фронту C_ext. Сброс при CLR = '1'.
2.Блок преобразования GCR-кода (зелёный)
•Декодирование по таблице Commodore GCR.
•Компоненты: Мультиплексоры Mux0–Mux4.
•Логика: На селекторные входы поступают младшие 5 бит data[4..0]. На информационные входы поданы константы, формирующие таблицу истинности. Выход — 5-битный resOP0[4..0].
3.Блок побитовой логики (оранжевый)
Выполняет побитовую логическую операцию объединения (A B̅T) с инверсией части разрядов.
•Компоненты: Три элемента ИЛИ (resOP1[2], resOP1[1], resOP1[0]).
•Логика работы: Старшие биты data[5..3] логически комбинируются с инвертированными младшими битами data[2..0].
4.Блок арифметического сложения (жёлтый)
Реализует вычисление арифметических функций с расширением разрядности.
•Компоненты: Сумматоры Add1 и Add2.
•Логика работы: Выполняется сложение вида A + B̅ + 1, где в качестве операндов выступают разделенные триплеты данных: старшая тройка data[5..3] и младшая тройка data[2..0]. За счет переносов и архитектуры сумматоров разрядность выходного значения увеличивается (расширение сетки для предотвращения переполнения).
5.Коммутатор результатов и задание лимитов (синий)
Этот узел выбирает, какой именно результат вычислений пойдет на выход, и сколько бит нужно будет передать.
•Компоненты: Мультиплексоры Mux5–Mux9 (выбор результата).
•Логика выбора: Код op[1..0] управляет мультиплексорами Mux5– Mux9, выбирая один из источников: rescount, resOP0, resOP1, resOP2. Результат — res[4..0].
26
6.Выходной каскад и Конечный автомат (фиолетовый)
•Преобразование параллельного результата в последовательный поток, синхронизированный с C_int.
•Компоненты управления:
•Регистр stout[1..0] — состояние автомата (3 состояния: 0, 1,
2).
•Счётчик cnt[2..0] — счётчик выданных бит.
•Компаратор LessThan0 — сравнение cnt < max_cnt.
•Логика автомата: По фронту C_int автомат последовательно выдаёт биты res(cnt) через мультиплексоры Mux10, Mux11, Mux12, Mux13, Mux14, Mux15. Мультиплексоры dout-0 и dout-1 коммутируют биты в последовательный поток.
•Выходные регистры:
•dout-reg0 — последовательный выход dout.
•C_out-reg0 — строб готовности данных C_out.
27
Заключение
В результате лабораторной работы был разработан вычислительный блок, реализующий задачу проверки Commodore GCR-кода (код 01), выполнение логической побитовой операции A B̅T (код 10) и арифметической операции A+B̅+1 (код 11). Вход схемы осуществляется нарастающим фронтом параллельным кодом при синхронном сбросе. Выход реализован последовательным кодом младшими разрядами вперёд (LSB̅) по убывающему фронту при активном уровне сигнала read = 1.
Помимо этого было проведено моделирование работы устройства и описание схемы на языке VHDL. Результаты моделирования совпали с таблицей истинности.
Также были выполнены описание структурной и функциональной схем, моделирование схемы в САПР Quartus II, а также построение и описание RTLсхемы по коду VHDL.
28
