390
правок
Изменения
→Модуль памяти
Допустим, что нам нужно реализовать модуль памяти на 8 бит. Обозначим эти биты как <tex>s_0</tex>, <tex>s_1</tex>, <tex>\ldots</tex>, <tex>s_7</tex>. Также допустим, что у нас есть следующие входы: <tex>a_0</tex>, <tex>a_1</tex>, <tex>a_2</tex>, которые задают номер бита, который следует обработать, также есть вход <tex>R/W</tex>, значение на котором равно <tex>0</tex>, если надо прочитать значение <tex>i</tex>-го бита, где <tex>i</tex> - число, которое кодируется входами <tex>A_0</tex>, <tex>A_1</tex>, <tex>A_2</tex> и вывести его на выход <tex>Q</tex>, или <tex>1</tex>, если надо записать в <tex>i</tex>-ый бит значение на входе <tex>D</tex>. Также есть вход <tex>C</tex> - провод синхронизации.
Давайте для хранения значения в <tex>i</tex>-ом бите будем использовать [[Триггеры#D-триггер|D-триггер]]. Если на входе <tex>c</tex> записано значение <tex>0</tex>, то нам не важно, что находится на выходе <tex>Q</tex>, поэтому эту ситуацию можно свести к ситуации, когда на <tex>C</tex> подано <tex>1</tex>, а на <tex>R/W</tex> - <tex>0</tex>. Теперь осталось реализовать операции чтения и записи. Подадим демультиплексоры на входы значения <tex>A_0S_0</tex>, <tex>A_1S_1</tex>, <tex>A_2S_2</tex> демультиплексора значения на входы входах <tex>S_0A_0</tex>, <tex>S_1A_1</tex>, <tex>S_2A_2</tex>, а на вход демультиплексора <tex>Y</tex> подадим на вход значение гейта <tex>AND</tex>, которому на вход подаются входы <tex>R/W</tex> и <tex>C</tex>. Тогда если либо на входе <tex>R/W</tex> <tex>0</tex>, либо на входе <tex>C</tex> подать <tex>0</tex> то на выходе демультиплексора будут все <tex>0</tex>. Если же и на <tex>R/W</tex> и на <tex>C</tex> подать <tex>1</tex>, то на выходе <tex>Z_i</tex> будет<tex>1</tex>, а на остальных - <tex>0</tex>, где <tex>i</tex> - число, которое кодируется входами <tex>A_0</tex>, <tex>A_1</tex>, <tex>A_2</tex>. Соединим выходы <tex>Z_0</tex>, <tex>Z_1</tex>, <tex>\ldots</tex>, <tex>Z_7</tex> демультиплексора к входам <tex>C</tex> D-триггеров, причём мы соединим выход <tex>Z_i</tex> с триггером, который хранит значение <tex>i</tex>-го бита. Подадим значение на входе <tex>D</tex> элементы памяти на оставшиеся свободными входы триггеров. Если же <tex>R/W = 0</tex> или <tex>C = 0</tex>, то все триггеры вернут значения, которые в них записаны. Если же <tex>R/W = 1</tex> и <tex>C = 1</tex>, то только в <tex>i</tex>-ый триггер запишется значение на входе <tex>D</tex>, тогда как на остальные триггеры на соответствующие им входы <tex>C</tex> будут подаваться <tex>0</tex>. Потом соединим <tex>i</tex>-ый триггер с <tex>X_i</tex> входом мультиплексора, также подадим значения на входах <tex>A_0</tex>, <tex>A_1</tex>, <tex>A_2</tex> на входы <tex>S_0</tex>, <tex>S_1</tex>, <tex>S_2</tex> мультиплексора. Тогда мультиплексор на выход <tex>Z</tex> выдаст значение, которое подаётся на <tex>X_i</tex>-ый вход, причём на <tex>Q</tex> всегда будет подаваться значение на <tex>i</tex>-ом бите независимо от значения на входе <tex>R/W</tex>, т.к. если был запрос "Записать в <tex>i</tex>-ый бит значение <tex>D</tex>, то неважно, что будет на выходе <tex>Q</tex>".
{|