Пилю МХ^2 на китайской CycloneII борде и мелком 800х600 мониторчике с использованием потактовой корки ВМ80:
http://savepic.ru/5689180m.jpghttp://savepic.ru/5687132m.jpg
Вид для печати
Пилю МХ^2 на китайской CycloneII борде и мелком 800х600 мониторчике с использованием потактовой корки ВМ80:
http://savepic.ru/5689180m.jpghttp://savepic.ru/5687132m.jpg
Плата смахивает чем то визуально на мою Terrasic DE2.
А проект можно стырить ? охота спец запустить - посмотреть хоть на него.
спец-это По-2 в мире компов,
только TTL у кузнеца
В виду того, что у нас есть полностью рабочая корка ВМ80 решил в свой МХ2 на CPLD этот самый ВМ80 не ставить, не смотря на его теплую ламповость. У китайцев закупил EPM1270T144C5N. Этого чипа хватает на ВМ80 и всю необходимую обвязку МХ2. Снаружи только память (еще не определился с типом и объемом) и кое-какие порты.
Определился с памятью, это IS61LV5128AL-10TLI в корпусе TSOP-44. 512КБ хватит всем. (с) Причем, ее скорость позволяет не ставить вторую банку параллельно для чтения цвета: буду читать последовательно, как в Спектруме. Так же, будет реализована задумка, озвученная пяток лет назад на Недопц: память общая для всех, поэтому она разделена на банки по 64КБ. При этом, последняя и предпоследняя банки используются для базовой памяти и атрибутов. Да, атрибуты можно будет считывать и вообще там будет ОЗУ ОС для работы с SD/MMC. При этом, запуск программ для стандарта или МХа будет возможен без каких-либо костылей, как обычно.
а о людях подумать?)
да, требую плату расширения для обычного Спеца до Спеца МХ 512 с SD
без проводов!
тоесть как нашлепку, проц вынул -вставил плату расширения до МХ
на ней же контроллеры и сам проц
Ради людей можно поставить ДРАМ. Если использовать SVGA режим, то нужна память, способная работать на частоте 10МГц (время доступа ~75нс между началом RAS и завершением CAS). Под эти характеристики подходят SIMM модули на 60нс или 70нс, например. При этом, каждые 8 точек будет 4 обращения к памяти: 2 к синхрогенератору, 1 к процессору и один для регенерации. При использовании CPLD можно использовать регенерацию RAS-only, либо сразу забабахать CAS-before-RAS. При телевизионных частотах развертки требования к памяти понижаются до 4МГц и 180нс соответственно. Период регенерации по 9 битам адреса (512 адресов для 256К памяти) будет производиться за 204мкс при SVGA развертке и 512мкс при телевизионной развертке. Это время удвоится при использовании 1М чипов памяти. Сделать так?
PS Естественно это все для безвейтовой схемы доступа к памяти на штатной частоте процессора для Специалиста: 2МГц.
Вот какая память у меня есть (спаяна с SIMM72 модулей): HYB5117805BSJ-60. 2M x 8 - Bit Dynamic RAM, 2048 refresh cycles / 32 ms (2k-Refresh). 32мс это даже больше, чем 1 кадр телевизионной развертки (20мс). По моим расчетам выше, эта память будет регенерироваться за 819мкс при SVGA развертке и 2048мкс при телевизионной развертке. Этого более, чем достаточно. А объема 2Мбайта точно хватит всем. Это 32 страницы по 64Кбайт.
PS В виду особой организации экрана Специалиста (и Ориона), можно использовать Hyper Page или EDO режим. Тогда обращений будет 2 а не 4 а регенерацию сделать CAS-before-RAS и делать ее в области гашения. Это дает нам 16 циклов в строке и 4992 цикла в кадре, что более, чем достаточно. При этом, схема не будет привязана конкретно к этой модели памяти, а можно будет использовать любую EDO DRAM вплоть до 8МБайт.
От EDO придется отказаться. Потому как атрибуты должны одновременно записываться. Придется брать 16ти битную DRAM. Для этого есть у меня GM71V65163C, так же снятые с SIMM72. Это 4Мбит х 16 бит, т.е. 8Мбайт в сумме.
Таким образом, получается следующая растактовка арбитра для телевизионной развертки:
http://savepic.ru/5922975.png
32M - Тактовая частота, выбрал потому, что у меня есть такой кварц, допускается 16МГц с небольшой корректировкой схемы.
PIX - 8МГц тактовая пикселей экрана, немного сдвинута для надежности записи данных.
ALD - Строб режима записи/сдвига для регистров видеовыхода, вырабатывается 1 раз в 8 точек.
RAS - Сигнал выбора строки DRAM.
R/C - Сигнал для мультиплексора адреса RAS/CAS, это немного задержанный сигнал RAS что дает надежность в переключении адреса.
CAS - Сигнал выбора колонки и активации DRAM.
S/C - Сигнал для мультиплексора адреса SYN/CPU, указывает, чей адрес нужно подать на DRAM.
F1 - Синхронизирующая последовательность F1 для ВМ80.
F2 - Синхронизирующая последовательность F2 для ВМ80.
Основные моменты. На каждые 8 точек растра формируется 4 обращения к DRAM. 2 из них, когда F2 = 0, забирает процессор. Таким образом, нам не нужно анализировать сигнал SYN процессора для арбитража а сам процессор получает доступ всегда, когда ему это нужно без торможений. Из оставшихся 2 обращений к DRAM одно занимает непосредственно чтение видеоинформации из DRAM для вывода, а второе модифицированно в режим CAS-before-RAS, что дает автоматическую регенерацию DRAM согласно ее глубине. Т.е., можно ставить DRAM любого разумного объема - она вся будет корректно регенерироваться. Указанная выше DRAM требует 4096 циклов для полной регенерации за не более чем 64мс. Т.к. каждые 8 точек происходит 1 цикл регенерации, то частота регенераций получается 1МГц, что дает время 1мкс. 4096 циклов займут 4096мкс или 4,096мс что в 16 раз меньше максимального, что дает запас на установку чипа большего объема.
Задавайте свои вопросы.
А ты не думаешь, что раз ВМ80 тоже внутри ПЛИС, то нет смысла выдерживать времянку по чтению и записию Ну, т.е. для реального проца память должна держать данные от сих до сих в течение такта, чтобы проц их успел считать. Но теперь этого не требуется!
У нас максимально точная модель, все условия остаются.
Дак пусть она и будет точная! Захлапывать по переднему фронту Ф2. От него сколько там? Плюс минус десяток наносекунд. Остальное время в такте свободно! Короче, смысл в том что мы гарантированно можем сузить окно ввода, для вывода все зависит от памяти(но тоже можем сузить). Мысли шире!
А как насчёт ПО, где оно будет сидеть и откуда считываться? Будет параллельное ПЗУ или последовательное Flash?
"Плоско мыслишь!" говорил игральный кубик доминошке. Поконкретнее изложите свою мысль и, желательно, эпюр пристегните к ответу, чтобы понятнее было.
ПО должно работать уже написанное стандартное. Где будет храниться - второй вопрос. Теоретически, я могу поставить SPI FLASH, откуда будет загружаться в ОЗУ при запуске. Или даже NAND чип поставить можно. Там нужно хранить минимум, который обеспечит запуск и работу. Все хранить не обязательно, для этого есть карта.
PS Можно бут положить в SPI FLASH и исполнять его прямо оттуда, останавливая процессор сигналом READY. Таким образом, бут будет работать несколько медленнее, но зато мало проводов и простой чип.
Ну, хорошо, спустимся на землю и забудем. Но если интересно, у меня от твоего проекта всплыла своя идея, вот и вырвалось. Но то моя идея, и если ты не видишь смысла воткнуть четыре(!) обращения к DRAM в один такт процессора, значит оно тебе не нужно.
4 обращения за 1 такт процессора? Процессор у нас работает на 2МГц, 4 обращения это 2*4=8МГц. Т.е., нужна память, способная работать на такой частоте. Период 8МГц частоты это 125нс. В текущем проекте память работает на 4МГц. Данная схема легко переносится на SVGA развертку, которую я хочу опционально запихать в CPLD (как детектить нужный режим - я уже знаю). В SVGA режиме на текущей развертке память будет работать на 10МГц, что уже близко к ее теоретическому пределу (мы все еще говорим за простые EDO DRAM со временем доступа 50/60/70 нс).
Объясни мне, зачем тебе 4 обращения на каждый такт процессора?
Позволь выразится образно, отойти от инженерных схем. Потому что иначе я стану причиной холивар. Тебе же этого боятся нечего.
Ты стоишь космический корабль из высокотехнологичных композитных материалов, и собираешься плавать на нем по канаве, вырытой вокруг Храма Специалисту.
Не думаю что тебя прельщает роль быть одним из служителей этого Храма, хотя, разумеется, имеешь полное право сдерживать свое стремление быть Творцом.
На радость, по сути, не в обиду будет сказано, я сам такой - идолопоклонникам...
Т.е., ты хочешь "ZX Spectrum с ZXM-VideoCard"? Но тогда это уже не будет "ZX Spectrum" как таковой. Тогда предложи свой список хотелок, быть может не все они расходятся с моим мировозрением.
Хорошо, тогда я оставлю это просто вариантом МХ2 на ПЛМ с виртуальным но все же тактово правильным ВМ80 в небольшом корпусе.
Нашел у себя K6R4008V1D. 512КБит х 8 шустрая SRAM (до 10нс). 2шт. Она 3.3в, что хорошо для моей CPLD (но не обязательно).
У меня есть хитрый план: не ставить ПЗУ вообще. Я уже почти отладил свой "хитрый" SD/MMC контроллер, который инициализирует карту сам. Он вполне способен предоставить любой сектор сам. Если выгорит - то это будет компьютер полностью без ПЗУ.
Круто. А сможешь потом допилить его до эмуляции ВГ93? Для начала, чтобы работал с дефрагментированными файлами-образами, лежащими в корневом каталоге? Хотя бы с первым файлом, тогда не надо лезть в каталог и искать начало файла. Но чтобы начало можно было менять через порты ВГ93 какой-нибудь ничего не значащей для самого ВГ93 команды (например прыгнуть на дорожку 255 после чего послать в порт данных специальную последовательность с указанием адреса первого сектора).
Ну можно. Только когда дойдет дело до реализации ВГшки, нужна будет твоя консультация. Ибо я программировал свой ВГ93 в Орионе строго по журналу Радио за 94 (вроде) год по статьям о корвете. Т.е. информация о контроллере чисто общая.
В общем, идея такая: т.к. у нас проц все равно внутри CPLD, то его можно останавливать, например, сигналом READY и использовать его слот времени для пересылки данных. Такой неполный DMA. Адрес начала и размер задавать в регистрах управления контроллером. Причем, он для карты будет формировать полные 512 циклов чтения сектора, чтобы не сбить логику ее работы, а в память писать ровно столько, сколько надо. Это позволит загружать файлы прямо по месту байт в байт, не затрагивая лишние. Это в нативном режиме. В режиме эмуляции ВГ93 можно сделать останов при чтении из регистра данных ВГ93, как это сделано в контроллере дисковода для Специалиста (чтобы тот софт так же мог работать без изменений).
Касаемо полноценной эмуляции ВГ93, то было бы здорово установить размер кластера кратный 1 сектору дискеты (1КБ же, так?). Т.е., придется форматировать карту памяти с особыми параметрами (лучше если написать специальную программку). В пользу программки говорит и факт ROMless загрузки: чтобы контроллер всегда знал откуда брать загрузчик. Хотя, я думаю с SD/MMC карты никто грузиться не будет и поэтому загрузчик можно положить вместо PCшного, оставив остальные структуры как есть. Карта будет признаваться компьютером и одновременно быть загрузочной для Специалиста.
PS Нечто подобное, я думаю, можно будет сделать и для Спектрума 48К/128К.
Возможно все-таки использование одной 8ми битной SRAM не лишено смысла. Если прикинуть на стандартные тайминги, то можно сделать так:
http://savepic.org/6352115.png
PixClk щелкает пиксели. PixLd загружает следующий байт для сдвига самих пикселей. AtrLd загружает значение атрибутов, их "догоняют" пиксели, задержанные на 2 точки (в спектруме, например, задержка на 4 пикселя). Страница атрибутов выбирается сигналом AtrPage, который участвует в формировании адреса синхрогенератора и процессора. В первой половине активного полупериода сигнала VM80F2 формируется сигнал обращения к ОЗУ, который активируется сигналом Screen. Таким образом обращение формируется только при обращении к экрану. Это возможно потому, что процессор гарантировано удерживает шины (адреса, данных и управления) весь активный полутакт, поэтому атрибуты из регистра цвета четко попадают в экранную область страницы атрибутов. Осталось проверить, как эта идея ляжет на тайминги SVGA. Если от памяти не потребуется сверхскорости, то я сделают так и с 16ти битным ОЗУ будет покончено раз и навсегда.
Ну, похоже, что все взлетит.
http://savepic.org/6325260.png
В режиме SVGA пиксельклок равен 20МГц. Обращение к памяти равно периоду пиксельклоку или 50нс. Частота процессора при этом равна 2,5МГц, но используется уже проверенный в железе МХ2 финт с 4/5 такта, что дает эффективную скорость на уровне 2МГц. В режиме телевизионной развертки пиксельклок равен 8МГц а обращение к памяти равно половине такта пиксельклока или 62,5нс. При этом, задержка атрибута на 1 пиксель от сдвигаемого видео (в режиме SVGA 2 пикселя). Частота процессора в этом режиме строго 2МГц, за 8 точек отрабатывается 2 полноценных обращения. Сигнал обращения к экрану вырабатывает дополнительное обращение, как уже это было описано в предыдущем посте, вместе с сигналом страницы атрибутов используется для записи атрибутов. Более того, этот же сигнал позволяет реализовать автоматическое чтение атрибута из видеопамяти в регистр цвета, что было бы неплохой плюшкой. Закупленные у китайцев специально для этого проекта IS61LV5128AL-10TLI способны выдать (или принять) данные за 10нс и имеют на борту 512Кбайт. Это в 5 раз превышает требования, так что можно продолжать проект. Кварцевый генератор используется один на 80МГц. Из него легко получаются как 20МГц, так и 8МГц.
Т.к. проект предполагается реализовать на одном чипе памяти и быть максимально совместимым с МХ2, то я предлагаю следующий "распил" памяти: страницы с 0 по 5 будут обычные страницы памяти MXа, страница 6 будет выполнять роль основной страницы памяти а страница 7 - ее атрибутной части. При этом, она будет доступна целиком, как у Ориона, нижняя и верхняя (относительно экрана) части будут эмулировать ПЗУ МХа и стандарта и будут снабжены защитой от записи. Пока все, задавайте свои вопросы.
Сегодня закончил клавиатуру. Я ее уже показывал, покажу еще раз:
http://savepic.org/6433427.jpg
Да, она способна передать нажатие на все кнопки сразу. :3 Да, для сброса надо нажать все 5 клавиш 'СБРОС'. :3 Да, курсорные кнопки дублируются и есть еще 4 дополнительные кнопки. В качестве интерфейса я выбрал I2C (частный случай TWI). Почему? Потому что клавка была USB и двунаправленный интерфейс не требуется. А I2C ведомый легко реализуется в CPLD как простейший конечный автомат. Старт, стоп:
http://savepic.org/6462099.png
http://savepic.org/6460051.png
Всего передается 79 бит информации: 72 кнопки оригинальной клавиатуры, 4 дополнительные кнопки, шифт, сброс и четность. По четности CPLD будет принимать решение записывать принятое в регистр или нет - простейший контроль. Битрейт я особо не рассчитывал, но получилось приемлиемо: примерно 20Кбод. Полная посылка с небольшой задержкой между пакетами занимает примерно 4мс, что дает FPS интерфейса на уровне 248Гц, что более чем достаточно:
http://savepic.org/6456979.png
Пока по прерыванию таймера происходит выталкивание текущих данных в интерфейс, прошивка параллельно опрашивает новое состояние кнопок. Неправильная матрица корректируется специальными константами, так что кнопки в пакете идут по порядку: сначала слева направо верхний ряд, потом второй и т.д. согласно схемы. В конце добавляются 4 расширенные кнопки, шифт и сброс.
Немного о контроллере. Я наконец-то перешел к АТХМегам. Здесь - 32А4.
http://savepic.org/6440597.jpg
Однако, как же мало ему надо! Работает от встроенного 32МГц RC генератора (сильная стабильность тут не нужна), кондеры только по питанию. Хочет 3.3в, которые есть у моего CPLD Специалиста. В общем, я доволен как слон. Теперь уже точно можно заняться самим компьютером.
Осциллограф прикольный, еще такой Rigol не видел, из новых серий?
Клавиатурка красивая :)
Клавка серийная, пленочная. Как-то раз проходил мимо, увидел, прикинул что кнопок хватает и купил сразу 2:
http://savepic.org/6458038.jpg
http://savepic.org/6459062.jpg
http://savepic.org/6455990.jpg
Она USBшная, я использовал ее шнурок для подключения. Контроллер внутри вот такой родной:
http://savepic.org/6463158.jpg
Потом нарисовал в кореле кнопки и распечатал на самоклейке:
http://savepic.org/6452918.jpg
Вот как-то так.
PS Нижняя кнопка "Х_Х" это "ПС".
о
а файлик с кнопками для корела дай плз
а какбы матрицу этой клавки в матрицу специалиста перестроить без хирургии
Вот, попутно исправил кнопку перевода строки и мелкие недочеты.
http://savepic.org/6524842.png
Продолжаем тему Специалиста как SoC. Итак, концепт:
1. Это SoC, поэтому только одна микросхема и внешняя память. Я остановился на вполне паябельной EPM1270T144, куда легко влазит наша модель ВМ80 и еще остается куча места под саму схему компьютера, и SRAM на основе 512Кбх8 IS61LV5128AL-10LT со временем доступа 10нс. Весь остальной обвес чисто адаптационный. Да, только одна микросхема на 8 бит.
2. Полная реализация МХ2, однако возможен вариант с набором аппаратно переключаемых конфигураций стандарт-МХ-МХ2. Так же я планирую в нем реализовать и Орион, т.к. это не сильно сложно.
3. Поддержка как VGA так и ТВ развертки. Т.к. 8МГц не кратны 20МГц, необходимых для VGA, я решил использовать 10МГц + бордюр, в общем по Орионовски. Это, между прочим, немного корректирует аспект. Переключение разверток можно сделать автоматическим по подключаемому разъему монитора. Т.е., если подключается монитор (пин ID на земле) выбирать VGA, при подключении переходника к телевизору (ID висит) включать ТВ развертку. Но можно и принудительно-программно-джампером.
4. Процессорное ядро должно работать на родных частотах реализуемых компьютеров. 2,5МГц является базовой частотой, 2МГц сделаны пропуском тактов (как у уже реализованной МХ2 на дискретах). Сигнал управления частотой применяется в строго отведенный момент времени, чтобы не порождать глюк на сигналах, поэтому им можно управлять программно.
5. ПЗУ отсутствует. Точнее, для процессора его роль выполняет ОЗУ с блокировкой записи. Это позволяет установить SPI FLASH вроде 25х серии и загружать образ ПО по сбросу. Однако, ног хватает и на обычную NOR ПЗУ, так что вопрос пока открыт и выносится на голосование.
6. Обязательный и родной интерфейс SD/MMC с аппаратным ускорителем (а быть может и DMA).
7. Клавиатура внешняя, та что уже представлена в данной теме. Но возможно использование и PS2/USB через соответствующий контроллер.
Итак, арбитраж шины, процессор 2,5МГц:
http://savepic.su/5899858m.png
Арбитраж шины, процессор 2МГц:
http://savepic.su/5902930m.png
Легенда:
40MHz - основная частота с генератора. Несколько ниже рекомендуемых 50МГц, что хорошо.
PixClk - частота пикслей, на ней работают регистры видеовыхода.
PixLd - разрешение считывания информации пикселей из ОЗУ.
AtrLd - разрешение считывания информации атрибутов из ОЗУ.
AtrPage - сигнал разграничения между пикселями и атрибутами, по сути один из битов адреса синхрогенератора. Этот же сигнал используется для счетчиков развертки, т.к. он имеет только 1 период на 8 точек экрана. Специально выровнен по скважности.
SnC - сигнал разграничения доступа к ОЗУ между синхрогенератором и процессором.
VM80F1 - тактовая последовательность F1 для ВМ80.
VM80F2 - тактовая последовательность F2 для ВМ80.
RAMEn - сигнал строба управления ОЗУ. Причем, обращение блокируется во время пропуска такта процессора.
VGA - сигнал переключения между развертками VGA и ТВ.
Slow - сигнал переключения между 2,5МГц и 2МГц.
Теперь времянки. Во время ТВ режима в 8 точках экрана умещается 4 обращения, 2 из которых отдаются процессору, а 2 синхрогенератору. В этом режиме длительность строба памяти 125нс, а минимально требуемое время реагирования памяти адрес-данные 125нс (запись в видеорегистры запись происходит в середине обращения). Во время режима VGA в 8 точках экрана умещается только 2 обращения 125нс, одно из которых отдано процессору. Синхрогенератор считывает 2 раза в оставшееся время, уменьшив время обращения до 50нс. При этом, минимальное время адрес-данные при тех же условиях будут 62,5нс. Именно к этому времени следует подбирать ОЗУ.
Задавайте свои вопросы.
Точно хватит 980 ячеек? Какая модель процессора и с каким количеством требуемых ячеек используется?
Для STD хватит, а для МХ RAM-диск будет 256 кБайт? Или как ты писал 0-5 страницы будут под диск задействованы, лучше уж 0-3.
По контроллеру клавиатуры. Схемой на АТМега 32А4 не поделишься, а то я тоже нашёл клаву, хочу свой контроллер сделать.
http://savepic.ru/5635929.png
Думаю, хватит. Схемы клавки не было - сразу платка. Попробую срисовать, но у тебя же другая клавиатура?
Я этот vm80a собираюсь допиливать, "по мотивам" 1801ВМ1. Там очень хорошо регистровый файл переводится на встроенную память, требуемые ресурсы раза в полтора ужмутся еще, но нужен блок памяти. Поэтому посмотрел бы в сторону MAX10, в младший микросхем все влезет, цена ~600 руб за корпус 144LQFP.
Условие - использовать CPLD. CPLD - это instant on. CPLDшек сейчас 2: MAXII и MAXV. А MAX10 это FPGA+EPCS. И Cyclone4 его тут уделывает, но зачем? Нам хватает и EPM1270.
Нет, для MAX10 именно instant on заявлен - сразу на первой страничке overview. Я ничего против CPLD не имею, довольно часто их применяю, но там довольно ограниченная структура, достаточно медленная и нет блоков памяти. Имхо, для этого проекта CPLD не самый лучший выбор. Но то такое.