ОЗУ как информационный буфер
Второе важнейшее применение микросхем оперативной памяти состоит в организации разнообразных информационных буферов, то есть буферной памяти для промежуточного хранения данных, передаваемых между двумя устройствами или системами. Суть информационного буфера состоит в следующем: передающее устройство записывает передаваемые данные в буфер, а принимающее устройство читает принимаемые данные из буфера (рис. 12.10).
Рис. 12.10. Включение буферной памяти
Такое промежуточное хранение позволяет лучше скоординировать работу устройств, участвующих в обмене данными, повысить их независимость друг от друга, согласовать скорости передачи и приема данных.
Пусть, например, в качестве первого устройства выступает компьютер, а в качестве второго - кабель локальной сети. Компьютеру значительно удобнее выдавать данные со скоростью, определяемой его собственным быстродействием, но в локальную сеть надо передавать данные со строго определенной скоростью, задаваемой стандартом на сеть (например, 100 Мбит/с). Кроме того, компьютер, по возможности, не должен отвлекаться на контроль за текущим состоянием сети, за ее занятостью и освобождением. Поэтому буферная память в данном случае необходима. И точно так же она нужна при приеме данных из локальной сети в компьютер.
Главное отличие буферной памяти от памяти для временного хранения информации, рассмотренной в предыдущем разделе, состоит в том, что к информационному буферу всегда имеют доступ не одно внешнее устройство, а два (или даже более). Из-за этого иногда существенно усложняется как схема задания адреса микросхемы памяти, так и схема разделения потоков данных (записываемых в память и читаемых из памяти).
Рис. 12.11. Двунаправленный информационный буфер
Информационные буферы бывают однонаправленными (входными или выходными) и двунаправленными (то есть входными и выходными одновременно - рис. 12.11). Например, буферная память сетевого адаптера двунаправленная, так как она буферирует и информацию, передаваемую в сеть из компьютера, и информацию, принимаемую из сети в компьютер. Двунаправленные буферы всегда сложнее проектировать из-за большего количества потоков данных.
Информационные буферы могут обеспечивать периодический обмен между устройствами или непрерывный обмен между ними. Примером буфера с непрерывным режимом обмена может служить контроллер видеомонитора, информация из которого постоянно выдается на видеомонитор, но может изменяться по инициативе компьютера.
Информационные буферы с периодическим режимом обмена могут быть организованы по типу FIFO или по типу LIFO.
В случае FIFO массив данных читается из памяти одним устройством в том же порядке, в каком он был записан в память другим устройством. Выпускаются даже специальные микросхемы быстродействующей буферной памяти типа FIFO, которые не имеют адресной шины и представляют собой, по сути, многоразрядный сдвиговый регистр. В отличие от обычной микросхемы сдвигового регистра, где читать вдвигаемую информацию можно только тогда, когда она продвинется по всем ячейкам регистра, информацию с выходов буфера FIFO можно начинать читать с выходов сразу же после того, как она начала записываться в его входы. Но мы будем рассматривать здесь только буферы на обычных, традиционных микросхемах памяти, как более универсальные.
В случае информационного буфера LIFO массив данных читается из памяти в порядке, противоположном тому, в котором он был записан в память. Такое решение иногда позволяет проще организовать схему перебора адресов памяти.
Тем самым, разнообразие информационных буферов огромно. Мы же рассмотрим здесь всего три примера схем буферной памяти.
Первая схема - это простейший однонаправленный буфер с периодическим режимом обмена по принципу FIFO (рис. 12.12). Одно устройство записывает информацию в буфер, на другое устройство выдается информация из буфера. Память всегда записывается полностью, по всем адресам, и читается также полностью. Строб записи "–Зап." поступает в режиме записи с частотой, необходимой для записи, строб чтения "–Чт." поступает при чтении с частотой, необходимой для чтения. Шины данных для записи и чтения в память в случае, показанном на рисунке, отдельные.
При таких условиях необходим всего лишь один счетчик для перебора адресов памяти, причем счетчик, работающий только в режиме прямого счета и имеющий вход начального сброса в нуль.
Рис. 12.12. Однонаправленный буфер типа FIFO
Перед началом работы устройство, производящее запись в память, сбрасывает счетчик в нуль сигналом "–Сброс" и устанавливает режим записи в память, перебрасывая в нуль управляющий триггер (единица на инверсном выходе). Затем начинается процесс записи: записываемые данные поступают с однонаправленного входного буфера (АП5) и записываются в память сигналом "–Зап.", который своим задним фронтом переключает адреса памяти. Полная процедура записи включает в себя столько циклов записи, сколько имеется ячеек у используемой памяти.
После окончания процедуры записи устройство, производившее запись, разрешает чтение из памяти, устанавливая в единицу триггер положительным фронтом сигнала "Пуск" (нуль на инверсном выходе). При этом разрешается прохождение сигнала "–Чт.". Адреса памяти переключаются по заднему фронту сигнала "–Чт.", и по этому же фронту данные, читаемые из памяти, фиксируются в выходном регистре, срабатывающем по фронту (например, ИР27). Выходной регистр выполняет две функции: он не пропускает на выход данные, записываемые в память (по сигналу -WE запрещается запись в триггер), а также обеспечивает одновременность изменения всех разрядов читаемых данных. Выходная информация из-за этого регистра задерживается на один период сигнала "–Чт.", что необходимо учитывать. Если взять регистр со входом сброса в нуль, то можно сделать, чтобы при процедуре записи в память на выходе схемы был нулевой код.
После окончания чтения всего объема памяти вырабатывается сигнал переноса счетчика –Р, который снова переводит всю схему в режим записи, сбрасывая триггер в нуль (единица на инверсном выходе). После этого записывающее внешнее устройство снова может начинать процедуру записи в память.
Курсы | Учебные программы | Учебники | Новости | Форум | Помощь
Телефон: +7 (495) 253-9312, 253-9313, факс: +7 (495) 253-9310, email: info@intuit.ru © 2003-2007, INTUIT.ru::Интернет- Университет Информационных Технологий - дистанционное образование |
Шины данных для записи и чтения в память в случае, показанном на рисунке, отдельные.
При таких условиях необходим всего лишь один счетчик для перебора адресов памяти, причем счетчик, работающий только в режиме прямого счета и имеющий вход начального сброса в нуль.
Рис. 12.12. Однонаправленный буфер типа FIFO
Перед началом работы устройство, производящее запись в память, сбрасывает счетчик в нуль сигналом "–Сброс" и устанавливает режим записи в память, перебрасывая в нуль управляющий триггер (единица на инверсном выходе). Затем начинается процесс записи: записываемые данные поступают с однонаправленного входного буфера (АП5) и записываются в память сигналом "–Зап.", который своим задним фронтом переключает адреса памяти. Полная процедура записи включает в себя столько циклов записи, сколько имеется ячеек у используемой памяти.
После окончания процедуры записи устройство, производившее запись, разрешает чтение из памяти, устанавливая в единицу триггер положительным фронтом сигнала "Пуск" (нуль на инверсном выходе). При этом разрешается прохождение сигнала "–Чт.". Адреса памяти переключаются по заднему фронту сигнала "–Чт.", и по этому же фронту данные, читаемые из памяти, фиксируются в выходном регистре, срабатывающем по фронту (например, ИР27). Выходной регистр выполняет две функции: он не пропускает на выход данные, записываемые в память (по сигналу -WE запрещается запись в триггер), а также обеспечивает одновременность изменения всех разрядов читаемых данных. Выходная информация из-за этого регистра задерживается на один период сигнала "–Чт.", что необходимо учитывать. Если взять регистр со входом сброса в нуль, то можно сделать, чтобы при процедуре записи в память на выходе схемы был нулевой код.
После окончания чтения всего объема памяти вырабатывается сигнал переноса счетчика –Р, который снова переводит всю схему в режим записи, сбрасывая триггер в нуль (единица на инверсном выходе).
После этого записывающее внешнее устройство снова может начинать процедуру записи в память.
Условия правильной работы схемы следующие. Длительность сигнала "–Зап." не должна быть меньше минимальной длительности сигнала –WR памяти. Период следования сигналов "–Зап." не должен быть меньше суммы длительности сигнала "–Зап." и задержки переключения счетчика. Период следования сигналов "–Чт." не должен быть меньше суммы времени выборки адреса памяти и задержки переключения счетчика. Память должна быть нетактируемой (например, КР541РУ2).
Более сложную структуру имеет двунаправленный буфер с периодическим режимом обмена типа LIFO. Он позволяет выдавать и принимать массивы данных произвольной длины (а не фиксированной длины, как в предыдущем случае) с заданной скоростью. Такая задача возникает, в частности, при проектировании адаптеров локальных сетей. Несмотря на то, что данные читаются из буфера в порядке, обратном тому, в котором они были записаны в буфер, на обмене информацией между двумя буферами это никак не отражается.
Пусть, например, устройство 1 передает информацию в устройство 2, а в качестве промежуточного устройства (устройство 3) выступает кабель сети (рис. 12.13).
Рис. 12.13. Обмен между двумя устройствами через два буфера типа LIFO
Устройство 1 записывает в буфер 1 массив в прямом порядке, буфер 1 выдает этот массив в устройство 3 (сеть) в обратном порядке, буфер 2 принимает массив из сети в обратном порядке, а устройство 2 читает принятую информацию опять же в прямом порядке: то есть читается информация в том же порядке, в каком она и писалась. То же самое происходит и при передаче информации из устройства 2 в устройство 1.
Схема буфера LIFO (рис. 12.14) включает в себя, помимо памяти и двунаправленного буфера, реверсивный счетчик (типа ИЕ7) и реверсивный регистр сдвига (типа ИР24), служащий для преобразования параллельного кода в последовательный при передаче в сеть и последовательного кода в параллельный при приеме из сети.
Режимы работы буфера задаются двумя триггерами, один из которых разрешает режим передачи в сеть, а другой - режим приема из сети.
Рис. 12.14. Двунаправленный буфер типа LIFO
Перед началом работы оба триггера сброшены в нуль, счетчик также сброшен в нуль сигналом "Сброс". Сначала в память записывается передаваемый в сеть массив данных. Запись производится сигналом "–Зап.", задний фронт которого увеличивает выходной код счетчика (адрес памяти) на единицу. После окончания записи массива сигналом "Разр.пер." разрешается передача массива в сеть. В режиме передачи по сигналу строба передачи (TxC) перебираются адреса памяти в обратном порядке (счетчик работает в режиме обратного счета). Данные, читаемые из памяти, записываются в сдвиговый регистр и выдаются в сеть в последовательном коде (TxD). После того как счетчик досчитает до нуля, вырабатывается сигнал переноса <0, который сбрасывает в нуль триггер передачи. То есть в сеть выдается весь массив, записанный в память, независимо от его длины, причем массив выдается в обратном порядке.
В режиме приема информации из сети записывается единица в триггер разрешения приема по сигналу "Разр. пр.". Принимаемые из сети данные в последовательном коде RxD записываются в сдвиговый регистр, а из него уже в параллельном коде - в память. Запись производится по сигналу строба приема RxC, задним фронтом которого переключается счетчик, работающий в режиме инверсного счета. После окончания приема по сигналу "Конец приема" сбрасывается триггер разрешения приема. После этого производится чтение информации из памяти по сигналу "–Чт.". Задним фронтом этого сигнала переключается счетчик, работающий в режиме прямого счета. То есть массив читается в порядке, обратном тому, в котором он пришел из сети.
Условия правильной работы данной схемы аналогичны тем, что были сформулированы для предыдущих рассмотренных схем буферов. Сигналы стробов записи и чтения должны иметь такую длительность, чтобы осуществлять соответственно запись в память и чтение из памяти.
Период следования этих сигналов должен быть таким, чтобы успевали производиться операции записи и чтения, а также успевал переключаться счетчик.
Наконец, последняя схема, которую мы рассмотрим, это буфер с непрерывным режимом работы: с одним из устройств такой буфер общается непрерывно, а с другим - только в момент обращения со стороны этого устройства. В данном случае уже необходимо иметь два счетчика адреса памяти, выходные коды которых надо мультиплексировать с помощью мультиплексора.
Примем для простоты, что буфер - однонаправленный и передающий, то есть одно устройство только записывает в память информацию (в нужные моменты), а на другое устройство постоянно выдается читаемая из всех подряд адресов памяти информация (рис. 12.15).
Рис. 12.15. Передающий буфер с непрерывным режимом работы
Счетчик чтения непрерывно перебирает адреса памяти с частотой тактового генератора. Читаемая из памяти информация записывается в выходной регистр и выдается на выход. В момент записи по сигналу "–Зап." мультиплексор подает на адресные входы памяти выходной код счетчика записи. На память подается сигнал –WR, вложенный в сигнал "–Зап." (он начинается после начала сигнала "–Зап." и заканчивается раньше этого сигнала ). Это достигается применением цепочки из двух инверторов и элемента 2И-НЕ. Такая последовательность сигналов позволяет записать в память входные данные по адресу записи со счетчика записи и не изменять содержимое ячеек памяти с другими адресами.
Перед началом записи памяти счетчик записи сбрасывается в нуль по сигналу "Сброс". После каждой операции записи по заднему фронту сигнала "–Зап." код на выходе счетчика записи увеличивается на единицу. То есть для того чтобы записать всю память, необходимо сбросить счетчик и произвести столько циклов записи, сколько ячеек имеется в памяти.
Условия правильной работы схемы следующие. Счетчики должны быть синхронными для быстрого переключения. Память должна быть нетактируемая и с раздельными входами и выходами данных.
Емкость конденсатора должна быть такой, чтобы формируемый импульс –WR имел достаточную длительность для записи информации в память. За длительность сигнала "–Зап." должен успеть сработать мультиплексор, и должна записаться информация в память. Выходной регистр должен срабатывать по фронту. Длительность периода тактового сигнала должна быть не меньше суммы задержки выборки адреса памяти и задержки переключения счетчика чтения. За период следования сигнала "–Зап." должна успеть записаться информация в память, и должен переключиться счетчик записи.
Недостаток приведенной организации буфера состоит в том, что при проведении цикла записи в память на выходе схемы будет не та информация, которая должна читаться из памяти в данный момент. Преодолеть этот недостаток можно двумя путями.
Первый путь состоит в том, что надо производить запись в память только в те моменты, когда выходная информация буфера не важна. Например, если речь идет о буфере контроллера видеомонитора, то запись в память можно производить только во время кадрового гасящего импульса, когда на экране ничего не отображается.
Второй путь более сложен. Он состоит в том, чтобы разделить во времени запись в память и чтение из памяти. Например, в первой половине такта (то есть периода тактового генератора) производится запись в память (если есть внешний сигнал записи), а во второй половине такта всегда производится чтение информации из памяти и запись ее в выходной регистр. Соответственно мультиплексор в первой половине периода подает на адресные входы памяти адрес записи, а во второй половине - адрес чтения. Временную привязку момента записи к ближайшей первой половине такта можно осуществить с помощью микропрограммного автомата. При таком решении запись в память можно производить в любой момент без искажения читаемой информации, однако существенно (минимум вдвое) возрастают требования к быстродействию всех микросхем.