Микросхемы памяти (или просто память, или запоминающие устройства — ЗУ, английское "Memory") представляют собой
следующий шаг на пути усложнения цифровых микросхем по сравнению с микросхемами, рассмотренными ранее.
Память — это всегда очень сложная структура, включающая в себя множество элементов. Правда, внутренняя структура памяти — регулярная,
большинство элементов одинаковые, связи между элементами сравнительно простые, поэтому функции, выполняемые
микросхемами памяти, не слишком сложные.
Память, как и следует из ее названия, предназначена для запоминания, хранения каких-то массивов информации,
проще говоря, наборов, таблиц, групп цифровых кодов. Каждый код хранится в отдельном элементе памяти, называемом
ячейкой памяти. Основная функция любой памяти как раз и состоит в выдаче этих кодов на выходы микросхемы по
внешнему запросу. А основной параметр памяти — это ее объем, то есть количество кодов, которые могут в ней
храниться, и разрядность этих кодов.
Для обозначения количества ячеек памяти используются следующие специальные единицы измерения:
1К — это 1024, то есть 210 (читается "кило-"" или "ка-"), примерно равно одной тысяче;
1М — это 1048576, то есть 220 (читается "мега-"), примерно равно одному миллиону;
1Г — это 1073741824, то есть 230 (читается "гига-"), примерно равно одному миллиарду.
Принцип организации памяти записывается следующим образом: сначала пишется количество ячеек, а затем через знак
умножения (косой крест) — разрядность кода, хранящегося в одной ячейке. Например, организация памяти 64Кх8 означает,
что память имеет 64К (то есть 65536) ячеек и каждая ячейка — восьмиразрядная. А организация памяти 4М х 1 означает,
что память имеет 4М (то есть 4194304) ячеек, причем каждая ячейка имеет всего один разряд. Общий объем памяти измеряется
в байтах (килобайтах — Кбайт, мегабайтах — Мбайт, гигабайтах — Гбайт) или в битах (килобитах — Кбит, мегабитах — Мбит,
гигабитах — Гбит).
В зависимости от способа занесения (записи) информации и от способа ее хранения, микросхемы памяти разделяются на
следующие основные типы:
Постоянная память ( ПЗУ — постоянное запоминающее устройство, ROM — Read Only Memory — память только для чтения),
в которую информация заносится один раз на этапе изготовления микросхемы. Такая память называется еще масочным ПЗУ.
Информация в памяти не пропадает при выключении ее питания, поэтому ее еще называют энергонезависимой памятью.
Программируемая постоянная память (ППЗУ — программируемое ПЗУ, PROM — Programmable ROM), в которую информация
может заноситься пользователем с помощью специальных методов (ограниченное число раз). Информация в ППЗУ тоже не
пропадает при выключении ее питания, то есть она также энергонезависимая.
Оперативная память (ОЗУ — оперативное запоминающее устройство, RAM — Random Access Memory — память с произвольным
доступом), запись информации в которую наиболее проста и может производиться пользователем сколько угодно раз на
протяжении всего срока службы микросхемы. Информация в памяти пропадает при выключении ее питания.
Существует множество промежуточных типов памяти, а также множество подтипов, но указанные — самые главные,
принципиально отличающиеся друг от друга. Хотя, разница между ПЗУ и ППЗУ с точки зрения разработчика цифровых
устройств, как правило, не так уж велика. Только в отдельных случаях, например, при использовании так называемой
флэш-памяти (flash-memory), представляющей собой ППЗУ с многократным электрическим стиранием и перезаписью информации,
эта разница действительно чрезвычайно важна. Можно считать, что флэш-память занимает промежуточное положение между
ОЗУ и ПЗУ.
В общем случае любая микросхема памяти имеет следующие информационные выводы (рис. 11.1):
(рис 11.1) Микросхемы памяти: ПЗУ (а), ОЗУ с двунаправленной шиной данных (б), ОЗУ с раздельными шинами входных и выходных данных (в)Адресные выводы (входные), образующие шину адреса памяти. Код на адресных линиях представляет собой двоичный номер
ячейки памяти, к которой происходит обращение в данный момент. Количество адресных разрядов определяет количество ячеек
памяти: при количестве адресных разрядов n количество ячеек памяти равно 2n.
Выводы данных (выходные), образующие шину данных памяти. Код на линиях данных представляет собой содержимое той
ячейки памяти, к которой производится обращение в данный момент. Количество разрядов данных определяет количество
разрядов всех ячеек памяти (обычно оно бывает равным 1, 4, 8, 16). Как правило, выходы данных имеют тип выходного
каскада ОК или 3С.
В случае оперативной памяти, помимо выходной шины данных, может быть еще и отдельная входная шина данных, на
которую подается код, записываемый в выбранную ячейку памяти. Другой возможный вариант — совмещение входной и
выходной шин данных, то есть двунаправленная шина, направление передачи информации по которой определяется управляющими
сигналами. Двунаправленная шина применяется обычно при количестве разрядов шины данных 4 или более.
Управляющие выводы (входные), которые определяют режим работы микросхемы. В большинстве случаев у памяти имеется
вход выбора микросхемы CS (их может быть несколько, объединенных по функции И). У оперативной памяти также обязательно
есть вход записи WR, активный уровень сигнала на котором переводит микросхему в режим записи.
Мы в данной лекции не будем, конечно, изучать все возможные разновидности микросхем памяти, для этого не хватит
целой книги. К тому же эта информация содержится в многочисленных справочниках. Микросхемы памяти выпускаются десятками
фирм во всем мире, поэтому даже перечислить все их не слишком просто, не говоря уже о том, чтобы подробно рассматривать
их особенности и параметры. Мы всего лишь рассмотрим различные схемы включения типичных микросхем памяти для решения
наиболее распространенных задач, а также методы проектирования некоторых узлов и устройств на основе микросхем памяти.
Именно это имеет непосредственное отношение к цифровой схемотехнике. И именно способы включения микросхем мало зависят
от характерных особенностей той или иной микросхемы той или иной фирмы.
В данном разделе мы не будем говорить о флэш-памяти, так как это отдельная большая тема. Мы ограничимся только
простейшими микросхемами ПЗУ и ППЗУ, информация в которые заносится раз и навсегда (на этапе изготовления или же
самим пользователем). Мы также не будем рассматривать здесь особенности оборудования для программирования ППЗУ (так
называемых программаторов ), принципы их построения и использования, — это отдельная большая тема. Мы будем считать,
что нужная нам информация может быть записана в ПЗУ или ППЗУ, а когда, как, каким способом она будет записана, нам
не слишком важно. Все эти допущения позволят нам сосредоточиться именно на схемотехнике узлов и устройств на основе ПЗУ и ППЗУ (для простоты будем называть их в дальнейшем просто ПЗУ ).
Упомянем здесь только, что ППЗУ делятся на репрограммируемые или перепрограммируемые ПЗУ (РПЗУ, EPROM — Erasable
Programmable ROM), то есть допускающие стирание и перезапись информации, и однократно программируемые ПЗУ. В свою
очередь, РПЗУ делятся на ПЗУ, информация в которых стирается электрическими сигналами (EEPROM — Electrically Erasable
Programmable ROM), и на ПЗУ, информация в которых стирается ультрафиолетовым излучением через специальное прозрачное
окошко в корпусе микросхемы (собственно EPROM — Erasable Programmable ROM). Запись информации в любые ППЗУ производится
с помощью подачи определенных последовательностей электрических сигналов (как правило, повышенного напряжения) на выводы
микросхемы.
Фирмами-производителями цифровых микросхем выпускается немало самых разнообразных ПЗУ и ППЗУ. Различаются
микросхемы постоянной памяти своим объемом (от 32 байт до 8 Мбайт и более), организацией (обычно количество разрядов
данных бывает 4, 8 или 16), способами управления (назначением управляющих сигналов), типами выходных каскадов (обычно
ОК или 3С), быстродействием (обычно задержка составляет от единиц до сотен наносекунд). Но суть всех микросхем ПЗУ
остается одной и той же: имеется шина адреса, на которую надо подавать код адреса нужной ячейки памяти, имеется
шина данных, на которую выдается код, записанный в адресуемой ячейке, и имеются входы управления, которые разрешают
или запрещают выдачу информации из адресуемой ячейки на шину данных.
(рис 11.2) Примеры микросхем ППЗУ отечественного производстваНа рис. 11.2 представлены для примера несколько простейших и типичных микросхем постоянной памяти.
Микросхема К155РЕ3 (аналог — N8223N) представляет собой однократно программируемое ППЗУ с организацией 32 х 8.
Исходное состояние (до программирования) — все биты всех ячеек нулевые. Для программирования (записи информации)
используется специальный программатор, подающий на разряды данных импульсы высокого напряжения. Тип выходных
каскадов — открытый коллектор, то есть обязательно надо включать на выходах резисторы, подсоединенные к шине питания.
Имеется один управляющий вход –CS, при положительном уровне сигнала на котором на всех выходах устанавливаются единицы.
Микросхема КР556РТ4 (аналог — I3601) — это также однократно программируемая постоянная память с организацией 256х4.
Исходное состояние (до программирования): все биты всех ячеек нулевые. Тип выходных каскадов — ОК. Два управляющих
входа -CS1 и –CS2 объединены по принципу И, то есть для разрешения работы микросхемы (для перевода выходов в активное
состояние) оба эти сигнала должны быть нулевыми. Для записи информации в микросхему используется программатор.
Микросхема КР556РТ18 (аналог — HM76161) также является однократно программируемым ППЗУ и имеет организацию 2Кх8.
Тип выходов микросхемы — 3С. Имеются три управляющих входа: один инверсный –CS1, два других — прямые CS2 и CS3,
объединенных по функции И. Выходы данных переходят в активное состояние при нулевом уровне на –CS1 и при единичных
уровнях на CS2 и CS3. Если входы управления используются для подачи управляющих сигналов (то есть выходы могут переходить
в третье состояние) то на выходы надо включать нагрузочные резисторы, подключенные к шине питания. Исходное состояние
микросхемы (до программирования) — все биты всех ячеек в единице.
Наконец, микросхема К573РФ8 (аналог — I27256) — это пример памяти РПЗУ с ультрафиолетовым стиранием информации.
Чтобы перепрограммировать память, необходимо ее стереть, для чего в течение некоторого времени (обычно несколько минут)
надо облучать микросхему через окошко в корпусе ультрафиолетовым светом (можно использовать медицинский кварцевый
облучатель). Стертая микросхема имеет все биты, установленные в единицу. Затем проводится процедура записи с помощью программатора, несколько отличающегося от программаторов однократно программируемых микросхем. Управляющие входы
–CS и –CE должны быть установлены в нуль для перевода выходов микросхемы в активное состояние. Имеется специальный
вход UPR для подачи программирующего высокого напряжения, который при чтении информации из микросхемы надо подключать
к напряжению питания. Тип выходных каскадов — 3С. Микросхемы этого типа самые медленные, их задержки самые большие.
Основные временные характеристики микросхем ПЗУ — это две величины задержки. Задержка выборки адреса памяти —
время от установки входного кода адреса до установки выходного кода данных. Задержка выборки микросхемы — время от
установки активного разрешающего управляющего сигнала CS до установки выходного кода данных памяти. Задержка выборки
микросхемы обычно в несколько раз меньше задержки выборки адреса.
Содержимое ПЗУ обычно изображается в виде специальной таблицы, называемой картой прошивки памяти. В таблице
показывается содержимое всех ячеек памяти, причем в каждой строке записывается содержимое 16 (или 32) последовательно
идущих (при нарастании кода адреса) ячеек. При этом, как правило, используется 16-ричное кодирование.
Пример карты прошивки ПЗУ
Адрес |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
00 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
10 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
20 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
30 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
40 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
50 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
60 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
70 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
80 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
90 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
A0 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
B0 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
C0 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
D0 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
E0 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
F0 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
Пример карты прошивки ПЗУ с организацией 256х8 показан в табл. 11.1 (все биты всех ячеек считаются установленными
в единицу). Пользоваться таблицей очень просто. Например для того, чтобы посмотреть содержимое ячейки памяти с 16-ричным
адресом 8А, надо взять строку таблицы с номером 80 и столбец таблицы с номером А (данная ячейка в таблице выделена жирным
шрифтом).
Любые микросхемы ПЗУ легко можно включать так, чтобы уменьшать или увеличивать количество адресных разрядов, то есть
уменьшать или увеличивать количество используемых ячеек памяти. И то, и другое часто требуется при построении схем
цифровых устройств.
Для уменьшения количества адресных разрядов необходимо на нужное число старших адресных входов подать нулевые
сигналы. Каждый отключенный таким образом адресный разряд уменьшает количество ячеек ПЗУ вдвое. Например, на рис. 11.3
показано, как из микросхемы с организацией 2Кх8 сделать микросхему 512х8. Два старших разряда адреса памяти отключены
(на них поданы нулевые сигналы). Использоваться будут только младшие (верхние в таблице прошивки) 512 ячеек, и только
их надо будет программировать. Конечно, гораздо лучше подобрать микросхему именно с тем количеством ячеек, которое
действительно необходимо в данной схеме, но это, к сожалению, возможно не всегда.
(рис 11.3) Уменьшение количества адресных разрядов ПЗУЗадача увеличения количества адресных разрядов ПЗУ встречается значительно чаще задачи уменьшения количества
адресных разрядов. В результате такого увеличения возрастает объем ПЗУ, объемы отдельных микросхем суммируются.
Для увеличения адресных разрядов обычно применяются микросхемы дешифраторов (рис. 11.4). Младшие разряды шины адреса
при этом подаются на объединенные адресные входы всех микросхем, а старшие — на управляющие (адресные) входы дешифратора.
Выходные сигналы дешифратора разрешают работу всегда только одной микросхемы памяти. В результате на общую шину данных
всех ПЗУ выдает свою информацию только одна микросхема. На рисунке для простоты не показаны выходные резисторы с разрядов
данных на шину питания, подключение которых чаще всего необходимо, так как тип выходов данных микросхем ПЗУ — это ОК
или 3С.
В результате подобного объединения микросхем ПЗУ может увеличиться время выборки адреса полученного единого ПЗУ.
В данном случае (см. рис. 11.4) оно будет равно максимальной из двух величин: времени выборки адреса одной микросхемы
и суммы двух задержек — задержки дешифратора и задержки выборки микросхемы ПЗУ.
(рис 11.4) Увеличение количества адресных разрядов ПЗУ с помощью дешифратораЕсли надо объединить две микросхемы (то есть добавить всего один разряд адресной шины), можно обойтись без
дешифратора, подавая на вход –CS одной микросхемы прямой дополнительный сигнал адреса, а на вход –CS другой микросхемы
— этот же сигнал с инверсией. Применение дешифратора 3—8 позволяет объединить 8 микросхем ПЗУ (добавить три адресных
разряда), а применение дешифратора 4–16 добавляет четыре адресных разряда, объединяя 16 микросхем ПЗУ.
Часто возникает также задача увеличения количества разрядов данных. Для этого необходимо всего лишь объединить
одноименные адресные входы нужного количества микросхем ПЗУ ; выходы же данных ПЗУ не объединяются, а образуют код
с большим числом разрядов. Например, при объединении таким образом двух микросхем с организацией 8Кх8 можно получить ПЗУ с организацией 8Кх16.
ПЗУ как универсальная комбинационная микросхема
Одно из самых распространенных применений микросхем ПЗУ — замена ими сложных комбинационных схем. Такое решение
позволяет существенно упростить проектируемое устройство и снизить количество используемых комбинационных микросхем,
а иногда даже уменьшить потребляемый ток и увеличить быстродействие схемы.
Суть предлагаемого подхода сводится к следующему. Если рассматривать адресные входы микросхемы ПЗУ как входы
комбинационной схемы, а разряды данных — как выходы этой комбинационной схемы, то можно сформировать любую требуемую
таблицу истинности данной комбинационной схемы. Для этого всего лишь надо составить таблицу прошивки ПЗУ, соответствующую
нужной таблице истинности. В этом случае не надо ни подбирать логические элементы, ни оптимизировать их соединения, ни
думать о том, можно ли вообще построить заданную комбинационную схему из стандартных микросхем. Важно только, чтобы
количество требуемых входов не превышало количества адресных разрядов ПЗУ, а количество требуемых выходов не превышало
разрядности шины данных ПЗУ.
В качестве примера рассмотрим довольно сложную комбинационную схему (рис. 11.5), имеющую восемь входов и четыре выхода.
Функция схемы сводится к следующему. Прежде всего она распознает два различных 5-разрядных входных кода (11001 и 10011)
в случае, когда на входе разрешения "–Разр." присутствует нулевой сигнал, а при приходе сигналов "–Строб 1" и "-Строб 2"
схема выдает на выход отрицательные импульсы. Причем первый выходной сигнал вырабатывается в случае, когда входной код
равен 11001 и пришел сигнал "–Строб 1", второй выходной сигнал — при том же коде, но по входному сигналу "–Строб 2".
Третий и четвертый выходной сигналы вырабатываются при входном коде 10011 и при приходе соответственно управляющих
сигналов "–Строб 1" и "–Строб 2". То есть логика работы довольно сложная и разнообразных логических элементов
требуется немало.

(рис 11.6) Пример комбинационной схемы, заменяемой ПЗУ(рис 11.5) Включение ПЗУ для замены комбинационной схемы, показанной на рис. 11.5Но всю эту схему можно заменить всего лишь одной микросхемой ПЗУ, например, типа РТ4, имеющей 8 адресных входов
и 4 выхода данных (рис. 11.6). При этом пять разрядов входного кода подаются на младшие разряды адреса ПЗУ (А0...А4),
входной сигнал "Разр." — на адресный вход А5, сигнал "–Строб 1" — на вход А6, сигнал "–Строб 2" — на вход А7.
Младший разряд данных памяти D0 используется для первого выходного сигнала, D1 — для второго выходного сигнала,
D2 — для третьего выходного сигнала, D3 — для четвертого выходного сигнала. Микросхема ПЗУ всегда выбрана
(управляющие сигналы –CS1 и –CS2 — нулевые). На выходах данных памяти включены резисторы, так как тип выходов
микросхемы РТ4 — ОК.
Составим карту прошивки ПЗУ. Активные выходные сигналы — нулевые, а пассивные — единичные. Значит, в большинстве
ячеек ПЗУ будут записаны коды F (все выходные сигналы пассивны). Активному (нулевому) первому выходному сигналу
при пассивных остальных будет соответствовать двоичный код данных 1110 (16-ричный код — Е), активному второму
выходному сигналу будет соответствовать двоичный код 1101 (16-ричный — D), активному третьему выходному сигналу —
двоичный код 1011 (или В), активному четвертому выходному сигналу — двоичный код 0111 (или 7). То есть только содержимое
четырех ячеек памяти будет отличаться от F.
Например, код Е будет записан в ячейку с таким адресом, пять младших разрядов которого (A0...А4) равны
селектируемому входному коду 11001, разряд А5 равен нулю (сигнал "Разр." активен), разряд А6 равен нулю
(сигнал "Строб 1" активен), а разряд А7 равен единице (сигнал "Строб 2" пассивен). Таким образом, получаем
двоичный код адреса 10011001 (или в 16-ричном коде 99). Точно так же код D будет записан в ячейку с адресом
01011001 (то есть 16-ричное 59), код В — в ячейку с адресом 10010011 (то есть 93), а код 7 — в ячейку с
адресом 01010011 (то есть 53). Получившаяся карта прошивки ПЗУ приведена в табл. 11.2. Она полностью совпадает
с таблицей истинности заменяемой комбинационной схемы.
Карта прошивки ПЗУ для замены комбинационной схемы
Адрес |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
00 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
10 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
20 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
30 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
40 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
50 | F |
F |
F |
7 |
F |
F |
F |
F |
F |
D |
F |
F |
F |
F |
F |
F |
60 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
70 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
80 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
90 | F |
F |
F |
B |
F |
F |
F |
F |
F |
E |
F |
F |
F |
F |
F |
F |
A0 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
B0 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
C0 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
D0 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
E0 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F0 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
Может показаться, что такое использование микросхемы ПЗУ чересчур расточительно, избыточно, но это не так.
Гораздо важнее, что схема сильно упрощается. Если же взять комбинационную схему с более сложной таблицей истинности,
то возможности ПЗУ будут использованы полнее. К тому же большое достоинство такого решения состоит в том, что при
необходимости изменения логики работы комбинационной схемы потребуется всего лишь перепрошивка ПЗУ, а не проектирование
новой схемы из логических элементов. Задержка ПЗУ при замене комбинационной схемы любой сложности остается одной и
той же, она равна задержке выборки адреса микросхемы ПЗУ. При сложной заменяемой комбинационной схеме ПЗУ может оказаться
даже быстрее.
Однако использование ПЗУ для замены комбинационных схем имеет и довольно серьезные недостатки. Дело в том, что
микросхемы ПЗУ еще больше, чем комбинационные микросхемы, чувствительны к моменту изменения входных сигналов
(адресных разрядов). На выходах данных микросхем ПЗУ при любом изменении входного кода адреса могут появляться
короткие паразитные импульсы. Поэтому лучше всего использовать ПЗУ для замены таких комбинационных схем, которые
работают в статическом режиме и в которых короткие импульсы не имеют значения.
(рис 11.7) Методы синхронизации выходных сигналов ПЗУ с помощью сигнала CS (а) и выходного регистра (б)Можно также применять методы синхронизации выходных сигналов ПЗУ (рис. 11.7) с помощью управляющих сигналов выбора
микросхемы CS (а) или же с помощью выходных триггеров и регистров (б). Суть синхронизации состоит в том, что выходные
сигналы ПЗУ надо разрешать или фиксировать с помощью синхросигнала только тогда, когда все переходные процессы внутри
микросхемы, вызванные сменой кода адреса, уже закончились и паразитные импульсы на выходах гарантированно отсутствуют.
Микросхемы ПЗУ могут заменять собой любые комбинационные микросхемы: дешифраторы, шифраторы, компараторы кодов,
сумматоры, мультиплексоры, преобразователи кодов и т.д. Однако при подобной замене всегда стоит подумать, не лучше ли
использовать уже готовые микросхемы, чем изготавливать новые (программировать ПЗУ ). Микросхемы ПЗУ могут оказаться
медленнее стандартных комбинационных микросхем и потреблять больший ток питания. К тому же они могут требовать выходных
резисторов, если микросхемы имеют выходы ОК или при использовании входов CS у микросхем с выходами 3С. Другое дело,
когда ПЗУ выполняет функцию, отличающуюся от функции стандартной комбинационной микросхемы. Простейший пример —
дешифратор с положительными, а не с отрицательными (как в стандартных сериях) активными выходными сигналами.
В общем случае ПЗУ можно рассматривать как преобразователь входного кода (кода адреса) в выходной код (код данных)
по произвольному закону, задаваемому разработчиком. Это позволяет не только преобразовывать друг в друга различные
стандартные коды, но и выполнять множество других функций, например, использовать ПЗУ как простейший табличный вычислитель.
Для этого нужно на адресные разряды ПЗУ подать код входного числа (аргумента), а на выходах разрядов данных получить код
выходного числа (функции). Такой табличный вычислитель имеет очень высокое быстродействие по сравнению с другими типами
вычислителей (время вычисления функции равно задержке выборки адреса ПЗУ ).
В качестве простейшего примера рассмотрим вычислитель для возведения в квадрат 4-разрядного двоичного числа (рис. 11.8).
Вычислитель выполнен на микросхеме ПЗУ типа РЕ3, у которого использованы четыре разряда адреса и восемь разрядов данных.
Он позволяет получать двоичные коды квадратов любых чисел в диапазоне от 0 (или в двоичном коде 0000, в 16-ричном коде 0)
до 15 (или в двоичном коде 1111, в 16-ричном коде F), которые принимают значения от 0 (или в двоичном коде 00000000, в
16-ричном — 00) до 225 (или в двоичном коде 11100001, в 16-ричном — E1).
(рис 11.8) Вычислитель квадратов входных чиселКарта прошивки ПЗУ вычислителя квадратов (табл. 11.3) будет очень проста: код данных в каждой ячейке равен квадрату
кода адреса этой ячейки. Используется всего 16 ячеек памяти, содержимое остальных 16 ячеек не имеет значения
(что обозначено в таблице ХХ).
Карта прошивки ПЗУ-вычислителя квадратов
Адрес |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
00 | 00 |
01 |
04 |
09 |
10 |
19 |
24 |
31 |
40 |
51 |
64 |
79 |
90 |
A9 |
C4 |
E1 |
10 | XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
На такой же точно схеме (рис. 11.8) можно сделать и вычислитель квадратов в двоично-десятичном коде. В этом
случае будет использовано всего лишь десять ячеек памяти с адресами от 0 до 9, а в ячейках будут записаны их квадраты
от 0 до 81.
Недостаток любого табличного вычислителя на ПЗУ — это необходимость увеличения вдвое требуемого объема памяти при
увеличении разрядности входного числа на единицу. Например, при 8-разрядных входных числах требуется ПЗУ с количеством
ячеек 256, при 16-разрядных входных числах — ПЗУ с количеством ячеек 64К, а при 32-разрядных входных числах — ПЗУ с
количеством ячеек 4Г. Такие большие объемы очень трудно реализовать на серийно выпускаемых микросхемах. Поэтому
табличные вычислители на ПЗУ обычно строятся только для разрядности входных чисел не более 16.
Одно из наиболее распространенных применений ПЗУ как преобразователя кодов — это построение на их основе всевозможных
индикаторов, отображающих на экране буквы и цифры. ПЗУ в данном случае переводит код (номер) буквы или цифры в ее
изображение. Конечно, в данном случае заменить ПЗУ комбинационной схемой совершенно невозможно, так как букв и цифр
очень много, а их изображения очень разнообразны.
Простейший пример данного применения ПЗУ — это управление знаковым семисегментным индикатором, знакомым всем по
калькуляторам, кассовым аппаратам, электронным часам, весам и т.д. В семисегментных индикаторах изображение всех
цифр от 0 до 9 строится всего из семи сегментов (отрезков линий) (рис. 11.9).
(рис 11.9) Дешифратор знакового семисегментного индикатора на ПЗУЧтобы отобразить в виде цифры 4-разрядный двоичный код, надо этот код преобразовать в 7-разрядный код, каждому
разряду которого будет соответствовать один сегмент индикатора. То есть коду 0000 должно соответствовать изображение
нуля (6 сегментов, расположенных по периметру), а коду 0001 — изображение единицы (два правых вертикальных сегмента).
Для повышения универсальности индикатора удобно дополнить десять цифр еще и шестью буквами, использующимися в
16-ричном коде (A, B, C, D, E, F). Семь сегментов индикатора позволяют сделать и это, правда, изображения букв
получаются не слишком качественными.
Карта прошивки ПЗУ для дешифратора знакового индикатора
Адрес |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
00 | 40 |
79 |
24 |
30 |
19 |
12 |
02 |
78 |
00 |
10 |
08 |
03 |
46 |
21 |
06 |
0E |
10 | XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
ПЗУ типа РЕ3, используемое в качестве дешифратора индикатора, имеет 4 входа и 7 выходов (старший разряд адреса
и старший разряд данных не используются). Карта прошивки ПЗУ приведена в табл. 11.4. Нулевой сигнал на каждом из выходов
данных ПЗУ зажигает соответствующий ему сегмент.
ПЗУ позволяют также формировать и более сложные изображения букв и цифр — матричные. Такие изображения используются,
например, в табло типа "бегущая строка", на экранах мониторов, в больших рекламных табло. Каждая буква, цифра, другой
знак располагается в данном случае на прямоугольной матрице, называемой знакоместом и состоящей из нескольких строк и
нескольких столбцов точечных элементов изображения, которые могут зажигаться независимо друг от друга. Чем больше строк
и столбцов в знакоместе, тем более качественное изображение букв и цифр можно получить. Минимально возможный размер
знакоместа — 5 столбцов на 7 строк, то есть всего 35 элементов изображения.
ПЗУ в данном случае содержит в себе информацию об изображениях всех возможных букв и цифр (обычно этот набор включает
в себя 256 символов). Но выходной код ПЗУ имеет мало разрядов, поэтому каждый такой код, соответствующий одному адресу,
представляет собой информацию об изображении не целого символа, а только одной его строки (или столбца). Информация о
целом символе занимает в ПЗУ столько ячеек, сколько в изображении символа имеется столбцов (или строк). Пример матричного знакогенератора на ПЗУ приведен на рис. 11.10.
(рис 11.10) Матричный знакогенератор на ПЗУВ данном случае используется знакоместная матрица из 8 строк и 8 столбцов. В каждую ячейку ПЗУ записывается код
изображения одной из 8 строк одного из 256 символов. Изображение одного символа занимает 8 последовательно расположенных
ячеек в ПЗУ. Для букв и цифр правый столбец знакоместа не используется, он служит для отделения знаков друг от друга,
но для специальных символов (например, для графических) он может и использоваться. В случае матричного светодиодного
индикатора перебор строк может осуществляться 3-разрядным счетчиком с дешифратором 3–8 на его выходе. В случае
телевизионного монитора перебор строк осуществляется с помощью генератора вертикальной развертки изображения.
Составление карты прошивки такого ПЗУ непросто, оно обычно производится с помощью специальных программ на компьютере.
Но принцип составления прост. Например, если активному (зажженному) элементу изображения соответствует единичный сигнал,
то для нулевой строки символа "М", показанного на рисунке, в ПЗУ надо записать 10000010, для первой строки — код 11000110,
для второй — код 10101010, для третьей — 10010010 и т.д.
ПЗУ в генераторах импульсных последовательностей
Следующее важнейшее применение ПЗУ — это построение генераторов сложных последовательностей цифровых импульсов.
Такие генераторы широко используются в самых разных измерительных системах, в устройствах автоматики, в телевизионных
системах, в схемах управления линейными или матричными индикаторами и т.д.
Задача в данном случае ставится следующим образом. Необходимо сформировать последовательность из нескольких сигналов
различной длительности, сдвинутых относительно друг друга на различные временные интервалы. Причем последовательность
эта может быть как разовой (однократно начинающейся по внешнему сигналу), так и периодической, непрерывно повторяющейся.
Наиболее распространенная структура генератора последовательностей выходных сигналов на ПЗУ включает в себя тактовый
генератор нужной частоты, счетчик с требуемым числом разрядов, ПЗУ и выходной регистр (рис. 11.11). Счетчик перебирает
адреса ПЗУ, ПЗУ последовательно выдает на выходы данных все записанные в него коды. Выходной регистр, тактируемый тем
же тактовым сигналом, что и счетчик, служит для предотвращения появления в выходных сигналах паразитных импульсов и для
обеспечения одновременного переключения всех выходных сигналов (что особенно важно в случае, когда используются
несколько параллельно включенных микросхем ПЗУ для увеличения разрядности шины данных).

(рис 11.12) Пример структуры генератора последовательностей сигналов на ПЗУ(рис 11.11) Временная диаграмма формируемых выходных сигналовРассмотрим пример. Пусть необходимо непрерывно формировать периодическую последовательность из шести выходных
сигналов в соответствии с временной диаграммой рис. 11.12. Получить такую последовательность можно, конечно, с помощью
комбинационных схем, включенных на выходе счетчика, или с помощью множества одновибраторов, запускающих друг друга,
но и то, и другое решение чересчур громоздко и сложно как в проектировании, так и в настройке. Применение же ПЗУ
значительно упрощает задачу. Достаточно провести несложные расчеты и составить карту прошивки ПЗУ.
Расчеты сводятся к следующему.
Прежде всего определяем минимально возможную тактовую частоту (с целью минимизации требуемого объема ПЗУ ). Для
этого надо выделить максимальный временной интервал (дискрет времени), который укладывается целое число раз во все
временные сдвиги, задержки, длительности требуемой диаграммы. В нашем случае этот дискрет равен одному делению по оси
времени. Например, если длительность этого деления равна 250 нс, то и период тактового сигнала надо выбирать 250 нс,
то есть тактовая частота будет равна 4 МГц. Можно, конечно, выбрать ее и кратной 4 МГц, например, 8 МГц, 12 МГц, но тогда
потребуется вдвое или втрое больший объем ПЗУ. Если бы нам надо было формировать только три верхних сигнала (Выход 0,
Выход 1, Выход 2), то период тактовой частоты можно было бы брать вдвое больше (в нашем примере — 500 нс), так как для
этих сигналов все длительности кратны двум делениям.
Второй расчет сводится к определению количества ячеек и разрядности ПЗУ. Шесть выходных сигналов схемы требуют шести
разрядов данных ПЗУ. Длительность последовательности равна 20 тактам (или 14 в 16-ричном коде), то есть не равна 2n,
поэтому счетчик придется сбрасывать в нуль через каждые 20 тактов, для чего потребуется еще один разряд данных ПЗУ.
Итого потребуется 7 разрядов. А для перебора 20 тактов последовательности потребуется 5-разрядный счетчик, так как 24 = 16 (недостаточно), а 25 = 32 (достаточно). Значит, разрядность шины адреса ПЗУ также должна быть не менее пяти,
то есть минимальные требования к организации ПЗУ — это 32х8, значит, подойдет микросхема ПЗУ типа РЕ3.
Наконец, третий расчет касается условий правильной работы схемы. Генератор последовательности будет работать правильно,
если за период тактового сигнала успеют сработать счетчик и ПЗУ. То есть сумма задержки полного переключения счетчика и
задержки выборки адреса ПЗУ не должна превышать периода тактового сигнала.
(рис 11.13) Первый вариант схемы генератора последовательности сигналов на ПЗУТаким образом, один из возможных вариантов схемы генератора последовательности импульсов (рис. 11.13) будет включать в
себя тактовый генератор, пятиразрядный счетчик на основе ИЕ19, ПЗУ типа К155РЕ3 и 8-разрядный выходной регистр ИР27.
Так как счетчик срабатывает по отрицательному фронту тактового сигнала, а регистр — по положительному фронту тактового
сигнала, необходимо включить инвертор. На схеме для простоты не показаны резисторы на выходах данных типа ОК микросхемы ПЗУ.
Из схемы видно, что существует еще одно дополнительное условие правильной работы, связанное с использованием сигнала
сброса. За период тактового сигнала должен успеть сработать регистр (записать в себя сигнал сброса с выхода ПЗУ ), должен
сброситься счетчик и должно выдать код ПЗУ. То есть сумма задержек регистра, сброса счетчика и выборки адреса ПЗУ не
должна превышать периода тактового сигнала.
Карта прошивки ПЗУ генератора последовательности сигналов
Такт (адрес) |
Вых.6 |
Вых.5 |
Вых.4 |
Вых.3 |
Вых.2 |
Вых.1 |
Вых.0 |
Код (данные) |
| 0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1F |
| 1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
17 |
| 2 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
16 |
| 3 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
16 |
| 4 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
04 |
| 5 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
24 |
| 6 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
01 |
| 7 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
21 |
| 8 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
23 |
| 9 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
23 |
| A |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
26 |
| B |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
26 |
| C |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
24 |
| D |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
04 |
| E |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
21 |
| F |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
01 |
| 10 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
13 |
| 11 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
13 |
| 12 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
17 |
| 13 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
5F |
Теперь составим карту прошивки ПЗУ. Для этого сформируем таблицу значений всех семи выходных сигналов во всех
двадцати рабочих тактах генератора последовательностей (табл. 11.5). Значения шести выходных сигналов (Выход 0 ...
Выход 5) мы непосредственно берем из требуемой временной диаграммы (см. рис. 11.12). Хотя эти сигналы будут приходить
на выход схемы с задержкой на один такт из-за наличия выходного регистра, но при периодической работе генератора
последовательности это не имеет никакого значения.
Седьмой сигнал (Выход 6) используется в качестве сброса счетчика, он равен нулю от нулевого такта до 18 (в
16-ричном коде — 12) такта и равен единице в последнем девятнадцатом такте (в 16-ричном коде — 13). Этим
единичным сигналом счетчик будет сбрасываться в нуль, то есть работа схемы после 19 такта будет возобновляться с
нулевого такта.
Пусть нам требуется более высокое быстродействие схемы. Например, период тактового генератора должен быть равен
100 нс и даже меньше. В этом случае асинхронный счетчик типа ИЕ19 уже не подойдет из-за своего низкого быстродействия.
Надо использовать 5-разрядный синхронный счетчик. Можно, конечно, включить две микросхемы 4-разрядных счетчиков типа
ИЕ17, но можно обойтись и одним 4-разрядным счетчиком, если задействовать оставшийся свободным выход данных ПЗУ и
оставшийся свободным разряд регистра (рис. 11.14). При этом без всякого ущерба для быстродействия можно использовать
синхронный счетчик с асинхронным переносом ИЕ7, так как нужна всего одна микросхема счетчика.
(рис 11.14) Второй вариант схемы генератора последовательности с 4-разрядным синхронным счетчиком ИЕ7Карта прошивки ПЗУ генератора последовательностей остается той же самой, что и в предыдущем случае, но добавляется
один (седьмой) разряд шины данных ПЗУ. Этот разряд должен быть равен нулю в пятнадцати тактах с нулевого до 14 (в
16-ричном коде — Е), в четырех тактах с 15 (F в 16-ричном коде) по 18 (12 в 16-ричном коде) он должен быть равен
единице (код данных увеличится на 80), а в последнем 19 такте (13 в 16-ричном коде) он снова должен быть равен нулю.
В результате адреса ПЗУ будут перебираться от 0 до 15 (старший разряд адреса равен нулю), затем от 16 до 19 (старший
разряд адреса станет равен единице, а счетчик после переполнения считает с нуля), а затем снова от нулевого адреса
(счетчик сбросится сигналом "Выход 6", а старший разряд адреса памяти станет нулевым). Получающаяся в результате
карта прошивки ПЗУ приведена в табл. 11.6.
Карта прошивки ПЗУ для варианта схемы генератора последовательности импульсов
Адрес |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
| 00 |
1F |
17 |
16 |
16 |
04 |
24 |
01 |
21 |
23 |
23 |
26 |
26 |
24 |
04 |
21 |
81 |
| 10 |
93 |
93 |
97 |
5F |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
Конечно, рассмотренный пример довольно прост, при использовании ПЗУ большего объема генерируемые последовательности
сигналов могут быть гораздо сложнее рассмотренной, и выходных сигналов может быть больше, но суть остается прежней: ПЗУ выдает любые последовательности выходных сигналов минимальными средствами. Причем генерируемые последовательности
можно довольно просто изменять, заменяя ПЗУ на микросхемы с другой картой прошивки.
Микропрограммные автоматы на ПЗУ
Микропрограммные автоматы представляют собой следующий шаг по пути усложнения интеллекта цифровых схем. На основе
микропрограммных автоматов можно строить устройства, которые работают по довольно сложным алгоритмам, выполняют
различные функции, определяемые входными сигналами, выдают сложные последовательности выходных сигналов. При этом
алгоритм работы микропрограммного автомата может быть легко изменен заменой прошивки ПЗУ.
В отличие от рассматривавшихся ранее устройств на "жесткой" логике, принцип работы которых однозначно определяется
используемыми элементами и способом их соединения, микропрограммные автоматы с помощью одной и той же схемы могут
выполнять самые разные функции. То есть они гораздо более гибкие, чем схемы на "жесткой" логике. К тому же проектировать
микропрограммные автоматы с точки зрения схемотехники довольно просто. Недостатком любого микропрограммного автомата по
сравнению со схемами на "жесткой" логике является меньшее предельное быстродействие и необходимость составления карты
прошивки ПЗУ с микропрограммами, часто довольно сложными.
Наиболее распространенная структура микропрограммного автомата (рис. 11.15) включает в себя всего лишь три элемента:
ПЗУ, регистр, срабатывающий по фронту, и тактовый генератор.
(рис 11.15) Структура микропрограммного автоматаПЗУ имеет (L+M) адресных разрядов и N разрядов данных. Регистр применяется с количеством разрядов (N + L). Разряды
данных ПЗУ записываются в регистр по положительному фронту тактового сигнала с генератора. Часть этих разрядов (М)
используется для образования адреса ПЗУ, другая часть (N-M) служит для формирования выходных сигналов. Входные сигналы
(L) поступают на входы регистра и используются совместно с частью выходных разрядов ПЗУ для получения адреса ПЗУ.
Схема работает следующим образом. В каждом такте ПЗУ выдает код данных, тем самым определяя не только состояние
выходных сигналов схемы, но и адрес ПЗУ, который установится в следующем такте (после следующего положительного фронта
тактового сигнала). На этот следующий адрес влияют также и входные сигналы. То есть в отличие от формирователя
последовательности сигналов, рассмотренного в предыдущем разделе, в данном случае адреса могут перебираться не только
последовательно (с помощью счетчика), но и в произвольном порядке, который определяется прошивкой ПЗУ, называемой
микропрограммой.
Условием правильной работы схемы будет следующее. За один период тактового сигнала должны успеть сработать регистр
и ПЗУ. Иначе говоря, сумма задержки регистра и задержки выборки адреса ПЗУ не должна превышать периода тактового сигнала.
Отметим также, что входные сигналы микропрограммного автомата нельзя подавать непосредственно на адресные входы ПЗУ (без
регистра), так как их асинхронное (по отношению к тактовому сигналу) изменение может вызвать переходный процесс на выходах
данных ПЗУ именно в тот момент, когда выходные сигналы ПЗУ записываются в регистр. В результате в регистр может
записаться неверная информация, что нарушит работу всей схемы. Регистр же синхронизирует изменения входных сигналов
с тактовым сигналом, в результате чего все разряды кода адреса ПЗУ меняется одновременно — по положительному фронту
тактового сигнала. Регистр должен обязательно срабатывать по фронту, использование регистра-защелки не допускается, так
как он может вызвать лавинообразный переходный процесс.
Возможности такой простой схемы оказываются очень большими. Например, микропрограммный автомат может выдавать
последовательности выходных сигналов в ответ на определенное изменение входных сигналов. Он может также временно
остановить выдачу выходных сигналов до прихода входных сигналов. Он может анализировать длительность входного сигнала
и в зависимости от нее выдавать те или иные выходные сигналы. Он может также и многое другое.
Сформулируем несколько элементарных функций, из которых могут складываться алгоритмы работы микропрограммного
автомата (рис. 11.16):
(рис 11.16) Элементарные функции микропрограммного автомата: последовательный перебор (а), циклическое повторение (б) и остановка (в)Последовательный перебор адресов ПЗУ (например, для выдачи последовательности выходных сигналов).
Периодическое повторение последовательности адресов ПЗУ (например, для повторения последовательности
выходных сигналов).
Остановка в каком-то адресе ПЗУ (например, для ожидания изменения входного сигнала).
Временное отключение реакции на входные сигналы (например, для того, чтобы закончить отработку реакции на
предыдущее изменение входных сигналов). Эта функция на рисунке не показана.
В качестве примера рассмотрим выполнение некоторых элементарных функций микропрограммным автоматом, показанным
на рис. 11.17.
(рис 11.17) Пример практической схемы микропрограммного автомата на ПЗУПЗУ имеет организацию 64х8 (это могут быть две микросхемы РЕ3 или одна микросхема РТ18), количество разрядов
регистра равно десяти (это могут быть две микросхемы ИР27). Схема имеет два входных сигнала и четыре выходных
сигнала. Такая организация микропрограммного автомата хороша тем, что его микропрограмма (то есть карта прошивки ПЗУ ) очень наглядна, легко составляется и читается.
Карта прошивки ПЗУ 64х8 для микропрограммного автомата
Адрес |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
00 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
10 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
20 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
30 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
Выходные разряды данных ПЗУ делятся на две группы по 4 сигнала: младшие идут на образование следующего адреса ПЗУ, старшие образуют четыре выходных сигнала. Входные сигналы поступают (через регистр) на два старших разряда
адреса ПЗУ. Если мы изобразим карту прошивки ПЗУ в привычном для нас виде таблицы из четырех строк и 16 столбцов
(табл. 11.7), то в этой таблице будут наглядно видны как состояние каждого из внутренних сигналов, так и реакция
схемы на любой входной сигнал, а также состояния всех выходных сигналов в каждом такте.
Прежде всего, легко заметить, что выбор той или иной строки таблицы производится старшими разрядами кода адреса ПЗУ, то есть входными сигналами микропрограммного автомата. Таким образом, любое изменение входных сигналов приводит
к переходу в карте прошивки на другую строку. Например, строка 00 будет соответствовать нулевым входным сигналам
микропрограммного автомата, а строка 30 — единичным входным сигналам.
Пример микропрограммы для схемы на рис. 11.17
Адрес |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
00 | 11 |
22 |
33 |
44 |
55 |
66 |
77 |
88 |
99 |
AA |
BB |
CC |
DD |
EE |
FF |
00 |
10 | 11 |
22 |
33 |
44 |
55 |
66 |
77 |
88 |
99 |
55 |
BB |
CC |
DD |
EE |
FF |
00 |
20 | 10 |
21 |
32 |
43 |
54 |
65 |
76 |
87 |
98 |
A9 |
BA |
CB |
DC |
ED |
FE |
0F |
30 | 10 |
20 |
30 |
40 |
50 |
60 |
70 |
80 |
90 |
A0 |
B0 |
C0 |
D0 |
E0 |
F0 |
00 |
Теперь посмотрим на структуру 8-разрядного кода данных ПЗУ. Младшие четыре разряда этого кода (правый, младший
знак 16-ричного кода в таблице) соответствуют четырем младшим разрядам кода адреса ПЗУ. Старшие четыре разряда кода
данных ПЗУ (левый, старший знак 16-ричного кода в таблице) соответствуют четырем выходным сигналам микропрограммного
автомата. То есть непосредственно по 16-ричному коду данных из таблицы можно сказать, во-первых, каким будет
следующий адрес ПЗУ, и во-вторых, какими будут выходные сигналы автомата в следующем такте.
Рассмотрим пример микропрограммы (табл. 11.8), реализующей некоторые элементарные функции.
Верхняя (нулевая) строка таблицы демонстрирует последовательный перебор адресов памяти при нулевых входных
сигналах. Пусть, например, автомат находится в адресе 00. В ячейке с адресом 00 указан следующий адрес 1
(младший знак 16-ричного кода 11), то есть в следующем такте автомат перейдет в адрес 01 (считаем, что входные
сигналы остаются нулевыми). Из адреса 01 автомат перейдет в адрес 02, так как в ячейке с адресом 01 указан
следующий адрес 2. Точно так же из адреса 02 автомат перейдет в адрес 03 и так далее до адреса 0F, в котором
указан следующий адрес 0, то есть в следующем такте автомат снова вернется в адрес 00. Затем цикл последовательного
прохождения адресов первой строки повторится (если, конечно, входные сигналы останутся нулевыми). Четыре выходных
сигнала автомата в данном случае повторяют код следующего адреса, то есть, подобно 4-разрядному двоичному счетчику,
выдают постепенно нарастающий код.
Вторая сверху (первая) строка таблицы демонстрирует циклическое повторение группы тактов. Если, например, работа
начинается с адреса 10, то микропрограммный автомат последовательно будет перебирать адреса 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, а затем вернется в адрес 15 и будет постоянно повторять группу адресов 15, 16, 17, 18, 19. В данном
случае мы считаем, что входной сигнал "Вх. 1" постоянно равен единице, а входной сигнал "Вх. 2" постоянно равен нулю,
что и соответствует второй сверху строке таблицы.
Посмотрим теперь, что будет делать автомат, если входной сигнал "Вх. 2" постоянно равен нулю, а входной сигнал
"Вх.1" меняет свое состояние с нуля на единицу и обратно. Такое переключение входных сигналов приводит к переходу
между нулевой и первой строками таблицы с микропрограммой. Допустим, автомат начинает работу с адреса 00 (сигнал
"Вх. 1" равен нулю). Идет последовательный перебор адресов нулевой строки. Даже если в течение первых девяти
тактов сигнал "Вх. 1" будет меняться, на выходных сигналах автомата это никак не отразится, так как коды первых
девяти адресов в нулевой и первой строках полностью совпадают. Поэтому можно сказать, что в этих первых девяти тактах
мы отключили реакцию нашего автомата на входной сигнал "Вх. 1" за счет дублирования кодов.
Допустим теперь, что изначально нулевой входной сигнал "Вх. 1" стал равен единице в адресе 0А и далее не меняется.
Это приведет к тому, что вместо адреса 0В автомат перейдет в адрес 1В. Затем он пройдет адреса 1С...1F, перейдет в
адрес 10, дойдет до адреса 19 и начнет повторять цикл 15...19. Если же, например, в адресе 18 сигнал "Вх. 1" снова
станет равен нулю, то вместо адреса 19 автомат попадет в адрес 09 и далее будет выполнять микропрограмму нулевой
строки.
Третья сверху (вторая) строка таблицы, которая соответствует входным сигналам Вх. 1 = 0, Вх.2 = 1, показывает
пример остановки автомата в каждом адресе и ожидание прихода входного сигнала. Например, автомат находится в адресе 23.
Следующим адресом в коде данной ячейки указан 3. Значит, если входные сигналы остаются неизменными, то автомат перейдет
опять же в адрес 23 и будет оставаться в нем постоянно. Но если входной сигнал "Вх.2" станет равным нулю, автомат перейдет
в адрес 03 и начнет выполнять микропрограмму нулевой строки. То есть переключение входного сигнала "Вх.2" из нуля в единицу
при нулевом уровне "Вх.1" останавливает выполнение микропрограммы нулевой строки до обратного перехода входного сигнала
"Вх.2" в нуль.
Наконец нижняя (третья) строка таблицы демонстрирует переход из любого адреса строки в нулевой адрес этой же строки.
Пусть, например, выполняется микропрограмма нулевой строки ("Вх. 1" и "Вх. 2" — нулевые) и в адресе 06 оба входных
сигнала переходят в единицу. Автомат попадает в адрес 37, а из него — в адрес 30, где и остается постоянно до
изменения входных сигналов. Если затем оба входных сигнала снова станут нулевыми, то автомат перейдет в адрес
00 и начнет снова выполнять микропрограмму нулевой строки таблицы.
Иногда бывает необходимо перевести автомат в какой-то определенный адрес. Ведь при включении питания в
регистре может оказаться произвольный код. Для такой инициализации автомата можно, например, использовать
регистр, имеющий вход сброса R, на который подается внешний сигнал, и тогда по этому сигналу автомат попадет
в нулевой адрес. Но можно пойти и другим путем: составить микропрограмму таким образом, что автомат при
включении питания сам перейдет за несколько тактов в нужный адрес независимо от того, в какой адрес он попал
при включении питания.
Рассмотрим теперь пример проектирования простейшего микропрограммного автомата.
Пусть нам необходимо формировать с помощью микропрограммного автомата последовательность из трех выходных
сигналов в ответ на положительный фронт одного входного сигнала (рис. 11.18).
(рис 11.18) Диаграмма работы проектируемого микропрограммного автоматаВторой выходной сигнал "вложен" в первый, а третий "вложен" во второй. Причем до тех пор, пока данная
последовательность не закончится, входной сигнал может произвольно менять свое состояние, на работе схемы
это никак не должно сказываться. А после окончания данной последовательности микропрограммный автомат снова
должен ждать положительного фронта входного сигнала и начинать по нему выработку новой последовательности.
Все временные сдвиги в выходной последовательности (t) примем для простоты одинаковыми и равными 1 мкс.
Это значительно облегчает выбор тактовой частоты микропрограммного автомата, она должна быть равной 1 МГц
(период 1 мкс). В этом случае полная длина генерируемой последовательности составит всего 6 тактов (один такт
соответствует переходу всех выходных сигналов в единицу).
Для формирования 6-тактовой последовательности необходимо не менее 3 адресных разрядов ПЗУ (так как 22 = 4,
а 23 = 8 ). Еще один разряд адреса ПЗУ потребуется для входного сигнала схемы. Итого необходимо 4 адресных разряда ПЗУ.
Для формирования трех выходных сигналов требуется три разряда данных ПЗУ. Еще три разряда данных ПЗУ
нужно для задания следующего адреса при отработке выходной последовательности. Итого необходимо шесть разрядов
данных ПЗУ.
(рис 11.19) Спроектированный микропрограммный автоматПосчитаем требуемую разрядность выходного регистра. ПЗУ выдает шесть разрядов данных. Имеется один входной сигнал.
Итого регистр должен фиксировать 7 сигналов, значит, он должен быть 7-разрядным.
Итак, все расчеты закончены. Полученная схема микропрограммного автомата приведена на рис. 11.19. Она включает в
себя тактовый генератор с частотой 1 МГц, микросхему ПЗУ типа РЕ3, у которой не используется один разряд адреса и два
разряда данных, а также 8-разрядный регистр ИР27, у которого не используется один разряд. Для простоты на рисунке не
показаны резисторы на выходах данных типа ОК микросхемы ПЗУ.
Теперь необходимо составить микропрограмму для спроектированной схемы. Она должна включать в себя ожидание
положительного фронта входного сигнала, отработку последовательности выходных сигналов с временным отключением
входного сигнала, ожидание нулевого уровня входного сигнала и переход на новое ожидание положительного фронта
входного сигнала. Полученная микропрограмма с необходимыми комментариями представлена в табл. 11.9.
Микропрограмма для спроектированного автомата
| Адрес ПЗУ |
Данные ПЗУ |
Комментарий |
| Код |
Вход |
Данные |
Вых.1 |
Вых.2 |
Вых.3 |
Сл. адрес |
Код |
| 0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
38 |
Ожидание полож. фронта Вх. |
| 8 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
19 |
Пришел положительный фронт входного сигнала. Отработка последовательности. Входной сигнал равен единице. |
| 9 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0A |
| A |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
03 |
| B |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0C |
| C |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1D |
| D |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
3D |
Ожидание Вх.=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0A |
Вх. стал равен нулю до окончания последовательности |
| 2 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
03 |
| 3 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0С |
| 4 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
18 |
Переход на ожидание фронта |
| 5 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
38 |
Переход на ожидание фронта |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
38 |
Не используемые ячейки |
| 7 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
38 |
| E |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
38 |
| F |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
38 |
Отключение реакции на входной сигнал достигается в микропрограмме за счет дублирования участка отработки выходной
последовательности при входном сигнале, равном нулю, и при входном сигнале, равном единице. Если в конце выходной
последовательности входной сигнал равен единице, то схема ожидает сначала перехода входного сигнала в нуль
(отрицательный фронт), а затем уже ждет положительного фронта входного сигнала. Если в конце последовательности
входной сигнал равен нулю, то схема сразу же переходит на ожидание положительного фронта входного сигнала.
Все неиспользуемые микропрограммным автоматом ячейки заполнены командами перехода в начальное состояние схемы
с пассивными (единичными) выходными сигналами. Таким решением обеспечивается правильное начало работы микропрограммного
автомата при любом начальном адресе (при любом начальном коде в регистре). Начальный сброс автомата не используется.
Последний микропрограммный автомат, который мы рассмотрим в данном разделе, предназначен для дешифрации (декодирования)
последовательного кода Манчестер-II, применяющегося для последовательной передачи данных на большие расстояния,
в частности, в локальных сетях. Этот код уже упоминался в лекции 7 (см. рис. 7.16 и 7.17). Там был рассмотрен
кодировщик кода Манчестер-II.
Дешифрация (декодирование) этого кода гораздо сложнее кодирования (рис. 11.20). Она требует выделения
"правильных", информационных фронтов в середине битовых интервалов (помечены на рисунке кружками) и
отсечение "неправильных" фронтов между битовыми интервалами (помечены на рисунке крестиками). Для этого нужно
после первого (информационного) фронта в течение временного интервала 0,75Т не реагировать на приходящие фронты
входного сигнала, а затем снова обрабатывать любой приходящий фронт, снова выдерживать интервал 0,75Т и т.д.
При приходе "правильных", информационных фронтов (в середине битовых интервалов) необходимо формировать выходные
синхросигналы, по которым фиксируется (в регистре) информация из сигнала в коде Манчестер-II.
(рис 11.20) Декодирование кода Манчестер-IIТаким образом, алгоритм декодирования довольно сложен. Его можно, конечно, выполнить с помощью одновибраторов
и триггеров. Но можно воспользоваться и микропрограммным автоматом, который, в отличие от одновибратора, не требует
настройки, не чувствителен к помехам и тактируется сигналом кварцевого генератора.
Схема такого микропрограммного автомата (рис. 11.21) очень проста, она включает в себя ПЗУ типа РЕ3, регистр ИР27
и тактовый генератор с частотой, в 8 раз превышающей частоту прихода битов в коде Манчестер-II. Например, при
длительности битового интервала 1 мкс (скорость передачи информации 1 Мбит/с) частота генератора должна быть равной
8 МГц. Схема практически не отличается от схемы, рассмотренной в предыдущем примере, хотя выполняемая ею функция
гораздо сложнее.
Помимо синхросигнала (его обычно обозначают RxC или С), микропрограммный автомат выдает также сигнал огибающей
информационного пакета (Р), то есть сигнал, активный при наличии передачи информации в коде Манчестер-II и пассивный
при отсутствии передачи информации (см. рис. 11.20). Сигнал С (RxC) стробирует запись сигнала данных RxD, представляющего
собой просто входной сигнал в коде Манчестер-II, пропущенный через регистр.
(рис 11.21) Микропрограммный автомат для декодирования кода Манчестер-IIМы не будем подробно рассматривать составление микропрограммы для декодирования кода Манчестер-II, так как это
заняло бы слишком много места. Достаточно только внимательно изучить табл. 11.10, содержащую микропрограмму с
комментариями, чтобы понять, что в ней присутствуют и отключение реакции на входной сигнал, и выдержка временных
интервалов (задержка), и переходы в заданные адреса, и остановки для ожидания положительного и отрицательного фронтов
входного сигнала.
Микропрограмма декодирования кода Манчестер-II (сигнал RxC обозначен в таблице С)
| Адрес ПЗУ |
Данные ПЗУ |
Комментарий |
| Вход |
Адрес |
С |
P |
Сл. адрес |
| 0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
Задержка и ожидание положительного фронта входного сигнала |
| 0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
| 0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
| 1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
| 1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
Снятие Р и ожидание входного сигнала |
| 1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
Выставление R*C и переход на обработку положительного фронта входного сигнала |
| 1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
| 1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
| 1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
| 1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
| 0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
Снятие R*C и задержка с отключением входа |
| 0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
| 0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
| 0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
| 0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
Переход на ожидание положительного фронта |
| 1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
Снятие R*C и задержка с отключением входа |
| 1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
| 1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
| 1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
| 1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
Переход на ожидание положительного фронта |
| 1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
Задержка и ожидание отрицательного фронта входного сигнала |
| 1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
| 1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
| 1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
| 1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
Снятие Р и ожидание входного сигнала |
| 0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
Выставление R*C и переход на обработку отрицательного фронта входного сигнала |
| 0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
| 0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
| 0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
| 0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
Переход на ожидание положительного фронта |
Микросхемы памяти (или просто память, или запоминающие устройства — ЗУ, английское "Memory") представляют собой
следующий шаг на пути усложнения цифровых микросхем по сравнению с микросхемами, рассмотренными ранее.
Память — это всегда очень сложная структура, включающая в себя множество элементов. Правда, внутренняя структура памяти — регулярная,
большинство элементов одинаковые, связи между элементами сравнительно простые, поэтому функции, выполняемые
микросхемами памяти, не слишком сложные.
Память, как и следует из ее названия, предназначена для запоминания, хранения каких-то массивов информации,
проще говоря, наборов, таблиц, групп цифровых кодов. Каждый код хранится в отдельном элементе памяти, называемом
ячейкой памяти. Основная функция любой памяти как раз и состоит в выдаче этих кодов на выходы микросхемы по
внешнему запросу. А основной параметр памяти — это ее объем, то есть количество кодов, которые могут в ней
храниться, и разрядность этих кодов.
Для обозначения количества ячеек памяти используются следующие специальные единицы измерения:
1К — это 1024, то есть 210 (читается "кило-"" или "ка-"), примерно равно одной тысяче;
1М — это 1048576, то есть 220 (читается "мега-"), примерно равно одному миллиону;
1Г — это 1073741824, то есть 230 (читается "гига-"), примерно равно одному миллиарду.
Принцип организации памяти записывается следующим образом: сначала пишется количество ячеек, а затем через знак
умножения (косой крест) — разрядность кода, хранящегося в одной ячейке. Например, организация памяти 64Кх8 означает,
что память имеет 64К (то есть 65536) ячеек и каждая ячейка — восьмиразрядная. А организация памяти 4М х 1 означает,
что память имеет 4М (то есть 4194304) ячеек, причем каждая ячейка имеет всего один разряд. Общий объем памяти измеряется
в байтах (килобайтах — Кбайт, мегабайтах — Мбайт, гигабайтах — Гбайт) или в битах (килобитах — Кбит, мегабитах — Мбит,
гигабитах — Гбит).
В зависимости от способа занесения (записи) информации и от способа ее хранения, микросхемы памяти разделяются на
следующие основные типы:
Постоянная память ( ПЗУ — постоянное запоминающее устройство, ROM — Read Only Memory — память только для чтения),
в которую информация заносится один раз на этапе изготовления микросхемы. Такая память называется еще масочным ПЗУ.
Информация в памяти не пропадает при выключении ее питания, поэтому ее еще называют энергонезависимой памятью.
Программируемая постоянная память (ППЗУ — программируемое ПЗУ, PROM — Programmable ROM), в которую информация
может заноситься пользователем с помощью специальных методов (ограниченное число раз). Информация в ППЗУ тоже не
пропадает при выключении ее питания, то есть она также энергонезависимая.
Оперативная память (ОЗУ — оперативное запоминающее устройство, RAM — Random Access Memory — память с произвольным
доступом), запись информации в которую наиболее проста и может производиться пользователем сколько угодно раз на
протяжении всего срока службы микросхемы. Информация в памяти пропадает при выключении ее питания.
Существует множество промежуточных типов памяти, а также множество подтипов, но указанные — самые главные,
принципиально отличающиеся друг от друга. Хотя, разница между ПЗУ и ППЗУ с точки зрения разработчика цифровых
устройств, как правило, не так уж велика. Только в отдельных случаях, например, при использовании так называемой
флэш-памяти (flash-memory), представляющей собой ППЗУ с многократным электрическим стиранием и перезаписью информации,
эта разница действительно чрезвычайно важна. Можно считать, что флэш-память занимает промежуточное положение между
ОЗУ и ПЗУ.
В общем случае любая микросхема памяти имеет следующие информационные выводы (рис. 11.1):
(рис 11.1) Микросхемы памяти: ПЗУ (а), ОЗУ с двунаправленной шиной данных (б), ОЗУ с раздельными шинами входных и выходных данных (в)Адресные выводы (входные), образующие шину адреса памяти. Код на адресных линиях представляет собой двоичный номер
ячейки памяти, к которой происходит обращение в данный момент. Количество адресных разрядов определяет количество ячеек
памяти: при количестве адресных разрядов n количество ячеек памяти равно 2n.
Выводы данных (выходные), образующие шину данных памяти. Код на линиях данных представляет собой содержимое той
ячейки памяти, к которой производится обращение в данный момент. Количество разрядов данных определяет количество
разрядов всех ячеек памяти (обычно оно бывает равным 1, 4, 8, 16). Как правило, выходы данных имеют тип выходного
каскада ОК или 3С.
В случае оперативной памяти, помимо выходной шины данных, может быть еще и отдельная входная шина данных, на
которую подается код, записываемый в выбранную ячейку памяти. Другой возможный вариант — совмещение входной и
выходной шин данных, то есть двунаправленная шина, направление передачи информации по которой определяется управляющими
сигналами. Двунаправленная шина применяется обычно при количестве разрядов шины данных 4 или более.
Управляющие выводы (входные), которые определяют режим работы микросхемы. В большинстве случаев у памяти имеется
вход выбора микросхемы CS (их может быть несколько, объединенных по функции И). У оперативной памяти также обязательно
есть вход записи WR, активный уровень сигнала на котором переводит микросхему в режим записи.
Мы в данной лекции не будем, конечно, изучать все возможные разновидности микросхем памяти, для этого не хватит
целой книги. К тому же эта информация содержится в многочисленных справочниках. Микросхемы памяти выпускаются десятками
фирм во всем мире, поэтому даже перечислить все их не слишком просто, не говоря уже о том, чтобы подробно рассматривать
их особенности и параметры. Мы всего лишь рассмотрим различные схемы включения типичных микросхем памяти для решения
наиболее распространенных задач, а также методы проектирования некоторых узлов и устройств на основе микросхем памяти.
Именно это имеет непосредственное отношение к цифровой схемотехнике. И именно способы включения микросхем мало зависят
от характерных особенностей той или иной микросхемы той или иной фирмы.
В данном разделе мы не будем говорить о флэш-памяти, так как это отдельная большая тема. Мы ограничимся только
простейшими микросхемами ПЗУ и ППЗУ, информация в которые заносится раз и навсегда (на этапе изготовления или же
самим пользователем). Мы также не будем рассматривать здесь особенности оборудования для программирования ППЗУ (так
называемых программаторов ), принципы их построения и использования, — это отдельная большая тема. Мы будем считать,
что нужная нам информация может быть записана в ПЗУ или ППЗУ, а когда, как, каким способом она будет записана, нам
не слишком важно. Все эти допущения позволят нам сосредоточиться именно на схемотехнике узлов и устройств на основе ПЗУ и ППЗУ (для простоты будем называть их в дальнейшем просто ПЗУ ).
Упомянем здесь только, что ППЗУ делятся на репрограммируемые или перепрограммируемые ПЗУ (РПЗУ, EPROM — Erasable
Programmable ROM), то есть допускающие стирание и перезапись информации, и однократно программируемые ПЗУ. В свою
очередь, РПЗУ делятся на ПЗУ, информация в которых стирается электрическими сигналами (EEPROM — Electrically Erasable
Programmable ROM), и на ПЗУ, информация в которых стирается ультрафиолетовым излучением через специальное прозрачное
окошко в корпусе микросхемы (собственно EPROM — Erasable Programmable ROM). Запись информации в любые ППЗУ производится
с помощью подачи определенных последовательностей электрических сигналов (как правило, повышенного напряжения) на выводы
микросхемы.
Фирмами-производителями цифровых микросхем выпускается немало самых разнообразных ПЗУ и ППЗУ. Различаются
микросхемы постоянной памяти своим объемом (от 32 байт до 8 Мбайт и более), организацией (обычно количество разрядов
данных бывает 4, 8 или 16), способами управления (назначением управляющих сигналов), типами выходных каскадов (обычно
ОК или 3С), быстродействием (обычно задержка составляет от единиц до сотен наносекунд). Но суть всех микросхем ПЗУ
остается одной и той же: имеется шина адреса, на которую надо подавать код адреса нужной ячейки памяти, имеется
шина данных, на которую выдается код, записанный в адресуемой ячейке, и имеются входы управления, которые разрешают
или запрещают выдачу информации из адресуемой ячейки на шину данных.
(рис 11.2) Примеры микросхем ППЗУ отечественного производстваНа рис. 11.2 представлены для примера несколько простейших и типичных микросхем постоянной памяти.
Микросхема К155РЕ3 (аналог — N8223N) представляет собой однократно программируемое ППЗУ с организацией 32 х 8.
Исходное состояние (до программирования) — все биты всех ячеек нулевые. Для программирования (записи информации)
используется специальный программатор, подающий на разряды данных импульсы высокого напряжения. Тип выходных
каскадов — открытый коллектор, то есть обязательно надо включать на выходах резисторы, подсоединенные к шине питания.
Имеется один управляющий вход –CS, при положительном уровне сигнала на котором на всех выходах устанавливаются единицы.
Микросхема КР556РТ4 (аналог — I3601) — это также однократно программируемая постоянная память с организацией 256х4.
Исходное состояние (до программирования): все биты всех ячеек нулевые. Тип выходных каскадов — ОК. Два управляющих
входа -CS1 и –CS2 объединены по принципу И, то есть для разрешения работы микросхемы (для перевода выходов в активное
состояние) оба эти сигнала должны быть нулевыми. Для записи информации в микросхему используется программатор.
Микросхема КР556РТ18 (аналог — HM76161) также является однократно программируемым ППЗУ и имеет организацию 2Кх8.
Тип выходов микросхемы — 3С. Имеются три управляющих входа: один инверсный –CS1, два других — прямые CS2 и CS3,
объединенных по функции И. Выходы данных переходят в активное состояние при нулевом уровне на –CS1 и при единичных
уровнях на CS2 и CS3. Если входы управления используются для подачи управляющих сигналов (то есть выходы могут переходить
в третье состояние) то на выходы надо включать нагрузочные резисторы, подключенные к шине питания. Исходное состояние
микросхемы (до программирования) — все биты всех ячеек в единице.
Наконец, микросхема К573РФ8 (аналог — I27256) — это пример памяти РПЗУ с ультрафиолетовым стиранием информации.
Чтобы перепрограммировать память, необходимо ее стереть, для чего в течение некоторого времени (обычно несколько минут)
надо облучать микросхему через окошко в корпусе ультрафиолетовым светом (можно использовать медицинский кварцевый
облучатель). Стертая микросхема имеет все биты, установленные в единицу. Затем проводится процедура записи с помощью программатора, несколько отличающегося от программаторов однократно программируемых микросхем. Управляющие входы
–CS и –CE должны быть установлены в нуль для перевода выходов микросхемы в активное состояние. Имеется специальный
вход UPR для подачи программирующего высокого напряжения, который при чтении информации из микросхемы надо подключать
к напряжению питания. Тип выходных каскадов — 3С. Микросхемы этого типа самые медленные, их задержки самые большие.
Основные временные характеристики микросхем ПЗУ — это две величины задержки. Задержка выборки адреса памяти —
время от установки входного кода адреса до установки выходного кода данных. Задержка выборки микросхемы — время от
установки активного разрешающего управляющего сигнала CS до установки выходного кода данных памяти. Задержка выборки
микросхемы обычно в несколько раз меньше задержки выборки адреса.
Содержимое ПЗУ обычно изображается в виде специальной таблицы, называемой картой прошивки памяти. В таблице
показывается содержимое всех ячеек памяти, причем в каждой строке записывается содержимое 16 (или 32) последовательно
идущих (при нарастании кода адреса) ячеек. При этом, как правило, используется 16-ричное кодирование.
Пример карты прошивки ПЗУ
Адрес |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
00 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
10 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
20 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
30 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
40 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
50 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
60 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
70 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
80 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
90 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
A0 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
B0 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
C0 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
D0 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
E0 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
F0 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
Пример карты прошивки ПЗУ с организацией 256х8 показан в табл. 11.1 (все биты всех ячеек считаются установленными
в единицу). Пользоваться таблицей очень просто. Например для того, чтобы посмотреть содержимое ячейки памяти с 16-ричным
адресом 8А, надо взять строку таблицы с номером 80 и столбец таблицы с номером А (данная ячейка в таблице выделена жирным
шрифтом).
Любые микросхемы ПЗУ легко можно включать так, чтобы уменьшать или увеличивать количество адресных разрядов, то есть
уменьшать или увеличивать количество используемых ячеек памяти. И то, и другое часто требуется при построении схем
цифровых устройств.
Для уменьшения количества адресных разрядов необходимо на нужное число старших адресных входов подать нулевые
сигналы. Каждый отключенный таким образом адресный разряд уменьшает количество ячеек ПЗУ вдвое. Например, на рис. 11.3
показано, как из микросхемы с организацией 2Кх8 сделать микросхему 512х8. Два старших разряда адреса памяти отключены
(на них поданы нулевые сигналы). Использоваться будут только младшие (верхние в таблице прошивки) 512 ячеек, и только
их надо будет программировать. Конечно, гораздо лучше подобрать микросхему именно с тем количеством ячеек, которое
действительно необходимо в данной схеме, но это, к сожалению, возможно не всегда.
(рис 11.3) Уменьшение количества адресных разрядов ПЗУЗадача увеличения количества адресных разрядов ПЗУ встречается значительно чаще задачи уменьшения количества
адресных разрядов. В результате такого увеличения возрастает объем ПЗУ, объемы отдельных микросхем суммируются.
Для увеличения адресных разрядов обычно применяются микросхемы дешифраторов (рис. 11.4). Младшие разряды шины адреса
при этом подаются на объединенные адресные входы всех микросхем, а старшие — на управляющие (адресные) входы дешифратора.
Выходные сигналы дешифратора разрешают работу всегда только одной микросхемы памяти. В результате на общую шину данных
всех ПЗУ выдает свою информацию только одна микросхема. На рисунке для простоты не показаны выходные резисторы с разрядов
данных на шину питания, подключение которых чаще всего необходимо, так как тип выходов данных микросхем ПЗУ — это ОК
или 3С.
В результате подобного объединения микросхем ПЗУ может увеличиться время выборки адреса полученного единого ПЗУ.
В данном случае (см. рис. 11.4) оно будет равно максимальной из двух величин: времени выборки адреса одной микросхемы
и суммы двух задержек — задержки дешифратора и задержки выборки микросхемы ПЗУ.
(рис 11.4) Увеличение количества адресных разрядов ПЗУ с помощью дешифратораЕсли надо объединить две микросхемы (то есть добавить всего один разряд адресной шины), можно обойтись без
дешифратора, подавая на вход –CS одной микросхемы прямой дополнительный сигнал адреса, а на вход –CS другой микросхемы
— этот же сигнал с инверсией. Применение дешифратора 3—8 позволяет объединить 8 микросхем ПЗУ (добавить три адресных
разряда), а применение дешифратора 4–16 добавляет четыре адресных разряда, объединяя 16 микросхем ПЗУ.
Часто возникает также задача увеличения количества разрядов данных. Для этого необходимо всего лишь объединить
одноименные адресные входы нужного количества микросхем ПЗУ ; выходы же данных ПЗУ не объединяются, а образуют код
с большим числом разрядов. Например, при объединении таким образом двух микросхем с организацией 8Кх8 можно получить ПЗУ с организацией 8Кх16.
ПЗУ как универсальная комбинационная микросхема
Одно из самых распространенных применений микросхем ПЗУ — замена ими сложных комбинационных схем. Такое решение
позволяет существенно упростить проектируемое устройство и снизить количество используемых комбинационных микросхем,
а иногда даже уменьшить потребляемый ток и увеличить быстродействие схемы.
Суть предлагаемого подхода сводится к следующему. Если рассматривать адресные входы микросхемы ПЗУ как входы
комбинационной схемы, а разряды данных — как выходы этой комбинационной схемы, то можно сформировать любую требуемую
таблицу истинности данной комбинационной схемы. Для этого всего лишь надо составить таблицу прошивки ПЗУ, соответствующую
нужной таблице истинности. В этом случае не надо ни подбирать логические элементы, ни оптимизировать их соединения, ни
думать о том, можно ли вообще построить заданную комбинационную схему из стандартных микросхем. Важно только, чтобы
количество требуемых входов не превышало количества адресных разрядов ПЗУ, а количество требуемых выходов не превышало
разрядности шины данных ПЗУ.
В качестве примера рассмотрим довольно сложную комбинационную схему (рис. 11.5), имеющую восемь входов и четыре выхода.
Функция схемы сводится к следующему. Прежде всего она распознает два различных 5-разрядных входных кода (11001 и 10011)
в случае, когда на входе разрешения "–Разр." присутствует нулевой сигнал, а при приходе сигналов "–Строб 1" и "-Строб 2"
схема выдает на выход отрицательные импульсы. Причем первый выходной сигнал вырабатывается в случае, когда входной код
равен 11001 и пришел сигнал "–Строб 1", второй выходной сигнал — при том же коде, но по входному сигналу "–Строб 2".
Третий и четвертый выходной сигналы вырабатываются при входном коде 10011 и при приходе соответственно управляющих
сигналов "–Строб 1" и "–Строб 2". То есть логика работы довольно сложная и разнообразных логических элементов
требуется немало.

(рис 11.6) Пример комбинационной схемы, заменяемой ПЗУ(рис 11.5) Включение ПЗУ для замены комбинационной схемы, показанной на рис. 11.5Но всю эту схему можно заменить всего лишь одной микросхемой ПЗУ, например, типа РТ4, имеющей 8 адресных входов
и 4 выхода данных (рис. 11.6). При этом пять разрядов входного кода подаются на младшие разряды адреса ПЗУ (А0...А4),
входной сигнал "Разр." — на адресный вход А5, сигнал "–Строб 1" — на вход А6, сигнал "–Строб 2" — на вход А7.
Младший разряд данных памяти D0 используется для первого выходного сигнала, D1 — для второго выходного сигнала,
D2 — для третьего выходного сигнала, D3 — для четвертого выходного сигнала. Микросхема ПЗУ всегда выбрана
(управляющие сигналы –CS1 и –CS2 — нулевые). На выходах данных памяти включены резисторы, так как тип выходов
микросхемы РТ4 — ОК.
Составим карту прошивки ПЗУ. Активные выходные сигналы — нулевые, а пассивные — единичные. Значит, в большинстве
ячеек ПЗУ будут записаны коды F (все выходные сигналы пассивны). Активному (нулевому) первому выходному сигналу
при пассивных остальных будет соответствовать двоичный код данных 1110 (16-ричный код — Е), активному второму
выходному сигналу будет соответствовать двоичный код 1101 (16-ричный — D), активному третьему выходному сигналу —
двоичный код 1011 (или В), активному четвертому выходному сигналу — двоичный код 0111 (или 7). То есть только содержимое
четырех ячеек памяти будет отличаться от F.
Например, код Е будет записан в ячейку с таким адресом, пять младших разрядов которого (A0...А4) равны
селектируемому входному коду 11001, разряд А5 равен нулю (сигнал "Разр." активен), разряд А6 равен нулю
(сигнал "Строб 1" активен), а разряд А7 равен единице (сигнал "Строб 2" пассивен). Таким образом, получаем
двоичный код адреса 10011001 (или в 16-ричном коде 99). Точно так же код D будет записан в ячейку с адресом
01011001 (то есть 16-ричное 59), код В — в ячейку с адресом 10010011 (то есть 93), а код 7 — в ячейку с
адресом 01010011 (то есть 53). Получившаяся карта прошивки ПЗУ приведена в табл. 11.2. Она полностью совпадает
с таблицей истинности заменяемой комбинационной схемы.
Карта прошивки ПЗУ для замены комбинационной схемы
Адрес |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
00 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
10 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
20 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
30 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
40 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
50 | F |
F |
F |
7 |
F |
F |
F |
F |
F |
D |
F |
F |
F |
F |
F |
F |
60 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
70 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
80 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
90 | F |
F |
F |
B |
F |
F |
F |
F |
F |
E |
F |
F |
F |
F |
F |
F |
A0 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
B0 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
C0 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
D0 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
E0 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F0 | F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
F |
Может показаться, что такое использование микросхемы ПЗУ чересчур расточительно, избыточно, но это не так.
Гораздо важнее, что схема сильно упрощается. Если же взять комбинационную схему с более сложной таблицей истинности,
то возможности ПЗУ будут использованы полнее. К тому же большое достоинство такого решения состоит в том, что при
необходимости изменения логики работы комбинационной схемы потребуется всего лишь перепрошивка ПЗУ, а не проектирование
новой схемы из логических элементов. Задержка ПЗУ при замене комбинационной схемы любой сложности остается одной и
той же, она равна задержке выборки адреса микросхемы ПЗУ. При сложной заменяемой комбинационной схеме ПЗУ может оказаться
даже быстрее.
Однако использование ПЗУ для замены комбинационных схем имеет и довольно серьезные недостатки. Дело в том, что
микросхемы ПЗУ еще больше, чем комбинационные микросхемы, чувствительны к моменту изменения входных сигналов
(адресных разрядов). На выходах данных микросхем ПЗУ при любом изменении входного кода адреса могут появляться
короткие паразитные импульсы. Поэтому лучше всего использовать ПЗУ для замены таких комбинационных схем, которые
работают в статическом режиме и в которых короткие импульсы не имеют значения.
(рис 11.7) Методы синхронизации выходных сигналов ПЗУ с помощью сигнала CS (а) и выходного регистра (б)Можно также применять методы синхронизации выходных сигналов ПЗУ (рис. 11.7) с помощью управляющих сигналов выбора
микросхемы CS (а) или же с помощью выходных триггеров и регистров (б). Суть синхронизации состоит в том, что выходные
сигналы ПЗУ надо разрешать или фиксировать с помощью синхросигнала только тогда, когда все переходные процессы внутри
микросхемы, вызванные сменой кода адреса, уже закончились и паразитные импульсы на выходах гарантированно отсутствуют.
Микросхемы ПЗУ могут заменять собой любые комбинационные микросхемы: дешифраторы, шифраторы, компараторы кодов,
сумматоры, мультиплексоры, преобразователи кодов и т.д. Однако при подобной замене всегда стоит подумать, не лучше ли
использовать уже готовые микросхемы, чем изготавливать новые (программировать ПЗУ ). Микросхемы ПЗУ могут оказаться
медленнее стандартных комбинационных микросхем и потреблять больший ток питания. К тому же они могут требовать выходных
резисторов, если микросхемы имеют выходы ОК или при использовании входов CS у микросхем с выходами 3С. Другое дело,
когда ПЗУ выполняет функцию, отличающуюся от функции стандартной комбинационной микросхемы. Простейший пример —
дешифратор с положительными, а не с отрицательными (как в стандартных сериях) активными выходными сигналами.
В общем случае ПЗУ можно рассматривать как преобразователь входного кода (кода адреса) в выходной код (код данных)
по произвольному закону, задаваемому разработчиком. Это позволяет не только преобразовывать друг в друга различные
стандартные коды, но и выполнять множество других функций, например, использовать ПЗУ как простейший табличный вычислитель.
Для этого нужно на адресные разряды ПЗУ подать код входного числа (аргумента), а на выходах разрядов данных получить код
выходного числа (функции). Такой табличный вычислитель имеет очень высокое быстродействие по сравнению с другими типами
вычислителей (время вычисления функции равно задержке выборки адреса ПЗУ ).
В качестве простейшего примера рассмотрим вычислитель для возведения в квадрат 4-разрядного двоичного числа (рис. 11.8).
Вычислитель выполнен на микросхеме ПЗУ типа РЕ3, у которого использованы четыре разряда адреса и восемь разрядов данных.
Он позволяет получать двоичные коды квадратов любых чисел в диапазоне от 0 (или в двоичном коде 0000, в 16-ричном коде 0)
до 15 (или в двоичном коде 1111, в 16-ричном коде F), которые принимают значения от 0 (или в двоичном коде 00000000, в
16-ричном — 00) до 225 (или в двоичном коде 11100001, в 16-ричном — E1).
(рис 11.8) Вычислитель квадратов входных чиселКарта прошивки ПЗУ вычислителя квадратов (табл. 11.3) будет очень проста: код данных в каждой ячейке равен квадрату
кода адреса этой ячейки. Используется всего 16 ячеек памяти, содержимое остальных 16 ячеек не имеет значения
(что обозначено в таблице ХХ).
Карта прошивки ПЗУ-вычислителя квадратов
Адрес |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
00 | 00 |
01 |
04 |
09 |
10 |
19 |
24 |
31 |
40 |
51 |
64 |
79 |
90 |
A9 |
C4 |
E1 |
10 | XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
На такой же точно схеме (рис. 11.8) можно сделать и вычислитель квадратов в двоично-десятичном коде. В этом
случае будет использовано всего лишь десять ячеек памяти с адресами от 0 до 9, а в ячейках будут записаны их квадраты
от 0 до 81.
Недостаток любого табличного вычислителя на ПЗУ — это необходимость увеличения вдвое требуемого объема памяти при
увеличении разрядности входного числа на единицу. Например, при 8-разрядных входных числах требуется ПЗУ с количеством
ячеек 256, при 16-разрядных входных числах — ПЗУ с количеством ячеек 64К, а при 32-разрядных входных числах — ПЗУ с
количеством ячеек 4Г. Такие большие объемы очень трудно реализовать на серийно выпускаемых микросхемах. Поэтому
табличные вычислители на ПЗУ обычно строятся только для разрядности входных чисел не более 16.
Одно из наиболее распространенных применений ПЗУ как преобразователя кодов — это построение на их основе всевозможных
индикаторов, отображающих на экране буквы и цифры. ПЗУ в данном случае переводит код (номер) буквы или цифры в ее
изображение. Конечно, в данном случае заменить ПЗУ комбинационной схемой совершенно невозможно, так как букв и цифр
очень много, а их изображения очень разнообразны.
Простейший пример данного применения ПЗУ — это управление знаковым семисегментным индикатором, знакомым всем по
калькуляторам, кассовым аппаратам, электронным часам, весам и т.д. В семисегментных индикаторах изображение всех
цифр от 0 до 9 строится всего из семи сегментов (отрезков линий) (рис. 11.9).
(рис 11.9) Дешифратор знакового семисегментного индикатора на ПЗУЧтобы отобразить в виде цифры 4-разрядный двоичный код, надо этот код преобразовать в 7-разрядный код, каждому
разряду которого будет соответствовать один сегмент индикатора. То есть коду 0000 должно соответствовать изображение
нуля (6 сегментов, расположенных по периметру), а коду 0001 — изображение единицы (два правых вертикальных сегмента).
Для повышения универсальности индикатора удобно дополнить десять цифр еще и шестью буквами, использующимися в
16-ричном коде (A, B, C, D, E, F). Семь сегментов индикатора позволяют сделать и это, правда, изображения букв
получаются не слишком качественными.
Карта прошивки ПЗУ для дешифратора знакового индикатора
Адрес |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
00 | 40 |
79 |
24 |
30 |
19 |
12 |
02 |
78 |
00 |
10 |
08 |
03 |
46 |
21 |
06 |
0E |
10 | XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
ПЗУ типа РЕ3, используемое в качестве дешифратора индикатора, имеет 4 входа и 7 выходов (старший разряд адреса
и старший разряд данных не используются). Карта прошивки ПЗУ приведена в табл. 11.4. Нулевой сигнал на каждом из выходов
данных ПЗУ зажигает соответствующий ему сегмент.
ПЗУ позволяют также формировать и более сложные изображения букв и цифр — матричные. Такие изображения используются,
например, в табло типа "бегущая строка", на экранах мониторов, в больших рекламных табло. Каждая буква, цифра, другой
знак располагается в данном случае на прямоугольной матрице, называемой знакоместом и состоящей из нескольких строк и
нескольких столбцов точечных элементов изображения, которые могут зажигаться независимо друг от друга. Чем больше строк
и столбцов в знакоместе, тем более качественное изображение букв и цифр можно получить. Минимально возможный размер
знакоместа — 5 столбцов на 7 строк, то есть всего 35 элементов изображения.
ПЗУ в данном случае содержит в себе информацию об изображениях всех возможных букв и цифр (обычно этот набор включает
в себя 256 символов). Но выходной код ПЗУ имеет мало разрядов, поэтому каждый такой код, соответствующий одному адресу,
представляет собой информацию об изображении не целого символа, а только одной его строки (или столбца). Информация о
целом символе занимает в ПЗУ столько ячеек, сколько в изображении символа имеется столбцов (или строк). Пример матричного знакогенератора на ПЗУ приведен на рис. 11.10.
(рис 11.10) Матричный знакогенератор на ПЗУВ данном случае используется знакоместная матрица из 8 строк и 8 столбцов. В каждую ячейку ПЗУ записывается код
изображения одной из 8 строк одного из 256 символов. Изображение одного символа занимает 8 последовательно расположенных
ячеек в ПЗУ. Для букв и цифр правый столбец знакоместа не используется, он служит для отделения знаков друг от друга,
но для специальных символов (например, для графических) он может и использоваться. В случае матричного светодиодного
индикатора перебор строк может осуществляться 3-разрядным счетчиком с дешифратором 3–8 на его выходе. В случае
телевизионного монитора перебор строк осуществляется с помощью генератора вертикальной развертки изображения.
Составление карты прошивки такого ПЗУ непросто, оно обычно производится с помощью специальных программ на компьютере.
Но принцип составления прост. Например, если активному (зажженному) элементу изображения соответствует единичный сигнал,
то для нулевой строки символа "М", показанного на рисунке, в ПЗУ надо записать 10000010, для первой строки — код 11000110,
для второй — код 10101010, для третьей — 10010010 и т.д.
ПЗУ в генераторах импульсных последовательностей
Следующее важнейшее применение ПЗУ — это построение генераторов сложных последовательностей цифровых импульсов.
Такие генераторы широко используются в самых разных измерительных системах, в устройствах автоматики, в телевизионных
системах, в схемах управления линейными или матричными индикаторами и т.д.
Задача в данном случае ставится следующим образом. Необходимо сформировать последовательность из нескольких сигналов
различной длительности, сдвинутых относительно друг друга на различные временные интервалы. Причем последовательность
эта может быть как разовой (однократно начинающейся по внешнему сигналу), так и периодической, непрерывно повторяющейся.
Наиболее распространенная структура генератора последовательностей выходных сигналов на ПЗУ включает в себя тактовый
генератор нужной частоты, счетчик с требуемым числом разрядов, ПЗУ и выходной регистр (рис. 11.11). Счетчик перебирает
адреса ПЗУ, ПЗУ последовательно выдает на выходы данных все записанные в него коды. Выходной регистр, тактируемый тем
же тактовым сигналом, что и счетчик, служит для предотвращения появления в выходных сигналах паразитных импульсов и для
обеспечения одновременного переключения всех выходных сигналов (что особенно важно в случае, когда используются
несколько параллельно включенных микросхем ПЗУ для увеличения разрядности шины данных).

(рис 11.12) Пример структуры генератора последовательностей сигналов на ПЗУ(рис 11.11) Временная диаграмма формируемых выходных сигналовРассмотрим пример. Пусть необходимо непрерывно формировать периодическую последовательность из шести выходных
сигналов в соответствии с временной диаграммой рис. 11.12. Получить такую последовательность можно, конечно, с помощью
комбинационных схем, включенных на выходе счетчика, или с помощью множества одновибраторов, запускающих друг друга,
но и то, и другое решение чересчур громоздко и сложно как в проектировании, так и в настройке. Применение же ПЗУ
значительно упрощает задачу. Достаточно провести несложные расчеты и составить карту прошивки ПЗУ.
Расчеты сводятся к следующему.
Прежде всего определяем минимально возможную тактовую частоту (с целью минимизации требуемого объема ПЗУ ). Для
этого надо выделить максимальный временной интервал (дискрет времени), который укладывается целое число раз во все
временные сдвиги, задержки, длительности требуемой диаграммы. В нашем случае этот дискрет равен одному делению по оси
времени. Например, если длительность этого деления равна 250 нс, то и период тактового сигнала надо выбирать 250 нс,
то есть тактовая частота будет равна 4 МГц. Можно, конечно, выбрать ее и кратной 4 МГц, например, 8 МГц, 12 МГц, но тогда
потребуется вдвое или втрое больший объем ПЗУ. Если бы нам надо было формировать только три верхних сигнала (Выход 0,
Выход 1, Выход 2), то период тактовой частоты можно было бы брать вдвое больше (в нашем примере — 500 нс), так как для
этих сигналов все длительности кратны двум делениям.
Второй расчет сводится к определению количества ячеек и разрядности ПЗУ. Шесть выходных сигналов схемы требуют шести
разрядов данных ПЗУ. Длительность последовательности равна 20 тактам (или 14 в 16-ричном коде), то есть не равна 2n,
поэтому счетчик придется сбрасывать в нуль через каждые 20 тактов, для чего потребуется еще один разряд данных ПЗУ.
Итого потребуется 7 разрядов. А для перебора 20 тактов последовательности потребуется 5-разрядный счетчик, так как 24 = 16 (недостаточно), а 25 = 32 (достаточно). Значит, разрядность шины адреса ПЗУ также должна быть не менее пяти,
то есть минимальные требования к организации ПЗУ — это 32х8, значит, подойдет микросхема ПЗУ типа РЕ3.
Наконец, третий расчет касается условий правильной работы схемы. Генератор последовательности будет работать правильно,
если за период тактового сигнала успеют сработать счетчик и ПЗУ. То есть сумма задержки полного переключения счетчика и
задержки выборки адреса ПЗУ не должна превышать периода тактового сигнала.
(рис 11.13) Первый вариант схемы генератора последовательности сигналов на ПЗУТаким образом, один из возможных вариантов схемы генератора последовательности импульсов (рис. 11.13) будет включать в
себя тактовый генератор, пятиразрядный счетчик на основе ИЕ19, ПЗУ типа К155РЕ3 и 8-разрядный выходной регистр ИР27.
Так как счетчик срабатывает по отрицательному фронту тактового сигнала, а регистр — по положительному фронту тактового
сигнала, необходимо включить инвертор. На схеме для простоты не показаны резисторы на выходах данных типа ОК микросхемы ПЗУ.
Из схемы видно, что существует еще одно дополнительное условие правильной работы, связанное с использованием сигнала
сброса. За период тактового сигнала должен успеть сработать регистр (записать в себя сигнал сброса с выхода ПЗУ ), должен
сброситься счетчик и должно выдать код ПЗУ. То есть сумма задержек регистра, сброса счетчика и выборки адреса ПЗУ не
должна превышать периода тактового сигнала.
Карта прошивки ПЗУ генератора последовательности сигналов
Такт (адрес) |
Вых.6 |
Вых.5 |
Вых.4 |
Вых.3 |
Вых.2 |
Вых.1 |
Вых.0 |
Код (данные) |
| 0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1F |
| 1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
17 |
| 2 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
16 |
| 3 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
16 |
| 4 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
04 |
| 5 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
24 |
| 6 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
01 |
| 7 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
21 |
| 8 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
23 |
| 9 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
23 |
| A |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
26 |
| B |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
26 |
| C |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
24 |
| D |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
04 |
| E |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
21 |
| F |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
01 |
| 10 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
13 |
| 11 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
13 |
| 12 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
17 |
| 13 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
5F |
Теперь составим карту прошивки ПЗУ. Для этого сформируем таблицу значений всех семи выходных сигналов во всех
двадцати рабочих тактах генератора последовательностей (табл. 11.5). Значения шести выходных сигналов (Выход 0 ...
Выход 5) мы непосредственно берем из требуемой временной диаграммы (см. рис. 11.12). Хотя эти сигналы будут приходить
на выход схемы с задержкой на один такт из-за наличия выходного регистра, но при периодической работе генератора
последовательности это не имеет никакого значения.
Седьмой сигнал (Выход 6) используется в качестве сброса счетчика, он равен нулю от нулевого такта до 18 (в
16-ричном коде — 12) такта и равен единице в последнем девятнадцатом такте (в 16-ричном коде — 13). Этим
единичным сигналом счетчик будет сбрасываться в нуль, то есть работа схемы после 19 такта будет возобновляться с
нулевого такта.
Пусть нам требуется более высокое быстродействие схемы. Например, период тактового генератора должен быть равен
100 нс и даже меньше. В этом случае асинхронный счетчик типа ИЕ19 уже не подойдет из-за своего низкого быстродействия.
Надо использовать 5-разрядный синхронный счетчик. Можно, конечно, включить две микросхемы 4-разрядных счетчиков типа
ИЕ17, но можно обойтись и одним 4-разрядным счетчиком, если задействовать оставшийся свободным выход данных ПЗУ и
оставшийся свободным разряд регистра (рис. 11.14). При этом без всякого ущерба для быстродействия можно использовать
синхронный счетчик с асинхронным переносом ИЕ7, так как нужна всего одна микросхема счетчика.
(рис 11.14) Второй вариант схемы генератора последовательности с 4-разрядным синхронным счетчиком ИЕ7Карта прошивки ПЗУ генератора последовательностей остается той же самой, что и в предыдущем случае, но добавляется
один (седьмой) разряд шины данных ПЗУ. Этот разряд должен быть равен нулю в пятнадцати тактах с нулевого до 14 (в
16-ричном коде — Е), в четырех тактах с 15 (F в 16-ричном коде) по 18 (12 в 16-ричном коде) он должен быть равен
единице (код данных увеличится на 80), а в последнем 19 такте (13 в 16-ричном коде) он снова должен быть равен нулю.
В результате адреса ПЗУ будут перебираться от 0 до 15 (старший разряд адреса равен нулю), затем от 16 до 19 (старший
разряд адреса станет равен единице, а счетчик после переполнения считает с нуля), а затем снова от нулевого адреса
(счетчик сбросится сигналом "Выход 6", а старший разряд адреса памяти станет нулевым). Получающаяся в результате
карта прошивки ПЗУ приведена в табл. 11.6.
Карта прошивки ПЗУ для варианта схемы генератора последовательности импульсов
Адрес |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
| 00 |
1F |
17 |
16 |
16 |
04 |
24 |
01 |
21 |
23 |
23 |
26 |
26 |
24 |
04 |
21 |
81 |
| 10 |
93 |
93 |
97 |
5F |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
ХХ |
Конечно, рассмотренный пример довольно прост, при использовании ПЗУ большего объема генерируемые последовательности
сигналов могут быть гораздо сложнее рассмотренной, и выходных сигналов может быть больше, но суть остается прежней: ПЗУ выдает любые последовательности выходных сигналов минимальными средствами. Причем генерируемые последовательности
можно довольно просто изменять, заменяя ПЗУ на микросхемы с другой картой прошивки.
Микропрограммные автоматы на ПЗУ
Микропрограммные автоматы представляют собой следующий шаг по пути усложнения интеллекта цифровых схем. На основе
микропрограммных автоматов можно строить устройства, которые работают по довольно сложным алгоритмам, выполняют
различные функции, определяемые входными сигналами, выдают сложные последовательности выходных сигналов. При этом
алгоритм работы микропрограммного автомата может быть легко изменен заменой прошивки ПЗУ.
В отличие от рассматривавшихся ранее устройств на "жесткой" логике, принцип работы которых однозначно определяется
используемыми элементами и способом их соединения, микропрограммные автоматы с помощью одной и той же схемы могут
выполнять самые разные функции. То есть они гораздо более гибкие, чем схемы на "жесткой" логике. К тому же проектировать
микропрограммные автоматы с точки зрения схемотехники довольно просто. Недостатком любого микропрограммного автомата по
сравнению со схемами на "жесткой" логике является меньшее предельное быстродействие и необходимость составления карты
прошивки ПЗУ с микропрограммами, часто довольно сложными.
Наиболее распространенная структура микропрограммного автомата (рис. 11.15) включает в себя всего лишь три элемента:
ПЗУ, регистр, срабатывающий по фронту, и тактовый генератор.
(рис 11.15) Структура микропрограммного автоматаПЗУ имеет (L+M) адресных разрядов и N разрядов данных. Регистр применяется с количеством разрядов (N + L). Разряды
данных ПЗУ записываются в регистр по положительному фронту тактового сигнала с генератора. Часть этих разрядов (М)
используется для образования адреса ПЗУ, другая часть (N-M) служит для формирования выходных сигналов. Входные сигналы
(L) поступают на входы регистра и используются совместно с частью выходных разрядов ПЗУ для получения адреса ПЗУ.
Схема работает следующим образом. В каждом такте ПЗУ выдает код данных, тем самым определяя не только состояние
выходных сигналов схемы, но и адрес ПЗУ, который установится в следующем такте (после следующего положительного фронта
тактового сигнала). На этот следующий адрес влияют также и входные сигналы. То есть в отличие от формирователя
последовательности сигналов, рассмотренного в предыдущем разделе, в данном случае адреса могут перебираться не только
последовательно (с помощью счетчика), но и в произвольном порядке, который определяется прошивкой ПЗУ, называемой
микропрограммой.
Условием правильной работы схемы будет следующее. За один период тактового сигнала должны успеть сработать регистр
и ПЗУ. Иначе говоря, сумма задержки регистра и задержки выборки адреса ПЗУ не должна превышать периода тактового сигнала.
Отметим также, что входные сигналы микропрограммного автомата нельзя подавать непосредственно на адресные входы ПЗУ (без
регистра), так как их асинхронное (по отношению к тактовому сигналу) изменение может вызвать переходный процесс на выходах
данных ПЗУ именно в тот момент, когда выходные сигналы ПЗУ записываются в регистр. В результате в регистр может
записаться неверная информация, что нарушит работу всей схемы. Регистр же синхронизирует изменения входных сигналов
с тактовым сигналом, в результате чего все разряды кода адреса ПЗУ меняется одновременно — по положительному фронту
тактового сигнала. Регистр должен обязательно срабатывать по фронту, использование регистра-защелки не допускается, так
как он может вызвать лавинообразный переходный процесс.
Возможности такой простой схемы оказываются очень большими. Например, микропрограммный автомат может выдавать
последовательности выходных сигналов в ответ на определенное изменение входных сигналов. Он может также временно
остановить выдачу выходных сигналов до прихода входных сигналов. Он может анализировать длительность входного сигнала
и в зависимости от нее выдавать те или иные выходные сигналы. Он может также и многое другое.
Сформулируем несколько элементарных функций, из которых могут складываться алгоритмы работы микропрограммного
автомата (рис. 11.16):
(рис 11.16) Элементарные функции микропрограммного автомата: последовательный перебор (а), циклическое повторение (б) и остановка (в)Последовательный перебор адресов ПЗУ (например, для выдачи последовательности выходных сигналов).
Периодическое повторение последовательности адресов ПЗУ (например, для повторения последовательности
выходных сигналов).
Остановка в каком-то адресе ПЗУ (например, для ожидания изменения входного сигнала).
Временное отключение реакции на входные сигналы (например, для того, чтобы закончить отработку реакции на
предыдущее изменение входных сигналов). Эта функция на рисунке не показана.
В качестве примера рассмотрим выполнение некоторых элементарных функций микропрограммным автоматом, показанным
на рис. 11.17.
(рис 11.17) Пример практической схемы микропрограммного автомата на ПЗУПЗУ имеет организацию 64х8 (это могут быть две микросхемы РЕ3 или одна микросхема РТ18), количество разрядов
регистра равно десяти (это могут быть две микросхемы ИР27). Схема имеет два входных сигнала и четыре выходных
сигнала. Такая организация микропрограммного автомата хороша тем, что его микропрограмма (то есть карта прошивки ПЗУ ) очень наглядна, легко составляется и читается.
Карта прошивки ПЗУ 64х8 для микропрограммного автомата
Адрес |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
00 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
10 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
20 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
30 | FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
Выходные разряды данных ПЗУ делятся на две группы по 4 сигнала: младшие идут на образование следующего адреса ПЗУ, старшие образуют четыре выходных сигнала. Входные сигналы поступают (через регистр) на два старших разряда
адреса ПЗУ. Если мы изобразим карту прошивки ПЗУ в привычном для нас виде таблицы из четырех строк и 16 столбцов
(табл. 11.7), то в этой таблице будут наглядно видны как состояние каждого из внутренних сигналов, так и реакция
схемы на любой входной сигнал, а также состояния всех выходных сигналов в каждом такте.
Прежде всего, легко заметить, что выбор той или иной строки таблицы производится старшими разрядами кода адреса ПЗУ, то есть входными сигналами микропрограммного автомата. Таким образом, любое изменение входных сигналов приводит
к переходу в карте прошивки на другую строку. Например, строка 00 будет соответствовать нулевым входным сигналам
микропрограммного автомата, а строка 30 — единичным входным сигналам.
Пример микропрограммы для схемы на рис. 11.17
Адрес |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
00 | 11 |
22 |
33 |
44 |
55 |
66 |
77 |
88 |
99 |
AA |
BB |
CC |
DD |
EE |
FF |
00 |
10 | 11 |
22 |
33 |
44 |
55 |
66 |
77 |
88 |
99 |
55 |
BB |
CC |
DD |
EE |
FF |
00 |
20 | 10 |
21 |
32 |
43 |
54 |
65 |
76 |
87 |
98 |
A9 |
BA |
CB |
DC |
ED |
FE |
0F |
30 | 10 |
20 |
30 |
40 |
50 |
60 |
70 |
80 |
90 |
A0 |
B0 |
C0 |
D0 |
E0 |
F0 |
00 |
Теперь посмотрим на структуру 8-разрядного кода данных ПЗУ. Младшие четыре разряда этого кода (правый, младший
знак 16-ричного кода в таблице) соответствуют четырем младшим разрядам кода адреса ПЗУ. Старшие четыре разряда кода
данных ПЗУ (левый, старший знак 16-ричного кода в таблице) соответствуют четырем выходным сигналам микропрограммного
автомата. То есть непосредственно по 16-ричному коду данных из таблицы можно сказать, во-первых, каким будет
следующий адрес ПЗУ, и во-вторых, какими будут выходные сигналы автомата в следующем такте.
Рассмотрим пример микропрограммы (табл. 11.8), реализующей некоторые элементарные функции.
Верхняя (нулевая) строка таблицы демонстрирует последовательный перебор адресов памяти при нулевых входных
сигналах. Пусть, например, автомат находится в адресе 00. В ячейке с адресом 00 указан следующий адрес 1
(младший знак 16-ричного кода 11), то есть в следующем такте автомат перейдет в адрес 01 (считаем, что входные
сигналы остаются нулевыми). Из адреса 01 автомат перейдет в адрес 02, так как в ячейке с адресом 01 указан
следующий адрес 2. Точно так же из адреса 02 автомат перейдет в адрес 03 и так далее до адреса 0F, в котором
указан следующий адрес 0, то есть в следующем такте автомат снова вернется в адрес 00. Затем цикл последовательного
прохождения адресов первой строки повторится (если, конечно, входные сигналы останутся нулевыми). Четыре выходных
сигнала автомата в данном случае повторяют код следующего адреса, то есть, подобно 4-разрядному двоичному счетчику,
выдают постепенно нарастающий код.
Вторая сверху (первая) строка таблицы демонстрирует циклическое повторение группы тактов. Если, например, работа
начинается с адреса 10, то микропрограммный автомат последовательно будет перебирать адреса 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, а затем вернется в адрес 15 и будет постоянно повторять группу адресов 15, 16, 17, 18, 19. В данном
случае мы считаем, что входной сигнал "Вх. 1" постоянно равен единице, а входной сигнал "Вх. 2" постоянно равен нулю,
что и соответствует второй сверху строке таблицы.
Посмотрим теперь, что будет делать автомат, если входной сигнал "Вх. 2" постоянно равен нулю, а входной сигнал
"Вх.1" меняет свое состояние с нуля на единицу и обратно. Такое переключение входных сигналов приводит к переходу
между нулевой и первой строками таблицы с микропрограммой. Допустим, автомат начинает работу с адреса 00 (сигнал
"Вх. 1" равен нулю). Идет последовательный перебор адресов нулевой строки. Даже если в течение первых девяти
тактов сигнал "Вх. 1" будет меняться, на выходных сигналах автомата это никак не отразится, так как коды первых
девяти адресов в нулевой и первой строках полностью совпадают. Поэтому можно сказать, что в этих первых девяти тактах
мы отключили реакцию нашего автомата на входной сигнал "Вх. 1" за счет дублирования кодов.
Допустим теперь, что изначально нулевой входной сигнал "Вх. 1" стал равен единице в адресе 0А и далее не меняется.
Это приведет к тому, что вместо адреса 0В автомат перейдет в адрес 1В. Затем он пройдет адреса 1С...1F, перейдет в
адрес 10, дойдет до адреса 19 и начнет повторять цикл 15...19. Если же, например, в адресе 18 сигнал "Вх. 1" снова
станет равен нулю, то вместо адреса 19 автомат попадет в адрес 09 и далее будет выполнять микропрограмму нулевой
строки.
Третья сверху (вторая) строка таблицы, которая соответствует входным сигналам Вх. 1 = 0, Вх.2 = 1, показывает
пример остановки автомата в каждом адресе и ожидание прихода входного сигнала. Например, автомат находится в адресе 23.
Следующим адресом в коде данной ячейки указан 3. Значит, если входные сигналы остаются неизменными, то автомат перейдет
опять же в адрес 23 и будет оставаться в нем постоянно. Но если входной сигнал "Вх.2" станет равным нулю, автомат перейдет
в адрес 03 и начнет выполнять микропрограмму нулевой строки. То есть переключение входного сигнала "Вх.2" из нуля в единицу
при нулевом уровне "Вх.1" останавливает выполнение микропрограммы нулевой строки до обратного перехода входного сигнала
"Вх.2" в нуль.
Наконец нижняя (третья) строка таблицы демонстрирует переход из любого адреса строки в нулевой адрес этой же строки.
Пусть, например, выполняется микропрограмма нулевой строки ("Вх. 1" и "Вх. 2" — нулевые) и в адресе 06 оба входных
сигнала переходят в единицу. Автомат попадает в адрес 37, а из него — в адрес 30, где и остается постоянно до
изменения входных сигналов. Если затем оба входных сигнала снова станут нулевыми, то автомат перейдет в адрес
00 и начнет снова выполнять микропрограмму нулевой строки таблицы.
Иногда бывает необходимо перевести автомат в какой-то определенный адрес. Ведь при включении питания в
регистре может оказаться произвольный код. Для такой инициализации автомата можно, например, использовать
регистр, имеющий вход сброса R, на который подается внешний сигнал, и тогда по этому сигналу автомат попадет
в нулевой адрес. Но можно пойти и другим путем: составить микропрограмму таким образом, что автомат при
включении питания сам перейдет за несколько тактов в нужный адрес независимо от того, в какой адрес он попал
при включении питания.
Рассмотрим теперь пример проектирования простейшего микропрограммного автомата.
Пусть нам необходимо формировать с помощью микропрограммного автомата последовательность из трех выходных
сигналов в ответ на положительный фронт одного входного сигнала (рис. 11.18).
(рис 11.18) Диаграмма работы проектируемого микропрограммного автоматаВторой выходной сигнал "вложен" в первый, а третий "вложен" во второй. Причем до тех пор, пока данная
последовательность не закончится, входной сигнал может произвольно менять свое состояние, на работе схемы
это никак не должно сказываться. А после окончания данной последовательности микропрограммный автомат снова
должен ждать положительного фронта входного сигнала и начинать по нему выработку новой последовательности.
Все временные сдвиги в выходной последовательности (t) примем для простоты одинаковыми и равными 1 мкс.
Это значительно облегчает выбор тактовой частоты микропрограммного автомата, она должна быть равной 1 МГц
(период 1 мкс). В этом случае полная длина генерируемой последовательности составит всего 6 тактов (один такт
соответствует переходу всех выходных сигналов в единицу).
Для формирования 6-тактовой последовательности необходимо не менее 3 адресных разрядов ПЗУ (так как 22 = 4,
а 23 = 8 ). Еще один разряд адреса ПЗУ потребуется для входного сигнала схемы. Итого необходимо 4 адресных разряда ПЗУ.
Для формирования трех выходных сигналов требуется три разряда данных ПЗУ. Еще три разряда данных ПЗУ
нужно для задания следующего адреса при отработке выходной последовательности. Итого необходимо шесть разрядов
данных ПЗУ.
(рис 11.19) Спроектированный микропрограммный автоматПосчитаем требуемую разрядность выходного регистра. ПЗУ выдает шесть разрядов данных. Имеется один входной сигнал.
Итого регистр должен фиксировать 7 сигналов, значит, он должен быть 7-разрядным.
Итак, все расчеты закончены. Полученная схема микропрограммного автомата приведена на рис. 11.19. Она включает в
себя тактовый генератор с частотой 1 МГц, микросхему ПЗУ типа РЕ3, у которой не используется один разряд адреса и два
разряда данных, а также 8-разрядный регистр ИР27, у которого не используется один разряд. Для простоты на рисунке не
показаны резисторы на выходах данных типа ОК микросхемы ПЗУ.
Теперь необходимо составить микропрограмму для спроектированной схемы. Она должна включать в себя ожидание
положительного фронта входного сигнала, отработку последовательности выходных сигналов с временным отключением
входного сигнала, ожидание нулевого уровня входного сигнала и переход на новое ожидание положительного фронта
входного сигнала. Полученная микропрограмма с необходимыми комментариями представлена в табл. 11.9.
Микропрограмма для спроектированного автомата
| Адрес ПЗУ |
Данные ПЗУ |
Комментарий |
| Код |
Вход |
Данные |
Вых.1 |
Вых.2 |
Вых.3 |
Сл. адрес |
Код |
| 0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
38 |
Ожидание полож. фронта Вх. |
| 8 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
19 |
Пришел положительный фронт входного сигнала. Отработка последовательности. Входной сигнал равен единице. |
| 9 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0A |
| A |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
03 |
| B |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0C |
| C |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1D |
| D |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
3D |
Ожидание Вх.=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0A |
Вх. стал равен нулю до окончания последовательности |
| 2 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
03 |
| 3 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0С |
| 4 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
18 |
Переход на ожидание фронта |
| 5 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
38 |
Переход на ожидание фронта |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
38 |
Не используемые ячейки |
| 7 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
38 |
| E |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
38 |
| F |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
38 |
Отключение реакции на входной сигнал достигается в микропрограмме за счет дублирования участка отработки выходной
последовательности при входном сигнале, равном нулю, и при входном сигнале, равном единице. Если в конце выходной
последовательности входной сигнал равен единице, то схема ожидает сначала перехода входного сигнала в нуль
(отрицательный фронт), а затем уже ждет положительного фронта входного сигнала. Если в конце последовательности
входной сигнал равен нулю, то схема сразу же переходит на ожидание положительного фронта входного сигнала.
Все неиспользуемые микропрограммным автоматом ячейки заполнены командами перехода в начальное состояние схемы
с пассивными (единичными) выходными сигналами. Таким решением обеспечивается правильное начало работы микропрограммного
автомата при любом начальном адресе (при любом начальном коде в регистре). Начальный сброс автомата не используется.
Последний микропрограммный автомат, который мы рассмотрим в данном разделе, предназначен для дешифрации (декодирования)
последовательного кода Манчестер-II, применяющегося для последовательной передачи данных на большие расстояния,
в частности, в локальных сетях. Этот код уже упоминался в лекции 7 (см. рис. 7.16 и 7.17). Там был рассмотрен
кодировщик кода Манчестер-II.
Дешифрация (декодирование) этого кода гораздо сложнее кодирования (рис. 11.20). Она требует выделения
"правильных", информационных фронтов в середине битовых интервалов (помечены на рисунке кружками) и
отсечение "неправильных" фронтов между битовыми интервалами (помечены на рисунке крестиками). Для этого нужно
после первого (информационного) фронта в течение временного интервала 0,75Т не реагировать на приходящие фронты
входного сигнала, а затем снова обрабатывать любой приходящий фронт, снова выдерживать интервал 0,75Т и т.д.
При приходе "правильных", информационных фронтов (в середине битовых интервалов) необходимо формировать выходные
синхросигналы, по которым фиксируется (в регистре) информация из сигнала в коде Манчестер-II.
(рис 11.20) Декодирование кода Манчестер-IIТаким образом, алгоритм декодирования довольно сложен. Его можно, конечно, выполнить с помощью одновибраторов
и триггеров. Но можно воспользоваться и микропрограммным автоматом, который, в отличие от одновибратора, не требует
настройки, не чувствителен к помехам и тактируется сигналом кварцевого генератора.
Схема такого микропрограммного автомата (рис. 11.21) очень проста, она включает в себя ПЗУ типа РЕ3, регистр ИР27
и тактовый генератор с частотой, в 8 раз превышающей частоту прихода битов в коде Манчестер-II. Например, при
длительности битового интервала 1 мкс (скорость передачи информации 1 Мбит/с) частота генератора должна быть равной
8 МГц. Схема практически не отличается от схемы, рассмотренной в предыдущем примере, хотя выполняемая ею функция
гораздо сложнее.
Помимо синхросигнала (его обычно обозначают RxC или С), микропрограммный автомат выдает также сигнал огибающей
информационного пакета (Р), то есть сигнал, активный при наличии передачи информации в коде Манчестер-II и пассивный
при отсутствии передачи информации (см. рис. 11.20). Сигнал С (RxC) стробирует запись сигнала данных RxD, представляющего
собой просто входной сигнал в коде Манчестер-II, пропущенный через регистр.
(рис 11.21) Микропрограммный автомат для декодирования кода Манчестер-IIМы не будем подробно рассматривать составление микропрограммы для декодирования кода Манчестер-II, так как это
заняло бы слишком много места. Достаточно только внимательно изучить табл. 11.10, содержащую микропрограмму с
комментариями, чтобы понять, что в ней присутствуют и отключение реакции на входной сигнал, и выдержка временных
интервалов (задержка), и переходы в заданные адреса, и остановки для ожидания положительного и отрицательного фронтов
входного сигнала.
Микропрограмма декодирования кода Манчестер-II (сигнал RxC обозначен в таблице С)
| Адрес ПЗУ |
Данные ПЗУ |
Комментарий |
| Вход |
Адрес |
С |
P |
Сл. адрес |
| 0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
Задержка и ожидание положительного фронта входного сигнала |
| 0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
| 0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
| 1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
| 1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
Снятие Р и ожидание входного сигнала |
| 1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
Выставление R*C и переход на обработку положительного фронта входного сигнала |
| 1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
| 1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
| 1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
| 1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
| 0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
Снятие R*C и задержка с отключением входа |
| 0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
| 0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
| 0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
| 0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
Переход на ожидание положительного фронта |
| 1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
Снятие R*C и задержка с отключением входа |
| 1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
| 1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
| 1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
| 1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
Переход на ожидание положительного фронта |
| 1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
Задержка и ожидание отрицательного фронта входного сигнала |
| 1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
| 1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
| 1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
| 1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
Снятие Р и ожидание входного сигнала |
| 0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
Выставление R*C и переход на обработку отрицательного фронта входного сигнала |
| 0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
| 0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
| 0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
| 0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
Переход на ожидание положительного фронта |