Цифровой логический уровень. Память. Триггеры
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Память
193
Связав различные события с разными перепадами (фронтами и спадами),
можно достичь требуемой последовательности выполнения действий. Если в пределах одного такта нужно более четырех точек начала отсчета, можно сделать еще
несколько ответвлений от задающей линии с различным временем задержки.
Рис. 3.19. Тактовый генератор (а); временная диаграмма тактового генератора (б);
порождение асинхронных тактовых импульсов (в)
В некоторых схемах важны временные интервалы, а не дискретные моменты
времени. Например, некоторое событие может происходить не на фронте импульса, а в любое время, когда уровень импульса С1 высокий. Другое событие
может происходить только в том случае, когда уровень импульса С2 высокий.
Если необходимо более двух интервалов, нужно предоставить больше линий
передачи синхронизирующих импульсов или сделать так, чтобы состояния с высоким уровнем импульса у двух тактовых генераторов частично пересекались во
времени. В последнем случае можно выделить 4 отдельных интервала: С1 И С2,
С1 И С2, С1 И С2 и С1 И С2.
Тактовые генераторы могут быть синхронными. В этом случае время существования импульса с высоким уровнем равно времени существования импульса
с низким уровнем (см. рис. 3.19, б ). Чтобы получить асинхронную серию импульсов (см. сигнал С на рис. 3.19, в), нужно сдвинуть сигнал задающего генератора,
используя цепь задержки. Затем полученный сигнал соединяется с изначальным
сигналом с помощью логической функции И.
Память
Память является необходимым компонентом любого компьютера. Без памяти не
было бы компьютеров, по крайней мере таких, какие есть сейчас. Память используется для хранения как команд, так и данных. В следующих подразделах мы рас-
194
Глава 3. Цифровой логический уровень
смотрим основные компоненты памяти, начиная с уровня вентилей. Мы увидим,
как они работают, как из них можно построить память большой емкости.
Защелки
Чтобы создать один бит памяти, нужна схема, которая каким-то образом «запоминает» предыдущие входные значения. Такую схему можно сконструировать из
двух вентилей НЕ-ИЛИ, как показано на рис. 3.20, а. Аналогичные схемы можно
построить из вентилей НЕ-И. Мы не будем упоминать эти схемы в дальнейшем,
поскольку они по существу идентичны схемам с вентилями НЕ-ИЛИ.
Рис. 3.20. Защелка НЕ-ИЛИ в состоянии 0 (а); защелка НЕ-ИЛИ в состоянии 1 (б );
таблица истинности для функции НЕ-ИЛИ (в)
Схема, изображенная на рис. 3.20, а, называется SR-защелкой. У нее есть
два входа: S (Setting — установка) и R (Resetting — сброс). У нее также есть два
комплиментарных выхода: Q и Q. В отличие от комбинаторной схемы, выходные
сигналы защелки не определяются текущими входными сигналами.
Чтобы понять, как работает защелка, предположим, что S = 0 и R = 0 (вообще сигнал на этих входах равен 0 большую часть времени). Предположим
также, что Q = 0. Так как Q возвращается в верхний вентиль НЕ-ИЛИ и оба
входа этого вентиля равны 0, то его выход, Q, равен 1. Единица возвращается
в нижний вентиль, у которого в итоге один вход равен 0, другой — 1, а на выходе
получается Q = 0. Такое состояние по крайней мере логически последовательно
(см. рис. 3.20, а).
А теперь давайте представим, что Q = 1, а R и S все еще равны 0. Верхний
вентиль имеет входы 0 и 1 и выход Q (то есть 0), который возвращается в нижний вентиль. Такое состояние, изображенное на рис. 3.20, б, также логически
последовательно. Положение, когда оба выхода равны 0, не является логически
последовательным, поскольку в этом случае оба вентиля имели бы на входе два
нуля, что привело бы к единице на выходе, а не к нулю. Точно так же невозможно
иметь оба выхода равные 1, поскольку это привело бы к входным сигналам 0 и 1,
что вызывает на выходе 0, а не 1. Наш вывод прост: при R = S = 0 защелка имеет
два устойчивых состояния, которые мы будем называть 0 и 1 в зависимости от Q.
А сейчас давайте рассмотрим действие входных сигналов на состояние защелки. Предположим, что S принимает значение 1, в то время как Q = 0. Тогда
входные сигналы верхнего вентиля равны 1 и 0, что ведет к выходному сигналу
Память
195
Q = 0. Это изменение делает оба входа в нижний вентиль равными 0, и, следовательно, выходной сигнал равняется 1. Таким образом, установка S в значение 1
переключает состояние с 0 на 1. Установка R в значение 1, когда защелка находится в состоянии 0, не вызывает изменений, поскольку выход нижнего вентиля
НЕ-ИЛИ равен 0 как для входов 10, так и для входов 11.
Используя подобные рассуждения, легко увидеть, что установка S в значение 1 при состоянии защелки 1 (то есть при Q = 1) не вызывает изменений,
но установка R в значение 1 приводит к изменению состояния защелки. Таким
образом, если S принимает значение 1, то Q равняется 1 независимо от предыдущего состояния защелки. Сходным образом переход R в значение 1 вызывает
Q = 0. Схема «запоминает», какой сигнал был последним: S или R. Используя
это свойство, мы можем строить компьютерную память.
Синхронные SR-защелки
Часто бывает удобно, чтобы состояние защелки могло изменяться только в определенные моменты. Чтобы достичь этой цели, немного изменим основную схему
и получим синхронную SR-защелку (рис 3.21).
Рис. 3.21. Синхронная SR-защелка
Эта схема имеет дополнительный синхронизирующий вход, который по большей части равен 0. Если этот вход равен 0, то оба выхода вентилей И равны 0,
и независимо от значений S и R защелка не меняет свое состояние. Когда значение синхронизирующего входа равно 1, действие вентилей И прекращается,
и состояние защелки становится зависимым от S и R. Для обозначения факта
появления единицы на синхронизирующем входе часто используются термины
включение и стробирование.
До сих пор мы не выясняли, что происходит, когда S = R = 1. И по понятным
причинам: когда и R, и S в конце концов возвращаются к 0, схема становится
недетерминированной. Единственное приемлемое состояние при S = R = 1 — это
Q = Q = 0, но как только оба входа возвращаются к 0, защелка должна перейти в
одно из двух устойчивых состояний. Если один из входов принимает значение 0
раньше, чем другой, оставшийся в состоянии 1 «побеждает», потому что именно
единичный вход управляет состоянием защелки. Если оба входа переходят к 0
одновременно (что очень маловероятно), защелка выбирает одно из своих устойчивых состояний произвольным образом.
Синхронные D-защелки
Чтобы разрешить ситуацию с неопределенностью SR-защелки (неопределенность
возникает в случае, если S = R = 1), нужно предотвратить ее возникновение.
196
Глава 3. Цифровой логический уровень
На рис. 3.22 изображена схема защелки только с одним входом D. Так как
входной сигнал в нижний вентиль И всегда является обратным кодом входного
сигнала в верхний вентиль И, ситуация, когда оба входа равны 1, никогда не
возникает. Когда D = 1 и синхронизирующий вход равен 1, защелка переходит
в состояние Q = 1. Когда D = 0 и синхронизирующий вход равен 1, защелка
переходит в состояние Q = 0. Другими словами, когда синхронизирующий вход
равен 1, текущее значение D отбирается и сохраняется в защелке. Такая схема, которая называется синхронной D-защелкой, представляет собой память
объемом один бит. Сохраненное значение всегда доступно на выходе Q. Чтобы
загрузить в память текущее значение D, нужно пустить положительный импульс
по линии синхронизирующего сигнала.
Рис. 3.22. Синхронная D-защелка
Такая схема требует 11 транзисторов. Более сложные схемы (именно они
обычно используются на практике) могут хранить один бит всего на 6 транзисторах. Схема остается в устойчивом состоянии до тех пор, пока на нее подается
питание (на рисунке не обозначено). Позднее мы рассмотрим схемы, которые
быстро забывают состояние, в котором они находятся, — чтобы этого не происходило, им необходимы постоянные «напоминания».
Триггеры
Многие схемы при необходимости выбирают значение на определенной линии
в заданный момент времени и запоминают его. В такой схеме, которая называется
триггером (flip-flop), смена состояния происходит не тогда, когда синхронизирующий сигнал равен 1, а при переходе синхронизирующего сигнала с 0 на 1
(фронт) или с 1 на 0 (спад). Следовательно, длина синхронизирующего импульса
не имеет значения, поскольку переходы происходят быстро.
Подчеркнем еще раз отличие между триггером и защелкой. Триггер запускается перепадом сигнала, а защелка запускается уровнем сигнала. Обратите
внимание, что в литературе эти термины часто путают. Многие авторы используют термин «триггер», когда речь идет о защелке, и наоборот1.
Существуют несколько подходов к проектированию триггеров. Например,
если бы существовал способ генерирования очень короткого импульса на фронте
синхронизирующего сигнала, этот импульс можно было бы подавать в D-защелку.
1
В отечественной литературе термин «защелка» (latch) вообще не используется, говорят о триггерах.
Однако при этом вводится понятие Т-триггера, который и является «настоящим» триггером. —
Примеч. науч. ред.
Память
197
В действительности такой способ существует. Соответствующая схема показана
на рис. 3.23, а.
Рис. 3.23. Генератор импульса (а); временная диаграмма для четырех точек на схеме (б)
На первый взгляд может показаться, что выход вентиля И всегда будет нулевым, поскольку функция И от любого сигнала с его инверсией дает 0, но на
самом деле ситуация несколько сложнее. При прохождении сигнала через инвертор происходит небольшая, но все-таки не нулевая задержка. Данная схема
работает именно благодаря этой задержке. Предположим, мы измеряем напряжение в четырех точках a, b, c и d. Входной сигнал в точке a представляет собой
длинный синхронизирующий импульс (нижний график на рис. 3.24, б ). Сигнал
в точке b показан над ним. Отметим, что этот сигнал инвертирован и подается
с некоторой задержкой. Время задержки зависит от типа инвертора и обычно
составляет несколько наносекунд.
Сигнал в точке c тоже подается с задержкой, но эта задержка обусловлена
только временем прохождения сигнала (со скоростью света). Если физическое
расстояние между точками a и с составляет, например, 20 микрон, тогда задержка на распространение сигнала равна 0,0001 нс, что, конечно, незначительно по
сравнению с временем прохождения сигнала через инвертор. Таким образом,
сигнал в точке c практически идентичен сигналу в точке a.
Когда входные сигналы b и c подвергаются операции И, в результате получается короткий импульс, длина которого (∆) равна вентильной задержке инвертора (обычно 5 нс и ниже). Выходной сигнал вентиля И — данный импульс,
сдвинутый из-за задержки вентиля И (верхний график на рис. 3.24, б ). Этот временной сдвиг означает только то, что D-защелка активизируется с определенной
задержкой после фронта синхронизирующего импульса. Он никак не влияет на
длину импульса. В памяти со временем цикла в 10 нc импульс в 1 нc (который
сообщает, когда нужно выбирать линию D) достаточно короткий, и в этом случае
198
Глава 3. Цифровой логический уровень
полная схема может быть такой, как на рис. 3.24. Следует упомянуть, что такая
схема триггера проста для понимания, но на практике обычно используются
более сложные триггеры.
Рис. 3.24. D-триггер
Стандартные обозначения защелок и триггеров показаны на рис. 3.25. На
рис. 3.25, а изображена защелка, состояние которой загружается тогда, когда
синхронизирующий сигнал CK (от слова clock) равен 1, в противоположность
защелке, изображенной на рис. 3.25, б, у которой синхронизирующий сигнал
обычно равен 1, но который переходит на 0, чтобы загрузить состояние из линии D. На рисунках 3.25, в, г изображены триггеры. О том, что это триггеры, а не
защелки, говорит уголок на синхронизирующем входе. Триггер на рис. 3.25, в
изменяет состояние на фронте синхронизирующего импульса (переход от 0 к 1),
тогда как триггер на рис. 3.25, г изменяет состояние на спаде (переход от 0 к 1).
Многие (хотя не все) защелки и триггеры также имеют выход Q, а у некоторых
есть два дополнительных входа: Set (установка) или Preset (предварительная
установка) и Reset (сброс) или Clear (очистка). Первый вход (Set или Preset)
устанавливает Q = 1, а второй (Reset или Clear) — Q = 0.
Рис. 3.25. D-защелки и D-триггеры
Регистры
Существуют различные конфигурации триггеров. На рис. 3.26 показано, как восемь триггеров объединяются для формирования 8-разрядного регистра. Регистр
получает 8-разрядное входное значение (I0 –I 7) при изменении синхронизирующего сигнала CK. Все синхронизирующие линии связаны с одним входным
сигналом CK, чтобы при изменении состояния CK регистр получал новое 8-разрядное значение данных с входной шины. Сами триггеры того же типа, что и на
рис. 3.25, г, но инвертирующие входы аннулируются инвертором, связанным
Память
199
с CK, поэтому триггеры запускаются при переходе от 0 к 1. Все восемь сигналов
очистки тоже объединены, поэтому когда сигнал сброса CLR переходит в состояние 0, все триггеры переходят в состояние 0. Если вам не понятно, почему
синхронизирующий сигнал CK инвертируется на входе, а затем инвертируется
снова в каждом триггере, то ответ прост: входной сигнал не имеет достаточной
мощности, чтобы запустить все восемь триггеров; входной инвертор на самом
деле используется в качестве усилителя.
O0
I0 O1
Q
Q
D
I2 O3
Q
D
O3 CK
Q
D
CK
CLR
CK
CLR
CK
CLR
CK
CLR
CLR
CK
CLR
CK
CLR
CK
CLR
CK
Q
CLR O4
D
I1 O2
Q
D
I4 O5
D
Q
I5 O6
D
Q
I6 O7
D
I7
Рис. 3.26. 8-разрядный регистр, построенный из одноразрядных триггеров
8-разрядный регистр может использоваться в качестве структурного элемента для построения регистров большей разрядности. Например, 32-разрядный
регистр может быть построен из двух 16-разрядных регистров, для чего следует
связать их синхронизирующие линии CK и линии сброса CLR. Регистры и их
применение мы рассмотрим более подробно в главе 4.
Организация памяти
Хотя мы и совершили переход от простой памяти емкостью в 1 бит (см. рис. 3.22)
к 8-разрядной памяти (см. рис. 3.26, б), для построения памяти большого объема
потребуется другой способ организации, при котором можно обращаться к отдельным словам. Пример организации памяти, которая удовлетворяет этому
критерию, показан на рис. 3.27. Эта память содержит четыре 3-разрядных слова.
Каждая операция считывает или записывает целое 3-разрядное слово. Хотя общий объем памяти (12 бит) не на много больше, чем у 8-разрядного триггера,
такая память требует меньшего количества выводов, и, что особенно важно,
подобная организация применима для построения памяти большого объема.
Обратите внимание: количество слов всегда равно степени 2.
Хотя организация памяти, изображенной на рис. 3.28, может на первый взгляд
показаться сложной, на самом деле она очень проста благодаря своей регулярной структуре. Микросхема содержит 8 входных линий, в частности 3 входа для
данных — I0, I1 и I2; 2 входа для адресов — A0 и A1; 3 входа для управления — CS
(Chip Select — выбор элемента памяти), RD (ReaD — чтение, этот сигнал позволяет отличать считывание от записи) и OE (Output Enable — разрешение выдачи выходных сигналов), а также 3 выходные линии для данных — O0, O1 и O2.
200
Глава 3. Цифровой логический уровень
Рис. 3.27. Логическая блок-схема для памяти 4 3. Каждый ряд представляет одно
из 3-разрядных слов. При считывании и записи всегда считывается или записывается
целое слово
Интересно, что такая 12-разрядная память требует меньшего количества выводов,
чем 8-разрядный регистр из предыдущего примера. 8-разрядный триггер требует
наличия 20 выводов (включая питание и землю), а для 12-разрядной памяти
достаточно всего 13, поскольку в отличие от регистра 4 бита памяти совместно
используют один выходной сигнал. Состояние адресного входа определяет, каким
четырем битам памяти разрешается ввод или вывод значения.
Чтобы выбрать этот блок памяти, внешняя логика должна установить сигнал CS в 1, а также установить сигнал RD в 1 для чтения и в 0 для записи. Две
адресные линии должны указывать, какое из четырех 3-разрядных слов нужно
считывать или записывать. При считывании входные линии для данных не ис-
Память
201
пользуются, а выбранное слово подается на выходные линии для данных. При
записи биты, находящиеся на входных линиях для данных, загружаются в выбранное слово памяти; выходные линии при этом не используются.
А теперь давайте посмотрим, как работает память, изображенная на рис. 3.27.
Четыре вентиля И для выбора слов в левой части схемы формируют декодер.
Входные инверторы расположены так, что каждый вентиль запускается определенным адресом. Каждый вентиль приводит в действие линию выбора слов (для
слов 0, 1, 2 и 3). Когда микросхема должна производить запись, вертикальная
линия CSRD получает значение 1, запуская один из четырех вентилей записи. Выбор вентиля зависит от того, какая именно линия выбора слов равна 1.
Выходной сигнал вентиля записи приводит в действие все сигналы CK для выбранного слова, загружая входные данные в триггеры для этого слова. Запись производится только в том случае, если сигнал CS равен 1, а RD — 0, при этом записывается только слово, выбранное адресами А0 и А1; остальные слова не меняются.
Процесс считывания сходен с процессом записи. Декодирование адреса
происходит точно так же, как и при записи. Но в данном случае линия CSRD
принимает значение 0, поэтому все вентили записи блокируются, и ни один из
триггеров не меняется. Вместо этого линия выбора слов запускает вентили И,
связанные с битами Q выбранного слова. Таким образом, выбранное слово передает свои данные в 4-входовые вентили ИЛИ, расположенные в нижней части
схемы, а остальные три слова выдают 0. Следовательно, выход вентилей ИЛИ
идентичен значению, сохраненному в данном слове. Остальные три слова никак
не влияют на выходные данные.
Мы могли бы разработать схему, в которой три вентиля ИЛИ соединялись бы
с тремя линиями вывода данных, но это вызвало бы некоторые проблемы. Мы
рассматривали линии ввода данных и линии вывода данных как разные линии.
На практике же используются одни и те же линии. Если бы мы связали вентили
ИЛИ с линиями вывода данных, микросхема пыталась бы выводить данные (то
есть задавать каждой линии определенную величину) даже в процессе записи, мешая нормальному вводу данных. По этой причине желательно каким-то образом
соединять вентили ИЛИ с линиями вывода данных при считывании и полностью
разъединять их при записи. Все, что нам нужно — электронный переключатель,
который может устанавливать и разрывать связь за долю наносекунды.
К счастью, такие переключатели существуют. На рис. 3.28, а показано символическое изображение так называемого буферного элемента без инверсии. Он
содержит входную линию для данных, выходную линию для данных и входную
линию для управления. Когда управляющий вход равен 1, буферный элемент работает как проводник (рис. 3.28, б ). Когда управляющий вход равен 0, буферный
элемент работает как изолятор (рис. 3.28, в), как будто кто-то отрезает выход для
данных от остальной части схемы кусачками. Соединение может быть восстановлено за несколько наносекунд, если сделать сигнал управления равным 1.
На рис. 3.28, г показан буферный элемент с инверсией, который действует
как обычный инвертор, когда сигнал управления равен 1, и отделяет выход от
остальной части схемы, когда сигнал управления равен 0. Оба буферных элемента представляют собой устройства с тремя состояниями, поскольку могут
выдавать нулевой сигнал, единичный сигнал или вообще не выдавать никакого
сигнала (случай разомкнутой цепи). Буферные элементы, кроме того, усиливают
202
Глава 3. Цифровой логический уровень
Рис. 3.28. Буферный элемент без инверсии (а); представление буферного элемента
без инверсии, когда сигнал управления равен 1 (б ); представление буферного элемента
без инверсии, когда сигнал управления равен 0 (в); буферный элемент с инверсией (г )
сигналы, поэтому они могут справляться с большим количеством сигналов одновременно. Иногда они используются в схемах именно в качестве усилителей, при
этом их способность переключения не используется.
Теперь вам уже должно быть понятно, для чего нужны три буферных элемента без инверсии на линиях вывода данных. Когда сигналы CS, RD и OE равны 1,
то сигнал разрешения выдачи выходных данных также равен 1, в результате запускаются буферные элементы, и слово помещается на выходные линии. Когда
один из сигналов CS, RD и OE равен 0, выходы отсоединяются от остальной
части схемы.
Микросхемы памяти
Преимущество памяти, изображенной на рис. 3.27, состоит в том, что подобная
структура применима при разработке памяти большого объема. На рисунке показана схема 4 3 (для 4-х слов по 3 бита каждое). Чтобы расширить ее до размеров 4 8, нужно добавить еще 5 колонок триггеров по 4 триггера в каждой,
а также 5 входных и 5 выходных линий. Чтобы перейти от схемы 4 3 к схеме
8 3, требуется добавить еще четыре ряда триггеров по три триггера в каждом,
а также адресную линию А2. При такой структуре число слов в памяти должно
быть степенью двойки для максимальной эффективности, а число битов в слове
может быть любым.
Технология изготовления интегральных схем идеально соответствует регулярной структуре микросхем памяти. С развитием технологии число битов,
которое можно вместить в одной микросхеме, постоянно растет, обычно в два
раза каждые 18 месяцев (закон Мура). С появлением больших микросхем маленькие микросхемы не всегда срезу устаревают, поскольку всегда существует
компромисс между емкостью, быстродействием, мощностью, ценой и удобством
сопряжения. Обычно самые большие современные микросхемы пользуются
огромным спросом и, следовательно, стоят дороже в расчете за один бит, чем
микросхемы небольшого размера.
При любом объеме памяти существуют несколько вариантов организации
микросхемы. На рис. 3.29 показаны две возможные структуры микросхемы емкостью 4 Мбит: 512 К 8 и 4096 К 1 (размеры микросхем памяти обычно даются
в битах, а не в байтах, поэтому здесь мы будем придерживаться этого соглашения). На рис. 3.29, а можно видеть 19 адресных линий для обращения к одному
из 219 байт и 8 линий данных для загрузки или хранения выбранного байта.
Память
203
Рис. 3.29. Два способа организации памяти объемом 4 Мбит
Сделаем небольшое замечание по поводу терминологии. На одних выводах
высокое напряжение вызывает какое-либо действие, на других остается низкое
напряжение. Чтобы избежать путаницы, мы будем употреблять термин установить сигнал, когда вызывается какое-то действие, вместо того чтобы говорить,
что напряжение повышается или понижается. Таким образом, для одних выводов
установка сигнала означает установку единицы, для других — установку нуля.
Названия выводов, которые устанавливаются в 0, содержат сверху черту. То
есть сигнал CS — это единица, сигнал CS — ноль. Противоположный термин —
сбросить.
А теперь вернемся к нашей микросхеме. Поскольку обычно компьютер содержит много микросхем памяти, нужен сигнал для выбора необходимой микросхемы, такой, чтобы нужная нам микросхема реагировала на вызов, а остальные
нет. Сигнал CS (Chip Select — выбор элемента памяти) используется именно для этой цели. Он устанавливается, чтобы запустить микросхему. Кроме
того, нужен способ, чтобы отличать считывания от записи. Сигнал WE (Write
Enable — разрешение записи) указывает на то, что данные должны записываться,
а не считываться. Наконец, сигнал OE (Output Enable — разрешение вывода)
устанавливается для выдачи выходных сигналов. Когда этого сигнала нет, выход
отсоединяется от остальной части схемы.
На рис. 3.30, б используется другая схема адресации. Микросхема представляет собой матрицу размером 2048 2048 однобитных ячеек, что составляет
4 Мбит. Чтобы обратиться к микросхеме, сначала нужно выбрать строку. Для
этого 11-разрядный номер этой строки подается на адресные выводы. Затем
устанавливается сигнал RAS (Row Address Strobe — строб адреса строки). После
этого на адресные выводы подается номер столбца и устанавливается сигнал
CAS (Column Address Strobe — строб адреса столбца). Микросхема реагирует на
сигнал, принимая или выдавая один бит данных.
204
Глава 3. Цифровой логический уровень
Большие микросхемы памяти часто производятся в виде матриц размером
m n, обращение к которым происходит по строкам и столбцам. Такая организация памяти сокращает число необходимых выводов, но, с другой стороны,
замедляет обращение к микросхеме, поскольку требуется два цикла адресации:
один для строки, другой для столбца. Потеря скорости отчасти компенсируется
тем, что в некоторых микросхемах возможна передача адреса строки с последующей передачей нескольких адресов столбцов для обращения к последовательным
битам строки.
Много лет назад самые большие микросхемы памяти обычно были устроены
так, как показано на рис. 3.29, б. Поскольку размер слов увеличился от 8 до
32 бит и выше, использовать подобные микросхемы стало неудобно. Чтобы из
микросхем 4096 K 1 построить память с 32-разрядными словами, требуется
32 микросхемы, работающие параллельно. Эти 32 микросхемы имеют общий
объем по крайней мере 16 Мбайт. Если использовать микросхемы 512 K 8, то
потребуется всего 4 микросхемы, но при этом объем памяти составит 2 Мбайт.
Чтобы не возиться с 32 микросхемами, большинство производителей выпускают
семейства микросхем с длиной слов 4, 8 и 16 бит. Ситуация с 64-разрядными
словами, естественно, еще хуже.
Примеры современных микросхем объемом 512 Мбит показаны на рис. 3.30.
В каждой такой микросхеме содержится четыре внутренних банка памяти по
128 Мбит; соответственно, для определения банка требуются две линии выбора
банка. На микросхеме 32 М 16, показанной на рис. 3.30, а, 13 линий выделено
для сигналов RAS, 10 для сигналов CAS и 2 линии для выбора банка. Взятые
в целом, 25 сигналов обеспечивают возможность адресации 225 внутренних
16-разрядных ячеек. На микросхеме 128 М 4, изображенной на рис. 3.30, б,
для сигналов RAS выделено 13 линий, для CAS — 12 линий, для выбора банка —
Рис. 3.30. Два способа организации микросхемы памяти объемом 512 Мбит
Память
205
2 линии. Таким образом, 27 сигналов делают возможной адресацию любой из
227 внутренних 4-разрядных ячеек. Количества строк и столбцов в микросхемах
определяются на основании инженерных факторов. Матрица не обязательно
должна быть квадратной.
Эти примеры наглядно демонстрируют значимость двух не связанных друг
с другом аспектов конструирования микросхем памяти. Первый касается ширины
выхода (в битах) — иначе говоря, количества битов (1, 4, 8, 16 и пр.) в выходном сигнале. Второй аспект заключается в способе представления битов адреса;
здесь есть два варианта: во-первых, биты адресов могут быть представлены
одновременно на разных выводах, во-вторых, может быть последовательное
представление строк и столбцов — так, как показано на рис. 3.30. Прежде чем
приступать к проектированию микросхемы, специалист должен определиться
с обоими аспектами.
ОЗУ и ПЗУ
Все виды памяти, которые мы рассматривали до сих пор, имеют одно общее
свойство: они позволяют и записывать, и считывать информацию. Такая память
называется ОЗУ (оперативное запоминающее устройство), или RAM (Random
Access Memory — оперативная память). Существует два типа ОЗУ: статическое
и динамическое. Статическое ОЗУ (Static RAM, SRAM) конструируется с использованием D-триггеров. Информация в ОЗУ сохраняется на протяжении
всего времени, пока к нему подается питание: секунды, минуты, часы и даже
дни. Статическое ОЗУ работает очень быстро. Обычно время доступа составляет
несколько наносекунд. По этой причине статическое ОЗУ часто используется
в качестве кэш-памяти второго уровня.
В динамическом ОЗУ (Dynamic RAM, DRAM), напротив, триггеры не используются. Динамическое ОЗУ представляет собой массив ячеек, каждая из которых
содержит транзистор и крошечный конденсатор. Конденсаторы могут быть заряженными и разряженными, что позволяет хранить нули и единицы. Поскольку
электрический заряд имеет тенденцию исчезать, каждый бит в динамическом
ОЗУ должен обновляться (перезаряжаться) каждые несколько миллисекунд,
чтобы предотвратить утечку данных. Поскольку об обновлении должна заботиться
внешняя логика, динамическое ОЗУ требует более сложного сопряжения, чем
статическое, хотя этот недостаток компенсируется большим объемом.
Поскольку динамическому ОЗУ нужен только один транзистор и один конденсатор на бит (статическому ОЗУ требуется в лучшем случае 6 транзисторов
на бит), динамическое ОЗУ имеет очень высокую плотность записи (много битов
на одну микросхему). По этой причине основная память почти всегда строится на
основе динамических ОЗУ. Однако динамические ОЗУ работают очень медленно
(время доступа занимает десятки наносекунд). Таким образом, сочетание кэшпамяти на основе статического ОЗУ и основной памяти на основе динамического
ОЗУ соединяет в себе преимущества обоих устройств.
Существует несколько типов динамических ОЗУ. Самый древний тип, который все еще используется, — FPM (Fast Page Mode — быстрый постраничный
режим). Это ОЗУ представляет собой матрицу битов. Аппаратное обеспечение
представляет адрес строки, а затем — адреса столбцов (мы описывали этот
206
Глава 3. Цифровой логический уровень
процесс, когда говорили об устройстве памяти, показанном на рис. 3.29, б).
Благодаря явно передаваемым сигналам память работает асинхронно по отношению к главному тактовому генератору системы.
FPM постепенно замещается памятью EDO (Extended Data Output — память
с расширенными возможностями вывода)1, которая позволяет обращаться к памяти еще до того, как закончилось предыдущее обращение. Такой конвейерный
режим, хотя и не ускоряет доступ к памяти, повышает пропускную способность,
позволяя получить больше слов в секунду.
Память типа FPM и EDO сохраняла актуальность в те времена, когда продолжительность цикла работы микросхем памяти не превышала 12 нс. Впоследствии,
с увеличением быстродействия процессоров, сформировалась потребность в более быстрых микросхемах памяти, и тогда на смену асинхронным режимам FPM
и EDO пришли синхронные динамические ОЗУ (Synchronous DRAM, SDRAM).
Синхронное динамическое ОЗУ управляется от главного системного тактового
генератора. Данное устройство представляет собой гибрид статического и динамического ОЗУ. Основное преимущество синхронного динамического ОЗУ
состоит в том, что оно исключает зависимость микросхемы памяти от управляющих сигналов. ЦП сообщает памяти, сколько циклов следует выполнить, а затем запускает ее. Каждый цикл на выходе дает 4, 8 или 16 бит в зависимости от
количества выходных строк. Устранение зависимости от управляющих сигналов
приводит к ускорению передачи данных между ЦП и памятью.
Следующим этапом в развитии памяти SDRAM стала память DDR (Double
Data Rate — передача данных с двойной скоростью). Эта технология предусматривает вывод данных как на фронте, так и на спаде импульса, вследствие чего
скорость передачи увеличивается вдвое. Например, 8-разрядная микросхема
такого типа, работающая с частотой 200 МГц, дает на выходе два 8-разрядных
значения 200 миллионов раз в секунду (разумеется, такая скорость удерживается
в течение небольшого периода времени); таким образом, теоретически, кратковременная скорость может достигать 3,2 Гбайт/с. Интерфейсы памяти DDR2
и DDR3 обеспечивают дополнительный прирост производительности по сравнению с DDR за счет повышения скорости шины памяти до 533 МГц и 1067 МГц
соответственно. На момент издания книги самые быстрые микросхемы DDR3
могли выдавать данные на скорости 17,067 Гбайт/с.
Энергонезависимая память
ОЗУ — не единственный тип микросхем памяти. Во многих случаях данные
должны сохраняться даже при отключенном питании (например, если речь
идет об игрушках, различных приборах и машинах). Более того, после установки ни программы, ни данные не должны изменяться. Эти требования привели
к появлению ПЗУ (постоянных запоминающих устройств), или ROM (ReadOnly Memory — постоянная память). ПЗУ не позволяют изменять и стирать
хранящуюся в них информацию (ни умышленно, ни случайно). Данные записываются в ПЗУ в процессе производства. Для этого изготавливается трафарет
с определенным набором битов, который накладывается на фоточувствительный
1
Динамическая память типа EDO практически вытеснила обычную динамическую память, работающую в режиме FPM, в середине девяностых годов. — Примеч. науч. ред.
Память
207
материал, а затем открытые (или закрытые) части поверхности вытравливаются.
Единственный способ изменить программу в ПЗУ — поменять всю микросхему.
ПЗУ стоят гораздо дешевле ОЗУ, если заказывать их большими партиями,
чтобы оплатить расходы на изготовление трафарета. Однако они не допускают
изменений после выпуска с производства, а между подачей заказа на ПЗУ и его
выполнением может пройти несколько недель. Чтобы компаниям было проще
разрабатывать новые устройства, основанные на ПЗУ, были выпущены программируемые ПЗУ (Programmable ROM, PROM). В отличие от обычных ПЗУ,
их можно программировать в условиях эксплуатации, что позволяет сократить
время исполнения заказа. Многие программируемые ПЗУ содержат массив крошечных плавких перемычек. Чтобы пережечь определенную перемычку, нужно
выбрать требуемые строку и столбец, а затем приложить высокое напряжение
к определенному выводу микросхемы.
Следующая разработка этой линии — стираемое программируемое ПЗУ
(Erasable PROM, EPROM), которое можно не только программировать в условиях эксплуатации, но и стирать с него информацию. Если кварцевое окно
в данном ПЗУ подвергать воздействию сильного ультрафиолетового света в течение 15 минут, все биты установятся в 1. Если нужно сделать много изменений
во время одного этапа проектирования, стираемые ПЗУ гораздо экономичнее,
чем обычные программируемые ПЗУ, поскольку их можно использовать многократно. Стираемые программируемые ПЗУ обычно устроены так же, как статические ОЗУ. Например, микросхема 27С040 имеет структуру, которая показана
на рис. 3.30, а, а такая структура типична для статического ОЗУ. Интересно,
что подобные «древние» микросхемы не вымирают. Становятся дешевле и используются в бюджетных продуктах, для которых критична стоимость. Сейчас
одиночные микросхемы 27C040 можно купить дешевле $3, а при большом размере партии они обойдутся значительно дешевле.
Следующий этап — электронно перепрограммируемое ПЗУ (Electronically
EPROM, EEPROM), которое не нужно для этого помещать в специальную камеру, чтобы подвергнуть воздействию ультрафиолетовых лучей — для стирания
информации достаточно подать соответствующие импульсы. Кроме того, чтобы
перепрограммировать данное устройство, его не нужно вставлять в специальный
аппарат для программирования, в отличие от стираемого программируемого
ПЗУ. В то же время самые большие электронно перепрограммируемые ПЗУ
в 64 раза меньше обычных стираемых ПЗУ, и работают они в два раза медленнее.
Электронно перепрограммируемые ПЗУ не могут конкурировать с динамическими и статическими ОЗУ, поскольку работают в 10 раз медленнее, их емкость
в 100 раз меньше, и они стоят гораздо дороже. Они используются только в тех ситуациях, когда необходимо сохранять информацию при выключении питания.
Более современный тип электронно перепрограммируемого ПЗУ — флэшпамять. В отличие от стираемого ПЗУ, которое стирается под воздействием
ультрафиолетовых лучей, и от электронно перепрограммируемого ПЗУ, которое
стирается по байтам, флэш-память стирается и записывается блоками. Многие
изготовители производят небольшие печатные платы, содержащие до 64 Гбайт
флэш-памяти. Они используются для хранения изображений в цифровых камерах и для других целей. Как было сказано в главе 2, флэш-память постепенно
начинает вытеснять диски, что будет грандиозным шагом вперед, учитывая время
208
Глава 3. Цифровой логический уровень
доступа в 50 нс. Флэш-память обеспечивает лучшее время доступа при более
низком энергопотреблении; с другой стороны, стоимость одного бита флэшпамяти существенно выше, чем у дисков. Краткое описание различных типов
памяти дано в табл. 3.2.
Таблица 3.2. Характеристики различных типов памяти
Тип запо
минающего
устройства
Категория Стирание
информа
ции
Измене
ние ин
формации
по байтам
Необхо
димость
питания
Применение
SRAM
Чтение
и запись
Электрическое
Да
Да
Кэш-память второго уровня
DRAM
Чтение
и запись
Электрическое
Да
Да
Основная память
(старые модели)
SDRAM
Чтение
и запись
Электрическое
Да
Да
Основная память
(новые модели)
ROM
Только
чтение
Невозможно Нет
Нет
Устройства большого объема
PROM
Только
чтение
Невозможно Нет
Нет
Устройства небольшого объема
EPROM
Преимущественно
чтение
Ультрафио- Нет
летовый свет
Нет
Построение прототипов устройств
EEPROM
Преимущественно
чтение
Электрическое
Да
Нет
Построение прототипов устройств
Электрическое
Нет
Нет
Цифровые камеры
Флэш-память Чтение
и запись
FPGA
Как упоминалось в главе 1, программируемые вентильные матрицы (FPGA)
представляют собой микросхемы с программируемой логикой — загрузив в FPGA
подходящие конфигурационные данные, можно получить произвольную логическую схему. Главное преимущество FPGA — возможность построения новых
аппаратных схем за считанные часы (вместо месяцев, уходящих на производство
микросхем). Однако интегрированные схемы не собираются уходить в прошлое — их стоимость в больших партиях существенно ниже, чем у FPGA, они
быстрее работают и потребляют меньшую мощность. Однако FPGA из-за своих
преимуществ на стадии проектирования часто применяются при построении
прототипов устройств и в производстве малыми сериями.
Давайте поближе познакомимся с FPGA и разберемся, как же они используются для реализации широкого диапазона логических схем. Микросхема FPGA
состоит из двух основных компонентов, многократно повторяемых в ее архитектуре: таблиц преобразования LUT (LookUp Table) и программируемых связей.
FPGA
209
LUT (рис. 3.31 a) представляет собой маленький блок программируемой
памяти, который выдает сигнал, передаваемый в регистр (не обязательно), а
затем в программируемую связь. Программируемая память используется для
создания произвольной логической функции. LUT на рисунке имеет память
164, которая способна эмулировать любую логическую схему с четырьмя
входными и четярьмя выходными битами. Для программирования LUT в память
записываются ответы эмулируемой комбинаторной логики. Иначе говоря, если
комбинаторная логика для ввода X выдает значение Y, то последнее записывается
в LUT с индексом X.
Пример на рис. 3.31, б показывает, как один 4-разрядный блок LUT реализует
3-разрядный счетчик со сбросом. Счетчик из приведенного значения прибавляет
к своему текущему значению 1 (сложение по модулю 4), пока не будет получен
сигнал сброса CLR; в этом случае счетчик сбрасывается в 0.
В реализации счетчика из этого примера четыре верхних элемента LUT заполняются нулями. Они обеспечивают вывод 0 при сбросе счетчика. Таким образом,
старший бит LUT (I3) представляет входной сигнал сброса (CLR). У остальных
элементов LUT значение с индексом I0..3 содержит результат операции (I + 1)
по модулю 4. Для завершения этой схемы выходной сигнал O0..3 должен быть
соединен через программируемую связь с внутренним входным сигналом I0..3.
Рис. 3.31. Таблица преобразования FPGA (a); конфигурация LUT
для создания 3-разрядного счетчика со сбросом (б )
Чтобы лучше понять устройство счетчика FPGA со сбросом, рассмотрим его
работу. Если, например, текущее состояние счетчика равно 2, а сигнал сброса
(CLR) не установлен, то входной адрес LUT будет равен 2, что приведет к выводу
в триггер 3. Если в этом состоянии будет установлен сигнал сброса (CLR), то на
вход LUT поступит 6, в результате чего следующее состояние будет равно 0.
В общем и целом кажется, что перед нами всего лишь хитроумный способ создания счетчика со сбросом. В самом деле, схема с цепью инкремента и сигналом
сброса на триггерах будет более компактной, быстрой и расходующей меньше
энергии. Главное преимущество схемы на базе FPGA заключается в том, что ее
можно построить за час дома, тогда как более эффективную специализированную
схему придется производить в кремнии, на что уйдет месяц и более.
210
Глава 3. Цифровой логический уровень
Чтобы использовать FPGA, необходимо создать описание схемы или программу на языке описания оборудования (язык программирования, используемый
для описания аппаратных структур). Описание обрабатывается синтезатором,
который связывает схему с конкретной архитектурой FPGA. Одна из проблем
с использованием FPGA заключается в том, что потребности конкретной схемы
часто не укладываются в возможности FPGA. FPGA производятся с переменным
числом LUT, при этом увеличение количества последних приводит к возрастанию
стоимости. Как правило, если результат не укладывается в рамки требований,
приходится либо упрощать схему, либо отказываться от части функциональности,
либо приобретать большую (и более дорогую) матрицу FPGA. Очень большие
схемы могут превосходить возможности даже самых крупных FPGA, в этом
случае проектировщику приходится объединять в схеме несколько FPGA; задача
безусловно усложняется, но по-прежнему остается намного проще проектирования полноценной специализированной интегральной схемы.
Микросхемы процессоров и шины
Вооружившись информацией о микросхемах, тактовых генераторах и микросхемах памяти, мы можем сложить все составные части вместе и начать изучение
целых систем. В этом разделе сначала мы рассмотрим процессоры на цифровом
логическом уровне, включая цоколевку (то есть значение сигналов на различных
выводах). Поскольку центральные процессоры тесно связаны с шинами, которые
они используют, мы также кратко изложим основные принципы разработки шин.
В следующих разделах приводятся подробные примеры центральных процессоров, их шин и взаимодействий между ними.
Микросхемы процессоров
Все современные процессоры помещаются на одной микросхеме, благодаря чему
их взаимодействия с остальными частями системы становятся четко определенными. Каждая микросхема процессора содержит набор выводов, через которые
происходит обмен информацией с внешним миром. Одни выводы передают
сигналы от центрального процессора, другие принимают сигналы от других компонентов, третьи делают то и другое. Изучив функции всех выводов, мы сможем
узнать, как процессор взаимодействует с памятью и устройствами ввода-вывода
на цифровом логическом уровне.
Выводы микросхемы центрального процессора можно подразделить на три
типа: адресные, информационные и управляющие. Эти выводы связаны с соответствующими выводами на микросхемах памяти и микросхемах устройств
ввода-вывода через набор параллельных проводов (так называемую шину). Чтобы
вызвать команду, центральный процессор сначала посылает в память адрес этой
команды по адресным выводам. Затем он задействует одну или несколько линий
управления, чтобы сообщить памяти, что ему нужно (например, прочитать слово).
Память выдает ответ, помещая требуемое слово на информационные выводы процессора и посылая сигнал о том, что это сделано. Когда центральный процессор
получает этот сигнал, он считывает слово и выполняет вызванную команду.