Изменения

Перейти к: навигация, поиск

Мультиплексор и демультиплексор

195 байт убрано, 23:32, 10 декабря 2018
Модуль памяти
Также с помощью мультиплексоров и демультиплексоров можно построить логику некоторых компонентов компьютера, в том числе и можно построить схему модуля памяти с использованием мультиплексора и демультиплексора.
Допустим, что нам нужно реализовать В качестве примера рассмотрим модуль памяти на 8 бит. Обозначим эти биты как <tex>s_0</tex>Для того, <tex>s_1</tex>, <tex>\ldots</tex>, <tex>s_7</tex>. Также допустимчтобы модуль памяти мог обрабатывать запросы, что у нас есть следующие управляющие входы: <tex>a_0A_0</tex>, <tex>a_1A_1</tex>, <tex>a_2A_2</tex>, которые задают кодируют номер бита, который следует обработать, также есть вход <tex>R/W</tex>, к которому делается запрос. Существует два типа запросов:* Прочитать значение на котором равно <tex>0</tex>, если надо прочитать значение записанное в <tex>i</tex>-го бита, где ом бите. В этом случае на вход <tex>i<R/tex> - число, которое кодируется входами <tex>A_0W</tex>, подаётся <tex>A_10</tex>, <tex>A_2</tex> и вывести его на выход <tex>Q</tex>, или <tex>1</tex>, если надо записать .* Записать в <tex>i</tex>-ый бит значение на входе <tex>D</tex>. Также есть В этом случае на вход <tex>CR/W</tex> подаётся <tex>1</tex> - провод синхронизации.
Давайте Также для хранения значения в корректной работы модуля памяти используется провод синхронизации <tex>iC</tex>-ом бите будем использовать . На рисунке представлена схема такой памяти. Для хранения значений в битах используются [[Триггеры#D-триггер|<tex>D</tex>-триггертриггеры]]. Рассмотрим схему подробнее. Если на входе <tex>cC</tex> записано значение <tex>0</tex>, то нам не важно, что находится на выходе <tex>Q</tex>, поэтому эту ситуацию можно свести к ситуации, когда на <tex>C</tex> подано <tex>1</tex>, а на <tex>R/W</tex> - <tex>0</tex>. Теперь осталось реализовать Поймём, как реализованы операции чтения и записи. Подадим на входы Существует демультиплексор <tex>S_03</tex>, -to-<tex>S_18</tex>, <tex>S_2</tex> демультиплексора значения на входах <tex>A_0</tex>, <tex>A_1</tex>, <tex>A_2</tex>, а которому на вход демультиплексора <tex>Y</tex> подадим на вход значение гейта <tex>AND</tex>, которому на вход подаются входы результат конъюнкции входов <tex>R/W</tex> и <tex>C</tex>. Тогда если либо , а на входе входы <tex>R/WS_0</tex> , <tex>0S_1</tex>, либо на входе <tex>CS_2</tex> подать <tex>0</tex> то подадим значения на выходе демультиплексора будут все входах <tex>0</tex>. Если же и на <tex>R/W</tex> и на <tex>C</tex> подать <tex>1A_0</tex>, то на выходе <tex>Z_i</tex> будет<tex>1A_1</tex>, а на остальных - <tex>0A_2</tex>, где . Пусть число <tex>i</tex> - число, которое кодируется входами <tex>A_0</tex>, <tex>A_1</tex>, <tex>A_2</tex>. Соединим Тогда на все выходы демультиплексора, кроме выхода <tex>Z_0Z_i</tex>, будет подаваться <tex>Z_10</tex>, а на выход <tex>\ldotsZ_i</tex>, - значение на входе <tex>Z_7Y</tex> демультиплексора к входам . Очевидно, что операция чтения никак не изменяет значение битов, в то время как запись меняет их значения, поэтому можно считать, что модуль памяти всегда возвращает значение на <tex>Ci</tex> D-триггеровом бите, кроме случаев, причём мы соединим выход когда <tex>Z_iC = R/W = 1</tex> с триггером, который хранит значение . Подадим все выходы демультиплексора на соответствующие им входы <tex>iC</tex>-го бита. Подадим значение на входе <tex>D</tex> элементы памяти на оставшиеся -триггеров. Оставшиеся свободными входы триггеров. Если же соединим со входом <tex>R/W = 0D</tex> или модуля памяти. Тогда все триггеры, возможно, кроме <tex>C = 0i</tex>, то все триггеры вернут -го триггера будут только возвращать значения, которые записанные в них записаны. Если же <tex>R/W = 1</tex> , и <tex>C = 1</tex>, то только в <tex>i</tex>-ый триггер запишется поменяет своё значение на входе <tex>D</tex>в случае, тогда как на остальные триггеры на соответствующие им входы если <tex>C= R/W = 1</tex> будут подаваться . Также есть мультиплексор <tex>08</tex>. Потом соединим -to-<tex>i1</tex>-ый триггер с , которому на входы <tex>X_iX_0</tex> входом мультиплексора, также подадим значения на входах <tex>A_0X_1</tex>, <tex>A_1\ldots</tex>, <tex>A_2X_7</tex> подают значения соответственных триггеров, а на входы <tex>S_0</tex>, <tex>S_1</tex>, <tex>S_2</tex> мультиплексора. Тогда мультиплексор подают значения на выход входах <tex>ZA_0</tex> выдаст значение, которое подаётся на <tex>X_iA_1</tex>-ый вход, причём на <tex>QA_2</tex> . Тогда мультиплексор всегда будет подаваться возвращает значение на , хранящееся в <tex>i</tex>-ом бите независимо от значения . Очевидно, что на входе <tex>R/W</tex>, т.к. если был любой запрос "Записать чтения значения в <tex>i</tex>-ый бит значение <tex>D</tex>ом бите модуль памяти возвращает то, то неважночто нужно, а что будет схема возвращает на выходе <tex>Q</tex>"запрос записи неважно.
Однако, такая схема редко используется в реальных электронно-вычислительных машинах, поскольку иногда требуется делать несколько миллионов ячеек памяти, а с помощью такого модуля памяти сделать это будет очень трудно, поскольку такая схема будет потреблять большое количество энергии, а также требует много места и большого количества проводников, что влияет на качество передачи сигнала по проводам. Гораздо эффективнее использовать матричную память, поскольку она позволяет с использованием меньшее количества проводов управлять большим количеством ячеек, а также она менее громоздкая.
390
правок

Навигация