Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТВЕТЫ НА ГОСы (все ответы).doc
Скачиваний:
20
Добавлен:
14.08.2019
Размер:
1.93 Mб
Скачать

1. Буферная память типа fifo ("очередь") и lifo ("магазин"). (схемотехника)

Передача одного слова по ШД сопровождается синхроимпульсом (который часто называют «стробом»).

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

Однако во многих случаях целесообразно, чтобы источник и приёмник работали асинхронно. Например, приёмнику выгодно принять сразу блок данных, а затем их обрабатывать, вместо того чтобы регулярно прерываться на запись входных данных.

В таком случае применяют буферную память, организованную, в виде «очереди», в которой последовательность поступающих данных сохраняется. В зарубежной литературе такой буфер над FIFO (First Input – First Output, или «кто первый зашёл, тот первый вышел»).

Рассмотрим работу такого типа буферной памяти (рис. 19). Источник и приёмник работают асинхронно: источник записывает данные синхронно с импульсом записи WR, а приёмник считывает их своим импульсом RD. Перемещение данных в очереди происходит автоматически.

Ясно, что, в любом случае, объём памяти в очереди ограничен. Если вся память заполнена, то записывать данные больше нельзя, т.е. буфер обмена полон. В этом случае схема FIFO формирует сигнал EWR = «0», сигнализирующий, что записывать данные больше нельзя (Enable Write – запись разрешена). Если все данные приёмником считаны, а в очередь ничего не записано, то FIFO выводит сигнал ERD = «0», говорящий, что чтение не разрешено, т. е. считанные данные не будут корректными (Enable Read – чтение разрешено).

Наиболее удобным способом реализации буфера обмена FIFO является СОЗУ, организованное, например, аналогично работе ИМС 556ИР26.

Адреса ячеек памяти, при записи определяется счётчиком (Ст) записи. Каждый раз новые данные записываются в следующую по порядку ячейку. Аналогично – при чтении. Оба счётчика должны иметь одинаковые направление счёта.

Очередь в этом случае имеет вид кольца, в котором «голова» очереди и «хвост», образно говоря, «гоняются друг за другом».

Рассмотрим формирование сигналов, расширения записи надписи и чтения ERD, EWR.

Критическая ситуация наступает при равенстве адресов записи и чтения. При этом компаратор кодов (схема сравнения) формирует на выходе сигнал «1».

Если сигнал равенства = 0, то запись и чтение разрешены, т.е. ERD = EWR = "1".

Если при равенстве адресов, последним был импульс записи С1, т.е. «буфер заполнился», то триггер установится в «0» и EWR = 0, т.е. запись запрещена. Если последним было чтение, то триггер установится в «1» и ERD = «0» т.е. чтение запрещено.

Данная схема не вполне корректна: импульсы RD и WR не должны появляться одновременно.

Существуют микросхемы реализующие буфер FIFO, например 1002ИР1 (32х8), см. рис. 21.

R = 1 – сброс – стирание информации.

Характерное применение буфера FIFO – очередь команд в микропроцессорах.

Рис 21. Буфер FIFO 1002ИР1.

Магазинная память (др. название - Stack) во многом аналогична по названию буферу «очередь», но использует принцип «первый вошедший выходит последним» (LIFO – Last Input, First Output). Стековая память широко используется в микропроцессорных системах.

Назовём сигналы управления по имени команд в микропроцессорах: PUSH («загрузить в стек») и POP («извлечь из стека»). Сигналом PUSH источник загружает данные в стек, сигналом РОР приёмник считывает данные.

Буфер LIFO можно построить, используя СОЗУ (см. рис 22.)

Здесь используется реверсивный счётчик Ст, на который подаются импульсы PUSH и POP.

Запись в стек производится сигналом PUSH: записываются входные данные DI в текущую ячейку памяти, затем по окончании импульса PUSH (т.е. по переднему фронту), адрес ячейки увеличивается на единицу.

При чтении сигналом РОР данные текущей ячейки считываются по шине DO, затем адрес уменьшается на 1.

Если внимательно проанализировать работу схемы, то ясно, что адрес ЯП при записи должен быть на 1 больше, чем при чтении: ведь после записи в i-ю ячейку, код адреса становится равным (i + 1), а считывать данные в следующий раз нужно из i–й ячейки. Для этой цели на шине адреса AW стоит инкрементор INC.

Для реализации буфера LIFO можно также использовать сдвиговые регистры, способные производить сдвиг в обе стороны.