Лечение амнезии

June 27, 2010 by admin Комментировать »

В 1965 г. в Иллинойском университете был запущен один из самых передо­вых компьютеров по тому времени — ILLIAC-IV. Это был первый компью­тер, в котором была использована быстрая память на микросхемах — каж­дый чип (производства Fairchild Semiconductor) имел емкость 256 бит, а всего было набрано 1 Мбайт. Стоимость этой памяти составила ощутимую часть от всей стоимости устройства, обошедшегося заказчику — NASA в $31 млн. Через 10 лет один из первых персональных компьютеров Altair 8800 (1975 г.), продававшийся в виде набора «сделай сам», при стоимости порядка $500 имел всего 256 байт (именно байт, а не килобайт) памяти. В том же году для распространения языка Basic for Altair Биллом Гейтсом и Полом Алле-ном была создана фирма, получившая первоначальное название Micro-Soft. Одна из самых серьезных проблем, которую пришлось решать— нехватка памяти, потому что созданный ими интерпретатор Basic требовал аж 4 Кбайт!

Проблема объемов памяти и ее дороговизна преследовала разработчиков достаточно долго, еще в конце 1990-х стоимость памяти для ПК можно было смело прикидывать из расчета 1 доллар/Мбайт, что при требовавшихся уже тогда для комфортной работы объемах ОЗУ порядка 128—^256 Мбайт могло составлять значительную часть стоимости устройства. Сейчас парой гигабайт памяти в настольном ПК или ноутбуке никого не удивишь. Это привело, в частнрсти, к кардинальным изменениям в самом подходе к программирова­нию — если еще при программировании под DOS о компактности программ и экономии памяти в процессе работы нужно было специально заботиться, то теперь это практически не требуется.

Но в программировании для микроконтроллеров это все еще не так. Хотя гейтсовский интерпретатор Basic влезет в большинство современных одно­кристальных МК, но экономная программа легче отлаживается (а значит, со­держит меньше ошибок) и быстрее выполняется. Три-четыре потерянных на вызове процедуры такта могут стать причиной какой-нибудь трудновылавли-ваемой ошибки времени выполнения— например, если за это время произойдет вызов прерывания. Поэтому память в МК стоит экономить, даже ес­ли вы располагаете заведомо достаточным ее объемом.

Далее мы рассмотрим основные разновидности памяти, используемые как в составе микроконтроллеров, так и во внешних узлах. И начнем с того, что попробуем сами сконструировать устройство долговременной памяти — ПЗУ (постоянное запоминающее устройство). Как мы увидим, любая память в принципе есть не что иное, как преобразователь кодов.

Изобретаем простейшую ROM

Всем известное сокращение ROM — Read-On 1у Memory — есть не что иное, как английское название постоянного запоминающего устройства, ПЗУ. На самом деле это название («память только для чтения») не очень точно харак­теризует суть дела, отечественное название есть более корректный термин, самое же правильное называть такую память «энергонезависимой». Ведь ПЗУ отличается от других типов памяти не тем, что его можно только читать, а записывать нельзя (практически все современные устройства ROM имеют возможность записи), а тем, что информация в нем не пропадает при выклю­чении питания.

Тем не менее, первыми разновидностями ПЗУ, изобретенными еще в 1956 году, были именно нестираемые кристаллы, которые носят наименование OTP ROM — One-Time Programmable ROM, «однократно программируемое ПЗУ». До недавнего времени на них делали память программ МК для уде­шевления серийных устройств — вы отлаживаете программу на перезаписы­ваемой памяти, а в серию пускаете приборы с «прожигаемой» OTP ROM. И лишь в последние годы «прожигаемая» память стала постепенно вытес­няться более удобной flash-памятью, поскольку последняя подешевела на­столько, что смысл в использовании одноразовых кристаллов пропал.

Мы сконструируем подобие «прожигаемого» ПЗУ с помощью диодов. Про­стейший вариант такого ПЗУ представлен на рис. 18.4. В данном случае он представляет собой не что иное, как преобразователь из десятичного кода в семисегментный. Если на входе поставить дешифратор типа 561 ИД 1, пере­водящий двоичный код в десятичный, то мы получим аналог микросхемы 561ИД5.

Чтобы понять, как это работает, представьте себе, что первоначально на всех пересечениях между строками и столбцами диоды присутствовали— это аналог незаполненной памяти, в которой записаны все единицы. Затем мы взяли и каким-то образом (например, подачей высокого напряжения) разру­шили те диоды, которые нам не нужны, в результате чего получили нужную конфигурацию.

clip_image002

Рис. 18.4. Простейшее ПЗУ — преобразователь кода

Эта схема не содержит активных элементов, и потому возможности ее огра­ничены— например, выходы устройства, подающего активный высокий уровень по входным линиям, должны «тащить» всю нагрузку по зажиганию сегментов. Обычная микросхема ПЗУ построена на транзисторных ячейках и поэтому без всяких хитростей принимает и выдает обычные логические уровни. К тому же она включает в себя и дешифрирующую логику, потому на вход подается двоичный, а не десятичный код.

Постойте, а причем тут ПЗУ вообще? Дело в том, что входной код здесь можно рассматривать, как адрес ячейки, в выходной — как ее содержимое. И любое ПЗУ можно представить, как универсальный преобразователь ко­дов. Причем удобство состоит в том, что изначально в ПЗУ не записано ниче­го (одни нули или единицы), и мы может реализовать на нем любую логиче­скую функцию, все зависит только от его емкости. В том числе, такую простую, как преобразователь кодов десятичный-семисегментный, или же такую сложную, как операционная система Windows. Последнее мы каждый раз и делаем, когда устанавливаем Windows на компьютер, причем в качестве ПЗУ выступает жесткий диск. Из этого примера отчетливо видно, что каким бы сложным не был алгоритм, он все равно в конечном итоге сводится к со­вокупности однозначных логических уравнений, которые можно реализовать как через ПЗУ с записанной программой, так и с помощью цифрового уст­ройства любого другого типа.

Общее устройство памяти

Общее устройство фрагмента памяти любого типа показано на рис. 18.5. Из рисунка видно, что память всегда имеет матричную структуру. В данном случае матрица имеет 8×8 = 64 однобитных ячейки. На рис. 18.5 показано, как производится вывод и загрузка информации в память с помощью муль-типлексоров/демультиплексоров (вроде 561КП2, см. главу 15). Код, посту­пающий на мультиплексор слева (д:з—хз) подключает к строке с номером, соответствующим этому коду, активирующий уровень напряжения (это мо­жет быть логическая единица, как показано на рисунке, или ноль, неважно). Код на верхнем демультиплексоре (хо—^2) выбирает столбец, в результате к выходу этого демультиплексора подключается ячейка, стоящая на пересече­нии выбранных строки и столбца.

Легко заметить, что сама по себе организация матрицы при таком однобит­ном доступе для внешнего мира не имеет значения. Если она будет построена как 4×16, или 32×2, или даже вытянута в одну линеечку 64×1 — в любом случае код доступа (он называете^ адресным кодом) будет 6-разрядным, а выход один-единственный. Поэтому всем таким ЗУ приписывается организа­ция Nxl бит, где N— общее число битов. Для того чтобы получить байтную организацию, надо просто взять 8 таких микросхем и подать адресный код на них параллельно, тогда на выходах получим параллельный восьмибитный код, соответствующий байту. Так как объединение 8 микросхем заставит нас добавить еще три линии адреса, то общий код получится 9-битным, а общая емкость такой памяти составит 512 бит или 64 байта. У нас получается хоро­шая модель типового модуля памяти, вроде тех, что используются в компью­терном ОЗУ. Большинство выпускаемых интегральных ЗУ также сложены из таких отдельных однобитных модулей (только в наше время уже значительно большей емкости) и имеют 8 или 16 параллельных выходов, но бывают кри­сталлы и с последовательным (побитным) доступом.

clip_image004

Рис. 18.5. Схематическое устройство ЗУ с однобитным последовательным выходом

В качестве примера можно привести, скажем, ПЗУ с организацией 64Кх16 типа АТ27С1024 фирмы Atmel (рис. 18.6). Это однократно программируемое КМОП ПЗУ с напряжением питания. 5 В и емкостью 1024 Мбита, что состав­ляет 128 Кбайт или 64 К двухбайтных слов. Следует отметить, что в области микросхем памяти сложилась хорошая традиция, когда все они, независимо от производителя и даже технологии, совпадают по выводам, разводка кото­рых зависит только от организации матрицы (даже, как правило, не от объе­ма!) и, соответственно, от применяемого корпуса (в данном случае — DIP-40).

Для разных типов (RAM, ROM, EEPROM и т. д.) разводка различается в час­ти выводов, управляющих процессом программирования, но можно спокойно заменять одну микросхему на другую (с той же организацией и, соответст­венно, в таком же корпусе) без переделки платы.

clip_image006

Рис. 18.6. Разводка выводов АТ27С1024

RAM

Традиционное название энергозависимых типов памяти, как и в случае ROM, следует признать довольно неудачным. RAM значит Random Access Memory, то есть «память с произвольным доступом», по-русски это звучит, как ЗУПВ— «запоминающее устройство с произвольной выборкой». Главным же признаком класса является не «произвольная выборка», а то, что при вы­ключении питания память стирается. EEPROM (о которой далее), к примеру, тоже допускает произвольную выборку и при записи, и при чтении. Но так сложилось исторически, и не нам разрушать традиции.

Подавляющее большинство производимых микросхем ЗУПВ относится к ди­намическому типу. В них информация хранится в виде заряда на конденсато­ре, который имеет привычку быстро утекать, и потому такая память требует периодической регенерации (раз в несколько миллисекунд). Зато она дешева (каждая ячейка состоит из одного конденсатора и одного транзистора) и упа­ковывается с высокой плотностью элементов, поэтому динамическое ЗУ (DRAM) является основным видом компьютерных ОЗУ.

Статическое ОЗУ (SRAM), ячейка которого представляет собой один из ва­риантов разобранных в главе 16 триггеров, устроено сложнее, имеет мень­шую плотность упаковки (то есть при тех же габаритах меньшую емкость) и стоит гораздо дороже. Главное ее преимущество, кроме того, что она не тре­бует регенерации— высокое быстродействие и отсутствие потребления в статическом режиме. Выпускаются отдельные микросхемы SRAM, как про­стые (например, UT62256 с организацией 32Кх8), так и довольно «наворо­ченные»: так, микросхема М48Т35 кроме собственно массива памяти (32Кх8) содержит на кристалле часы реального времени, монитор питания и, главное, имеет встроенную литиевую батарейку, крторая позволяет сохра­нять информацию при отключении питания. Но с распространением энерго­независимой flash-памяти, о которой будет рассказано далее, такие примене­ния SRAM потеряли актуальность, и за ней осталась главная область, где она незаменима: это регистры и кэш-память в микропроцессорах, а также ОЗУ данных в микроконтроллерах и ПЛИС.

По счастью, с DRAM нам в схемотехническом плане иметь дело не придется, а SRAM мы увидим только в составе микроконтроллеров. Поэтому рассмот­рим подробнее более актуальные для пользователя разновидности ROM.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты