Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПС2 Проектирование аппаратного и программного...doc
Скачиваний:
5
Добавлен:
26.09.2019
Размер:
2.77 Mб
Скачать

9. Модуль "Формирование информации" (InfoForm)

Этот модуль функционально наиболее сложен. Он обеспечивает формирование в различных режимах адреса, буферных данных и выходного массива данных в ОЗУ (см. рис. 3.24).

ГСА модуля InfoForm приведена на рис. 3.34. Она построена путем анализа возложенных на него функций и логики работы устройства.

Этот модуль должен выполняться лишь при отсутствии ошибок ввода с клавиатуры и тестового контроля ОЗУ. Поэтому на его входе прежде всего проверяется факт наличия ошибок, что сводится к анализу флагов KbdErr, RAMErrD и RAMErrA. При активном значении любого из них управление сразу же передается на выход из модуля.

Фактическое выполнение модуля начинается с анализа флага пустой клавиатуры EmpKbd. Неактивное значение этого флага соответствует вводу информации с клавиатуры. Для определения типа этой информации анализируется флаг InType. В зависимости от типа ввода очередная цифра включается в младшую тетраду адреса в наборе Addr или буферных данных в наборе BufData. При изменении адреса из ячейки выходного массива RAMData считываются данные по новому адресу, записываемые в набор BufData. Благодаря этому всегда поддерживается соответствие между отображаемыми адресом и данными выходного ОЗУ.

Активное значение флага EmpKbd свидетельствует о том, что информация с клавиатуры не вводилась. В этом случае проверяются флаги модификации адреса AddrInc и AddrDec. При их пассивном значении состояние системы не изменяется, и осуществляется выход из модуля. При их активном значении выполняется соответствующая модификация адреса.

Далее анализируется режим работы устройства. В режиме "Ввод" реализуется запись ранее сформированных данных из набора BufData в выходной массив ОЗУ RAMData с последующим считыванием данных из ячейки этого массива по новому адресу. Новые адрес и данные размещаются в наборах BufData и Addr соответственно.

В режиме "Просмотр" выполняются те же действия, что и в режиме "Ввод", кроме записи данных в выходной массив RAMData.

10. Модуль "Формирование массивов отображения" (DispForm)

Этот модуль предназначен для распаковки слова адреса из набора Addr и байта данных из набора BufData с целью представления их в поразрядной шестнадцатиричной форме (см. рис. 3.24 и табл. 3.1).

ГСА модуля DispForm приведена на рис. 3.35. Распаковка обоих элементов для отображения осуществляется циклически. При этом всегда выделяется и записывается в память младшая тетрада числа. Выделение более старших тетрад осуществляется путем их сдвига на место младшей тетрады.

Рис. 3.34. Алгоритм модуля "Формирование информации"

Рис. 3.35. Алгоритм модуля "Формирование массивов отображения"

Очевидно, что рассмотренный алгоритм состоит из двух практически одинаковых частей, отличающихся лишь адресами и длиной обрабатываемых данных. С учетом этого модуль DispForm может быть выполнен так, чтобы он осуществлял обработку лишь одного элемента. Тогда оба элемента будут обрабатываться путем двукратного вызова этого модуля с передачей соответствующих параметров перед каждым вызовом.

11. Модуль "Вывод числовой информации" (NumInfOut)

Этот модуль служит для вывода числовой информации из массивов отображения на знакосинтезирующие семисегментные дисплеи "Адрес", "Данные" (см. рис. 3.24 и табл. 3.1).

Поскольку данные для вывода представлены в распакованной форме, то остается лишь преобразовать каждую цифру в семисегментный код, обеспечивающий свечение соответствующего знака. Это преобразование осуществляется по таблице, т. к. алгоритмическая связь между входными и выходными данными отсутствует.

ГСА модуля NumInfOut приведена на рис. 3.36. Вывод цифр на дисплеи "Адрес" и "Данные" осуществляется циклически. Следовательно, для адресации портов вывода должна использоваться косвенная адресация. При этом предполагается, что для отображения информации в устройстве применен метод статической индикации.

Очевидно, что рассмотренный алгоритм состоит из двух практически одинаковых частей, отличающихся лишь адресами отображаемых областей памяти, номерами портов и разрядностью дисплеев. С учетом этого модуль NumInfOut может быть выполнен так, чтобы он осуществлял вывод лишь на один дисплей. Тогда вывод на оба дисплея будет реализован путем двукратного вызова этого модуля с передачей соответствующих параметров перед каждым вызовом.