Постоянная память. Тесты памяти для ZX-Spectrum, прошиваемые в ПЗУ Прошить ПЗУ, прошивка ПЗУ

Описывал как установить Quartus , но это был лишь шаг к поставленной задаче. Для того чтобы убедиться, что ПЛИС и программатор работают, первую надо было прошить.
Оказалось, что сделать это можно двумя способами, первый - через JTAG интерфейс, в этом случае конфигурационная информация зашивается непосредственно ПЛИС. Недостаток этого способа в том, что память ПЛИС энергозависима и прошивку необходимо загружать в ПЛИС каждый раз после подачи питания.

Выход из сложившейся ситуации напрашивается сам собой и заключается он в том, чтобы рядом с ПЛИС разместить микросхему памяти и из нее каждый раз после подачи питания загружать прошивку . Единственное, что стоит добавить, что прошивка хранится не в обычной флэшке, а в специальной микросхеме - последовательно конфигурационном ПЗУ. У Altera - это микросхемы серии EPCS или EPCQ , программируемые по интерфейсу Active Serial . Это и есть второй способ, смысл его в том, чтобы запрограммировать микросхему последовательно конфигурационного ПЗУ, а после подачи питания ПЛИС вычитает из неё прошивку.
Но тут напрашивается другой вопрос, получается для программирования микросхемы последовательно конфигурационного ПЗУ необходим отдельный разъем?
Оказывается разработчики ПЛИС позаботились об этом и ПЛИС может выступать посредником между интерфейсами JTAG и Active Serial . То есть получает она прошивку по JTAG интерфейсу, а записывает её в ПЗУ, используя Active Serial . С теорией разобрались и можно приступать к практике.

По моей просьбе продавец отправил мне на почту схему отладочной платы и несколько простых проектов. В одном из проектов был найден файл с расширением .sof , который необходим для прошивки.
Для того, чтобы прошить ПЛИС по jtag необходимо:

  • запустить Quartus
  • выбрать Programmer во вкладке Tools
  • указать файл прошивки


  • прошить ПЛИС, нажав кнопку Start , предварительно установив нужные галки

  • при удачной прошивке в правом верхнем углу видим 100% Successful

В той же папке откуда был взят файл.sof был найден файл с расширением .pof. Файлы с таким расширением необходимо зашивать, подключившись непосредственно к ПЗУ, но мне хотелось прошить плату без лишних телодвижений через jtag . Для этого из файла.sof необходимо было получить файл с расширением .jic .

Для конвертации.sof файла в.jic необходимо :

  • в меню File выбрать Convert Progamming Files

  • в открывшемся меню выбрать в поле Programming file type выбрать JTAG Indirect
    Configuration File (.jic)
  • в поле Configuration device выбираем тип ПЗУ, расположенного на плате
  • в поле Mode выбираем режим прошивки
  • в поле File name определяем имя и директорию выходного файла

  • в поле Inputs File to Convert кликаем по SOF Data, c правой стороны появляется кнопка Add File , кликнув по которой можно выбрать файл для конвертации

7 / 8 121

Версия для печати

Тесты памяти для ZX-Spectrum, прошиваемые в ПЗУ

Неисправности, связанные с ОЗУ, занимают "почётную" нишу среди всевозможных причин неработоспособности Спектрумов. Микросхемы памяти относительно ненадёжны и склонны выгорать (в особенности при проблемах с питанием). И особенно если источник питания Спектрума трансформаторный. Уже сколько раз было замечено на моём компьютере Ленинград-1 с трансформаторным блоком питания - случайно перемкнёшь питание компьютера (+5В и массу), и одна-две микросхемы КР565РУ5 уже "вылетели".

Как правило горит микросхема памяти полностью. Т.е. не так, что в ней какой-то один бит не работает, а вообще вся микросхема перестаёт работать. Память Спектрума организована так, что каждая микросхема ОЗУ отвечает за свой бит памяти (для 48К спектрума это 8 микросхем по одному биту, итого имеем 64КБ адресуемой памяти). При старте компьютера ПЗУ производит свой тест памяти, и, если какая-либо ячейка ОЗУ "сбоит", компьютер устанавливает границу доступной памяти на адрес ячейки, предыдущей перед неисправной. При этом значение границы доступной памяти устанавливается в системной переменной P_RAMT (она находится по адресам 23732-23733 в ОЗУ. В исправном компьютере значение этой системной переменной будет равно #FFFF (т.е. в обеих ячейках памяти будут записаны числа 255). Если в системной переменной находится число, не равное #FFFF, к примеру если там #F000, то это означает, что ячейка памяти #F001 уже дефектная.

Всё это очень хорошо, но только в том случае, если обнаруженная дефектная ячейка памяти находится не в начале доступного ОЗУ. Дело в том, что для работы BASIC-48 тоже требуется какая-то доступная исправная память. И если дефект памяти выявится в начале ОЗУ, то BASIC просто-напросто не запустится, и мы ничего не сможем узнать. В случае, когда сгорела одна из микросхем ОЗУ полностью, компьютер не запустит BASIC.

Далее остаются только "пляски с бубном", чтобы найти что же в действительности сгорело. Применимо к микросхемам памяти можно попробовать примитивную, но иногда полезную диагностику. Дело в том, что дефектная микросхема памяти (КР565РУ5) может отличаться по температуре от остальных рабочих микросхем. При работе ОЗУ КР565РУ5 греется. Если приложить к микросхемам ОЗУ палец, можно почувствовать, что микросхемы ощутимо тёплые. Неисправная микросхема может греться как утюг, а может быть вообще холодной. Это необязательно будет так, но данный метод можно запомнить и применять от случая к случаю.

Вообще при производстве Спектрумов правилами хорошего тона является установка на панельки микросхемы ПЗУ и процессора. Это очень сильно облегчает жизнь при ремонте компьютера. В данном случае нас интересует микросхема ПЗУ. В "древних" Спектрумах, производимых в конце 80-х (начале 90-х годов) как правило ставилось две микросхемы ПЗУ. Это продиктовано тем, что микросхему ПЗУ объёмом 16К (буржуинское наименование 27128) достать в то время было не так-то просто, поэтому было проще и дешевле заменить её на две микросхемы объёмом по 8К, благо у них был отечественный аналог КР573РФ4, КР573РФ6. И обычно одну из микросхем (как правило это ПЗУ-0) ставили на панельку. Почему ПЗУ-0? Т.к. ПЗУ собрано на двух микросхемах, его адресное пространство разбито на две части. Всего объём ПЗУ составляет 16К. Поэтому первые 8К считаются как ПЗУ-0, а вторые 8К - ПЗУ-1. При старте компьютера процессор начинает выполнять программу, расположенную с адреса #0000, а это как раз область, адресуемая ПЗУ-0.

Таки да, нам очень надо, чтобы хотя бы одно ПЗУ было на панельке. Если на плате компьютера вообще одно ПЗУ на панельке, это тоже очень хорошо. Всё дело в том, что ПЗУ можно снять и вместо него поставить своё ПЗУ, в котором "прошит" тест памяти. Тогда при включении компьютера будет запущен нужный нам тест памяти, который явно покажет, что у нас творится с памятью в компьютере.

Очень-очень давно, когда у меня ещё не было программатора ПЗУ, приходилось ехать на радиорынок и там суровые дядьки за соответствующую мзду прошивали в ПЗУ что угодно. Были у них и тесты памяти для Спектрумов. Да, хорошее было тогда время...

Так вот, прикупив заветную прошитую микросхему ПЗУ можно было потестить свой компьютер. Однако сперва нужно было решить вопрос - как правильно вставить ПЗУ в панельку? Дело в том, что тест ПЗУ прошивается в микросхему объёмом 2К. Она имеет 24 вывода. В Спектруме используются 28-выводные ПЗУ. В этом случае у микросхемы с тестом поднимались выводы 21 и 24 и объединялись следующим образом:

Вставляется такая микросхема в панельку так, как показано на фотографии:

Думаю, на фотографии всё ясно видно. Контакт 12 ПЗУ (GND) должен совпасть с контактом 14 в панельке. А оттопыренный вывод тестового ПЗУ должен попасть в 28-й контакт панельки (питание +5В).

Можно не уродовать ПЗУ, а сделать переходную плату. Сверху ставим панельку на 24 контакта для тестового ПЗУ, снизу торчат штыри для установки платы в 28-выводную панельку в компьютер. Все требуемые изменения в присоединении 21 и 24 выводов ПЗУ можно сделать прямо на такой плате:

В своей практике я часто пользуюсь следующими тестовыми прошивками:

Тестовое ПЗУ для ZX-Spectrum 48K

Как следует из названия, проверяет 48К ОЗУ. Работает очень медленно (порядка 12 минут). Сначала чистятся атрибуты экрана, потом поочерёдно экран закрашивается и очищается, затем показываются результаты теста ОЗУ. После этого идёт тест ПЗУ, но он всегда завершается с ошибкой, но для нас это не играет никакой роли. Главное - проверить ОЗУ.

ВНИМАНИЕ!
У этого теста есть одна "фишка" - если держать при старте теста пробел, то графическая часть с закрашиванием атрибутов пропускается и начинается непосредственно тест ОЗУ. Проверка на нажатый пробел делается в момент, когда заканчивается перебор цветов бордюра в начале теста.

Прохождение теста, если неисправна одна из микросхем ОЗУ, можно увидеть в первом выпуске Байт Tales #01:

БАЙТ Tales #01 - Ремонтируем компьютер «Байт»

Ещё одно тестовое ПЗУ для ZX-Spectrum 48K

Меня не совсем устраивает тест памяти 48К из предыдущего раздела страницы, поэтому когда у меня появилось свободное время и желание я дизассемблировал этот тест и на его основе "запилил" свою версию, в которой постарался реализовать свои "хотелки".

В итоге получился немного более усовершенствованный тест памяти, в котором я добавил несколько алгоритмов тестирования памяти, выкинул из теста лишний код (там его хватает), а также сделал "глушилку" синтезатора на КР580ВИ53 в случае использования теста на компьютере "Байт".

Скачать прошивку теста вместе со всеми исходниками для iS-DOS (тест написан на iS-Assembler) можно в конце этой страницы.

Тест ПЗУ для ZX-Spectrum 48K (из журнала "Радиолюбитель" 1995 №9

В журнале "Радиолюбитель" №9 за 1995 год опубликован дамп теста ПЗУ для ZX-Spectrum 48 за авторством Г. Улановского.

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

После окончания теста на бордюр выводятся 8 белых полос, символизирующих 8 бит ОЗУ. Первая сверху полоса показывает исправность бита D0, вторая - D1, третья - D2 и т.д. В случае исправного соответствующего бита ОЗУ полоса будет узкая:

В случае неисправного бита полоса будет в два раза шире:

Недостатком теста является проверка только первых 16К ОЗУ (по адресам #4000-#7FFF). Однако это легко исправляется изменением исходника теста.

Тест происходит в 4 этапа (заполнение и проверка на байты #00, #FF, #55 и #AA). При желании можно добавить в исходный текст и другие варианты проверки ОЗУ.

В качестве примера я доработал тест для проверки всего объёма ОЗУ 48К, а также вставил в исходник процедуру глушения КР580ВИ53 для компьютера "Байт". Прошивки двух вариантов теста и исходники можно скачать в конце этой статьи.

Тестовое ПЗУ для ZX-Spectrum 128К

Этот тест позволяет быстро проверить память в 128-м ZX-Spectrum.

Как проходит тест на исправном компьютере можно посмотреть на следующем видео:

Тут должно быть видео, но оно не будет работать, пока вы не разрешите работу JavaScript для этого сайта

После сообщения об успешном тесте ПЗУ происходит зацикливание, на это можно не обращать внимание.

При работе на некоторых компьютерах с подключенным контроллером дисковода возможны глюки при прохождении теста. Дело в том, что при подключении контроллера дисковода делается доработка, которая запрещает выбор каких-либо портов при работе контроллера. К примеру, как рекомендуется делать при подключении контроллера C-48 к ZX-Spectrum:

Разрывается проводник, идущий от выхода /IORQ процессора к схеме компьютера, и в разрыв включается логический элмент, коммутирующий сигнал /IORQ.

Это делается для того, чтобы отключить возможные конфликтующие с портами контроллера дисковода порты компьютера. В первую очередь это порт Kempston джойстика. Однако никто не станет для конкрентой модели компьютера искать что там может конфликтовать с контроллером дисковода, поэтому проще на момент работы контроллера дисковода отключить обращение к портам вообще.

Второй момент: опять же в некоторых компьютерах, доработанных таким образом, при сбросе сразу же запускается TR-DOS. Это сделано для того, чтобы каждый раз из-под BASIC не "набивать" команду RANDOMIZE USR 15616 для старта TR-DOS.

Третий момент: опять же в некоторых компьютерах ПЗУ с BASIC совмещено с ПЗУ TR-DOS в одной микросхеме. К примеру как в этом компьютере Ленинград-1 :

Программатор - аппаратно-программное устройство, предназначенное для записи/считывания информации в постоянное запоминающее устройство (однократно записываемое, флеш-память, ПЗУ, внутреннюю память микроконтроллеров и ПЛК).

Программатор - это устройство, которое заносит информацию, необходимую для работы, в программируемые энергонезависимые цифровые микросхемы, такие, как PROM (ПЗУ ), EPROM (ППЗУ), EEPROM (ЭСППЗУ), Flash, PAL, GAL, FPGA и микроконтроллеры . Процесс записи часто называется " ", " ", " ", " ".

Прошить ПЗУ, прошивка ПЗУ

"Прошить ПЗУ" - записать информацию в ПЗУ.

Когда-то, когда компьютеры были большими, с середины 1950-х и до середины 1970-х годов, в компьютерах использовалась память на магнитных сердечниках. Такая память использовалась и как ОЗУ, и как ПЗУ. При изготовлении ПЗУ провод либо проходил через кольцо, либо его обходил. Провод пропускали через ферритовое кольцо с помощью специальной иглы. То есть "прошивали" матрицу памяти в прямом смысле. Поэтому за этим процессом вполне закономерно закрепилось определение "прошить ПЗУ" . Для того чтобы правильно "прошить" , создавали технологический документ "карта прошивки" в котором было указано через какие кольца пропускать провод, а через какие нет. Память на ферритовых сердечниках ушла в прошлое, однако, термин "прошить" и "прошивка" применительно к процессу записи в ПЗУ используется до сих пор. Причем слово "прошивка" используется как глагол применительно к процессу занесения информации в ПЗУ, так и как существительное применительно к самой заносимой информации или файлу.

В отличие от полупроводников магнитные сердечники не боятся радиации и электромагнитного излучения, и, поэтому, память на магнитных сердечниках некоторое время продолжали использовать в военных и космических системах. Достоверно известно, что ее использовали в бортовых компьютерах Шаттлов до 1991 года. Возможно, такая память и до сих пор используется в некоторых старых системах. В настоящее время уже разработана полупроводниковая память устойчивая к спецвоздействию, и эпоха магнитных сердечников ушла, но термин "прошивка" остался.

Прожиг ПЗУ

"Прожиг ПЗУ" - занесение информации.

На смену памяти на ферритовых сердечниках пришла полупроводниковая память ОЗУ, а в качестве ПЗУ стали использоваться микросхемы с матрицами из металлических, чаще нихромовых, перемычек внутри. Для занесения информации в такие микросхемы лишние перемычки нужно пережечь импульсом тока. В дальнейшем стали использоваться перемычки не только из металла, но и выполненные из полупроводников, в виде p-n перехода или поликремния, но принцип физического разрушения перемычки или пробоя перехода путем
воздействия импульса тока сохранился. В военных и аэрокосмических системах такие ПЗУ используются до сих пор. Все программаторы ChipStar для микросхем специального назначения именно "прожигают" такие ПЗУ.

Запись, загрузка ПЗУ

В бытовых и промышленных применениях, где требования по устойчивости к воздействию внешних факторов ниже, а требования к стоимости и объему памяти выше, микросхемы с пережигаемыми перемычками были вытеснены микросхемами электрически программируемых EPROM и электрически перепрограммируемых EEPROM ПЗУ, а, в последнее время, и микросхемами на основе FLASH. С изменением технологии изменилась и терминология: чаще стали говорить о "записи" ПЗУ , или "загрузке" , причем термин чаще употребляется в отношении внутреннего ПЗУ микроконтроллеров, а "запись" - чаще в отношении автономных микросхем памяти.

Программирование ПЗУ или микроконтроллера

"Программирование ПЗУ или микроконтроллера" - занесение информации в ПЗУ или микроконтроллер.

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

P.S. Постскриптум

Вы скажете, что во всей этой терминологии так легко запутаться, и будете абсолютно правы. Но в англоязычной среде все ничуть не лучше! Мало того, что все те же "прожиги" ("burn" ), "загрузки" ("download"), "запись" ("write"), так еще и термины "программист" - человек, который разрабатывает программу и "программатор" - прибор, который записывает эту программу в микросхему, обозначаются одним словом: "programmer" .

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

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

Наиболее распространенная структура микропрограммного автомата (рис. 11.15) включает в себя всего лишь три элемента: ПЗУ, регистр, срабатывающий по фронту, и тактовый генератор .


Рис. 11.15.

ПЗУ имеет (L+M) адресных разрядов и N разрядов данных. Регистр применяется с количеством разрядов (N + L). Разряды данных ПЗУ записываются в регистр по положительному фронту тактового сигнала с генератора. Часть этих разрядов (М) используется для образования адреса ПЗУ, другая часть (N-M) служит для формирования выходных сигналов. Входные сигналы (L) поступают на входы регистра и используются совместно с частью выходных разрядов ПЗУ для получения адреса ПЗУ.

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

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

Возможности такой простой схемы оказываются очень большими. Например, микропрограммный автомат может выдавать последовательности выходных сигналов в ответ на определенное изменение входных сигналов. Он может также временно остановить выдачу выходных сигналов до прихода входных сигналов. Он может анализировать длительность входного сигнала и в зависимости от нее выдавать те или иные выходные сигналы. Он может также и многое другое.

Сформулируем несколько элементарных функций, из которых могут складываться алгоритмы работы микропрограммного автомата (рис. 11.16):


Рис. 11.16.
  1. Последовательный перебор адресов ПЗУ (например, для выдачи последовательности выходных сигналов).
  2. Периодическое повторение последовательности адресов ПЗУ (например, для повторения последовательности выходных сигналов).
  3. Остановка в каком-то адресе ПЗУ (например, для ожидания изменения входного сигнала).
  4. Временное отключение реакции на входные сигналы (например, для того, чтобы закончить отработку реакции на предыдущее изменение входных сигналов). Эта функция на рисунке не показана.

В качестве примера рассмотрим выполнение некоторых элементарных функций микропрограммным автоматом , показанным на рис. 11.17 .


Рис. 11.17.

ПЗУ имеет организацию 64х8 (это могут быть две микросхемы РЕ3 или одна микросхема РТ18), количество разрядов регистра равно десяти (это могут быть две микросхемы ИР27). Схема имеет два входных сигнала и четыре выходных сигнала. Такая организация микропрограммного автомата хороша тем, что его микропрограмма (то есть карта прошивки ПЗУ ) очень наглядна, легко составляется и читается.

Таблица 11.7. Карта прошивки ПЗУ 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.8. Пример микропрограммы для схемы на рис. 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
mob_info