Одне з найпоширеніших застосувань мікросхем ПЗУ - заміна ними складних комбінаційних схем. Таке рішення дозволяє істотно спростити проектоване пристрій і знизити кількість використовуваних комбінаційних мікросхем, а іноді навіть зменшити споживаний струм і збільшити швидкодію схеми.
Як приклад розглянемо досить складну комбінаційну схему (рис. 11.5), що має вісім входів і чотири виходи. Функція схеми зводиться до наступного. Перш за все вона розпізнає два різних 5-розрядних вхідних коду (11001 і 10011) в разі, коли на вході дозволу "-Разр." присутній нульовий сигнал, а при приході сигналів "-Строб 1" і "Строб 2" схема видає на вихід негативні імпульси. Причому перший вихідний сигнал виробляється в разі, коли вхідний код дорівнює 11001 і прийшов сигнал "-Строб 1", другий вихідний сигнал - при тому ж коді, але по вхідному сигналу "-Строб 2". Третій і четвертий вихідний сигнали виробляються при вхідному коді 10011 і при приході відповідно керуючих сигналів "-Строб 1" і "-Строб 2". Тобто логіка роботи досить складна і різноманітних логічних елементів потрібно чимало.
Мал. 11.5. Приклад комбінаційної схеми, замінної ПЗУ
Мал. 11.6. Включення ПЗУ для заміни комбінаційної схеми, показаної на рис. 11.5
Складемо карту прошивки ПЗУ. Активні вихідні сигнали - нульові, а пасивні - поодинокі. Значить, в більшості осередків ПЗУ будуть записані коди F (всі вихідні сигнали пасивні). Активному (нульового) першого вихідному сигналу при пасивних інших відповідатиме двійковий код даних 1110 (16-ковий код - Е), активному другого вихідному сигналу буде відповідати двійкового коду 1101 (16-ковий - D), активному третього вихідному сигналу - двійковий код 1011 (або В), активному четвертому вихідному сигналу - двійковий код 0111 (або 7). Тобто тільки вміст чотирьох елементів пам'яті буде відрізнятися від F.
Таблиця 11.2. Карта прошивки ПЗУ для заміни комбінаційної схеми
Мал. 11.7. Методи синхронізації вихідних сигналів ПЗУ за допомогою сигналу CS (а)
і вихідного регістра (б)
Мікросхеми ПЗУ можуть замінювати собою будь-які комбінаційні мікросхеми: дешифратори, шифратори, компаратори кодів, суматори, мультиплексори, перетворювачі кодів і т.д. Однак при подібній заміні завжди варто подумати, чи не краще використовувати вже готові мікросхеми, ніж виготовляти нові (програмувати ПЗУ). Мікросхеми ПЗУ можуть виявитися повільніше стандартних комбінаційних мікросхем і споживати більший струм живлення. До того ж вони можуть вимагати вихідних резисторів, якщо мікросхеми мають виходи ОК або при використанні входів CS у мікросхем з виходами 3С. Інша справа, коли ПЗУ виконує функцію, що відрізняється від функції стандартної комбінаційної мікросхеми. Найпростіший приклад - дешифратор з позитивними, а не з негативними (як в стандартних серіях) активними вихідними сигналами.
Мал. 11.8. Обчислювач квадратів вхідних чисел
Таблиця 11.3. Карта прошивки ПЗУ-обчислювача квадратів
Недолік будь-якого табличного обчислювача на ПЗУ - це необхідність збільшення вдвічі необхідного обсягу пам'яті при збільшенні розрядності вхідного числа на одиницю. Наприклад, при 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). Сім сегментів індикатора дозволяють зробити і це, правда, зображення букв виходять не дуже якісними.
Таблиця 11.4. Карта прошивки ПЗУ для дешифратора знакового індикатора
Мал. 11.10. Матричний знакогенератор на ПЗУ
В даному випадку використовується знакоместная матриця з 8 рядків і 8 стовпців. У кожну клітинку ПЗУ записується код зображення однієї з 8 рядків одного з 256 символів. Зображення одного символу займає 8 послідовно розташованих осередків в ПЗУ. Для букв і цифр правий стовпець знакомісця не використовується, він служить для відділення знаків один від одного, але для спеціальних символів (наприклад, для графічних) він може і використовуватися. У разі матричного світлодіодного індикатора перебір рядків може здійснюватися 3-розрядних лічильником з дешифратором 3-8 на його виході. У разі телевізійного монітора перебір рядків здійснюється за допомогою генератора вертикальної розгортки зображення.
Складання карти прошивки такого ПЗУ непросто, воно зазвичай проводиться за допомогою спеціальних програм на комп'ютері. Але принцип складання простий. Наприклад, якщо активному (запалений) елементу зображення відповідає одиничний сигнал, то для нульової рядки символу "М", показаного на малюнку, в ПЗУ треба записати 10000010, для першого рядка - код 11000110, для другої - код 10101010, для третьої - 10010010 та т.д.