ПЛИС Cyclone 4 как mapper для Dendy картриджа

Вопросы по самостоятельной сборке устройств и разноообразное народное творчество.

Moderators: HardWareMan, aodinets, admin, figura, alex

mindstation
Posts: 26
Joined: Tue Jan 29, 2013 1:27 am
Location: Russia, Ekaterinburg

ПЛИС Cyclone 4 как mapper для Dendy картриджа

Postby mindstation » Sat Feb 18, 2017 6:04 pm

Решил попробовать собрать свой картридж для Dendy. Mapper реализовывать буду на Cyclone 4 EP4CE10F17C0N. Много ног. Много вентилей. Но 3,3В максимум для логики.
Начинаю с UNROM так как имею опыт повторения его на стандартной логике.
В качестве ПЗУ - AM29F010B. ОЗУ - HM6264LP-12.
Соответственно возникает проблема согласования логических уровней. Нашел статью "Согласование логических уровней 5В и 3.3В устройств"
http://we.easyelectronics.ru/Shematech/ ... oystv.html
Остановился на варианте с буферной микросхемой LVC244A. Выходы со слота картриджа буду заводить на ПЛИС через нее. Но вопрос: можно ли напрямую заводить выводы ПЛИС на адресные линии ПЗУ картриджа? Ведь получается что часть адресной шины ПЗУ будет управляться с приставки 5В сигналом, а часть с ПЛИС 3,3В сигналом.
Более общий вопрос: можно ли смешивать различные способы согласования в одной схеме? То есть на шину данных поставить трансивер, а на прочие выводы - буферную микросхему.

admin
Site Admin
Posts: 912
Joined: Tue Nov 23, 2010 5:55 pm
Location: Novosibirsk
Contact:

Re: ПЛИС Cyclone 4 как mapper для Dendy картриджа

Postby admin » Mon Feb 20, 2017 9:53 am

Решил попробовать собрать свой картридж для Dendy. Mapper реализовывать буду на Cyclone 4 EP4CE10F17C0N. Много ног. Много вентилей. Но 3,3В максимум для логики.
Начинаю с UNROM так как имею опыт повторения его на стандартной логике.
В качестве ПЗУ - AM29F010B. ОЗУ - HM6264LP-12.
Соответственно возникает проблема согласования логических уровней. Нашел статью "Согласование логических уровней 5В и 3.3В устройств"
http://we.easyelectronics.ru/Shematech/ ... oystv.html
Остановился на варианте с буферной микросхемой LVC244A. Выходы со слота картриджа буду заводить на ПЛИС через нее. Но вопрос: можно ли напрямую заводить выводы ПЛИС на адресные линии ПЗУ картриджа? Ведь получается что часть адресной шины ПЗУ будет управляться с приставки 5В сигналом, а часть с ПЛИС 3,3В сигналом.
Более общий вопрос: можно ли смешивать различные способы согласования в одной схеме? То есть на шину данных поставить трансивер, а на прочие выводы - буферную микросхему.
А что такое: EP4CE10F17C0N, это вроде как цифра обозначающая задержку распространения сигнала "pin to pin" внутри FPGA...
можно ли напрямую заводить выводы ПЛИС на адресные линии ПЗУ картриджа?
...зачем? Не проще ли взять ФЛЭШЬ 3-x вольтовую, да и SRAM тож на 3в.? ...и весь огород поставить после согласования уровней? ...и поподробнее почитайте про LVC244A... например вот это:
SN74LVC244A Octal Buffer or Driver With 3-State Outputs
1-ая страничка мануала...:
These octal bus buffers are designed for 1.65-V to
3.6-V
VCC operation...
То есть на шину данных поставить трансивер, а на прочие выводы - буферную микросхему.
Это как? :shock: ...трансивер?

А вообще можно разделить шины резисторами, только подтянуть с каждой стороны резисторами соотв. к 3-м и 5-ти вольтам, при этом в программируемой логике назначить на эти пины Open Drain (если они подразумеваются как I/O или как Output, а если только как Input, то достаточно будет только резисторов, для HOMEBREW поделки такое норм.).

mindstation
Posts: 26
Joined: Tue Jan 29, 2013 1:27 am
Location: Russia, Ekaterinburg

Postby mindstation » Sun Feb 26, 2017 8:03 pm

А что такое: EP4CE10F17C0N...
Моя ошибка. Конечно же EP4CE10F17C8N. Не разглядел восьмерку.
...зачем? Не проще ли взять ФЛЭШЬ 3-x вольтовую, да и SRAM тож на 3в.? ...и весь огород поставить после согласования уровней?
5В флеш и ОЗУ у меня уже есть, а 3-х вольтовые придется докупать. С 3В получится аккуратнее, но и количество выводов требующих согласования резко увеличится. А сейчас - это не более 11 ног.
почитайте про LVC244A...
Запитывать буду от стабилизатора ПЛИС (об этом ниже).
Главное что "Inputs Accept Voltages to 5.5 V".
Спасибо за предупреждение. Один раз я уже на этом обжегся.
Это как? :shock: ...трансивер?
Конечно же транслятор. TXB0108.
Я нуб и еще и в наименованиях путаюсь. :oops:
А вообще можно разделить шины резисторами...
С выходом типа "Открытый сток" разобрался. Quartus предлагает имитировать его посредством Z-состояния.
Ну и так как по даташиту на ПЗУ максимальный ток на ее вход указан как 1мА, то расчетное значение подтягивающего резистора получится 5В/0,001А = 5 000 Ом.
Ближайший номинал - 5,1 кОм.
А вот как подтяжкой к питанию можно согласовать 3В вход с 5В выходом? Не понял.
Из статьи вынес только вариант с последовательным резистором, при котором нужно еще включать clamping диоды на входе ПЛИС (это PCI I/O стандарт, как я понял).

На данный момент нарисовал такую схему, с буфером на вход ПЛИС и подтяжкой на ее выходах к ПЗУ.
Коммутация - гребенки.

Вход с картриджа на ПЛИС.
https://yadi.sk/i/LCtReDWe3EdVAv

Выход с ПЛИС на ПЗУ.
https://yadi.sk/i/EoDwJUf43EdVAX

Добавлю еще деталей к своей задачке.
Я использую не голую ПЛИС, а китайскую плату CoreEP4CE10 от Waveshare. На ebay, aliexpress их хватает.
На гребенку у нее выведен 5В вход питания и 3,3В выход. 3,3В для питания согласующих цепей я буду брать с этой платы. Оно обеспечивается стабилизатором AMS1117-3.3.
Соединять плату с картриджем я буду шлейфами с гнездами под 2мм и 2,54мм гребенку. Согласование собираю на отдельной макетке.
То есть у меня еще нет схемы (платы), да что там, даже планов по созданию универсального картриджа. Сейчас мне важно отработать сам принцип создания мапперов на ПЛИС.

Как минимум я собираюсь реализовать следующие мапперы: UNROM, MMC1 и MMC3. Последние два для меня в диковинку,
в смысле своего устройства. Код UNROM и MMC1 на Verilog уже набросал.
ПЛИС на 10к вентилей я выбрал потому что надеюсь попробовать на ней не только мапперы.
К тому же у меня завалялся STM32L-Discovery, у которого совсем не много 5В ног. А пара идей на счет его сопряжения с 5В логикой имеется.
Поэтому навыки согласования логических уровней мне также пригодятся.

admin
Site Admin
Posts: 912
Joined: Tue Nov 23, 2010 5:55 pm
Location: Novosibirsk
Contact:

Postby admin » Mon Feb 27, 2017 10:44 am

А что такое: EP4CE10F17C0N...
Моя ошибка. Конечно же EP4CE10F17C8N. Не разглядел восьмерку.
...зачем? Не проще ли взять ФЛЭШЬ 3-x вольтовую, да и SRAM тож на 3в.? ...и весь огород поставить после согласования уровней?
5В флеш и ОЗУ у меня уже есть, а 3-х вольтовые придется докупать. С 3В получится аккуратнее, но и количество выводов требующих согласования резко увеличится. А сейчас - это не более 11 ног.
почитайте про LVC244A...
Запитывать буду от стабилизатора ПЛИС (об этом ниже).
Главное что "Inputs Accept Voltages to 5.5 V".
Спасибо за предупреждение. Один раз я уже на этом обжегся.
Это как? :shock: ...трансивер?
Конечно же транслятор. TXB0108.
Я нуб и еще и в наименованиях путаюсь. :oops:
А вообще можно разделить шины резисторами...
С выходом типа "Открытый сток" разобрался. Quartus предлагает имитировать его посредством Z-состояния.
Ну и так как по даташиту на ПЗУ максимальный ток на ее вход указан как 1мА, то расчетное значение подтягивающего резистора получится 5В/0,001А = 5 000 Ом.
Ближайший номинал - 5,1 кОм.
А вот как подтяжкой к питанию можно согласовать 3В вход с 5В выходом? Не понял.
Из статьи вынес только вариант с последовательным резистором, при котором нужно еще включать clamping диоды на входе ПЛИС (это PCI I/O стандарт, как я понял).

На данный момент нарисовал такую схему, с буфером на вход ПЛИС и подтяжкой на ее выходах к ПЗУ.
Коммутация - гребенки.

Вход с картриджа на ПЛИС.
https://yadi.sk/i/LCtReDWe3EdVAv

Выход с ПЛИС на ПЗУ.
https://yadi.sk/i/EoDwJUf43EdVAX

Добавлю еще деталей к своей задачке.
Я использую не голую ПЛИС, а китайскую плату CoreEP4CE10 от Waveshare. На ebay, aliexpress их хватает.
На гребенку у нее выведен 5В вход питания и 3,3В выход. 3,3В для питания согласующих цепей я буду брать с этой платы. Оно обеспечивается стабилизатором AMS1117-3.3.
Соединять плату с картриджем я буду шлейфами с гнездами под 2мм и 2,54мм гребенку. Согласование собираю на отдельной макетке.
То есть у меня еще нет схемы (платы), да что там, даже планов по созданию универсального картриджа. Сейчас мне важно отработать сам принцип создания мапперов на ПЛИС.

Как минимум я собираюсь реализовать следующие мапперы: UNROM, MMC1 и MMC3. Последние два для меня в диковинку,
в смысле своего устройства. Код UNROM и MMC1 на Verilog уже набросал.
ПЛИС на 10к вентилей я выбрал потому что надеюсь попробовать на ней не только мапперы.
К тому же у меня завалялся STM32L-Discovery, у которого совсем не много 5В ног. А пара идей на счет его сопряжения с 5В логикой имеется.
Поэтому навыки согласования логических уровней мне также пригодятся.
Если пользуешь 5В сигнал на 3-х вольтовую логику, нужно ограничить ток утекающий в выходной каскад 3-х вольтовой логики, в простейшем случае это делается резистором, обычно это 33-100 Ом. Но смысл в том что если "5-ти вольтовая сторона" не подтянута к +, состояние "высокого уровня" (1=Vih, 0=Vil) может "проваливаться" до низкого, и соответственно будут глюки, а так как мы договорились использовать выход с OK (Open Drain), то и 3-х вольтовый выход нужно подтянуть к +, нужно подтянуть его именно с 3-х вольтовой стороны чтобы передний фронт сигнала не был слишком завален:

Image

Однако, ещё раз скажу, так делать не особо "хорошо"...

mindstation
Posts: 26
Joined: Tue Jan 29, 2013 1:27 am
Location: Russia, Ekaterinburg

UNROM mapper

Postby mindstation » Sun Sep 24, 2017 2:34 pm

UNROM взлетел.

Image

По входу на ПЛИС поставил SN74LVC244A. Выход с ПЛИС завел напрямую на PRG ROM.
Принципиальная схема и Verilog код на GitHub:
https://github.com/mindstation/Famicom_mappers

П.С. Взлетело-то еще в мае. Но пока оформлял проект. Осваивал Git и EasyEDA. Наступила осень :D
Лучше спросить глупость, чем сделать глупость.

User avatar
HardWareMan
Гуру, Super DONATE +15000
Гуру, Super DONATE +15000
Posts: 318
Joined: Sun Dec 19, 2010 11:12 pm

Re: ПЛИС Cyclone 4 как mapper для Dendy картриджа

Postby HardWareMan » Sun Sep 24, 2017 3:37 pm

Но ведь главное то это результат.

admin
Site Admin
Posts: 912
Joined: Tue Nov 23, 2010 5:55 pm
Location: Novosibirsk
Contact:

Re: UNROM mapper

Postby admin » Tue Sep 26, 2017 5:05 pm

UNROM взлетел.

Image

По входу на ПЛИС поставил SN74LVC244A. Выход с ПЛИС завел напрямую на PRG ROM.
Принципиальная схема и Verilog код на GitHub:
https://github.com/mindstation/Famicom_mappers

П.С. Взлетело-то еще в мае. Но пока оформлял проект. Осваивал Git и EasyEDA. Наступила осень :D
КРУТА!!! Главное что процесс идет! :)

mindstation
Posts: 26
Joined: Tue Jan 29, 2013 1:27 am
Location: Russia, Ekaterinburg

Re: ПЛИС Cyclone 4 как mapper для Dendy картриджа

Postby mindstation » Sun May 05, 2019 11:32 pm

Идею с Cyclone 4 в качестве mapper для Dendy картриджа не забросил. Но с реализацией MMC1 забуксовал.

На данный момент картридж без проблем работает с дампером Cluster'а. Ром считывается без ошибок.
Банки и режимы их переключения меняются соответственно описанию MMC1 на nesdev.com. А вот на фамиклонах (Dendy Junior III, Magistr Savia) картридж не работает.

Приставка виснет сразу же после включения. Обычно демонстрируя экран залитый каким-нибудь одним цветом. Иногда выдает "кашу" из случайных тайлов.
Image Image

Тестировал на роме "Raf World (J).nes" из goodNES_V3.1 и с ПЗУ из пиратского картриджа "Ferrari - Grand Prix Challenge". Скриншоты сделаны с Raf World.
Если запускать картридж с игрой, которая не использует маппер, то все работает отлично.

Подозреваю что это следствия моего навесного монтажа.
Image Image

Старался использовать проводники одинаковой длины, не более 4 см. Проводники многожильные.
Насколько сложно завести картридж с навесным монтажом?

Схема картриджа доступна по следующей ссылке (не доразведена Save RAM часть):
https://easyeda.com/mindstation/MMC1mst ... d4d2aeb13a

Проект на GitHub (ветка mmc1dev, директория MMC1proj):
https://github.com/mindstation/Famicom_ ... ee/mmc1dev
Лучше спросить глупость, чем сделать глупость.

admin
Site Admin
Posts: 912
Joined: Tue Nov 23, 2010 5:55 pm
Location: Novosibirsk
Contact:

Re: ПЛИС Cyclone 4 как mapper для Dendy картриджа

Postby admin » Tue May 07, 2019 7:49 pm

Насколько сложно завести картридж с навесным монтажом?
Если схема правильная можно хоть ВВГ разной длины, хоть на пол метра различающиеся.
Схема картриджа доступна по следующей ссылке (не доразведена Save RAM часть):
https://easyeda.com/mindstation/MMC1mst ... d4d2aeb13a

Проект на GitHub (ветка mmc1dev, директория MMC1proj):
https://github.com/mindstation/Famicom_ ... ee/mmc1dev
Схема не правильная для SAVE RAM, будут "отваливаться" сохранения.

Мда, EP4...хотя там реально хватит EPM3064 за глаза... печалька...

Может вам схему нормальную нарисовать, а то тут целые проекты на гит'е? А работы на три часа.

P.S. Я ни в коем случае не хочу принизить вашу работу, просто может помочь?

mindstation
Posts: 26
Joined: Tue Jan 29, 2013 1:27 am
Location: Russia, Ekaterinburg

Re: ПЛИС Cyclone 4 как mapper для Dendy картриджа

Postby mindstation » Thu May 09, 2019 12:19 am

Мда, EP4...хотя там реально хватит EPM3064 за глаза... печалька...
Cyclone 4 здесь совершенное избыточен, согласен. Но на момент проектирования схемы это была первая и единственная ПЛИС у меня в наличии. Я тогда решил себе ни в чем не отказывать.
Позже, встроенная RAM циклона пригодилась для SignalTap в Quartus.

Само по себе использование циклона в картридже может создавать дополнительные проблемы для стабильной работы? В cyclone4 handbook прочитал что конфигурирование ПЛИС в AS происходит не очень быстро. Для частоты 50 МГц (генератора на плате CoreEP4CE10) и EPCS16 размером в 2МБ (16779128 бит) на загрузку конфигурации из флешки уйдет около 335 мс, а приставка ждать столько не будет, я думаю.
Я ни в коем случае не хочу принизить вашу работу, просто может помочь?
Почту за честь :)

Цель моей возни с этим картриджем - знания. Есть желание научиться работать с ПЛИС, а картридж с игрой дополнительный стимул.
Проект на GitHub - это побочный продукт. В первую очередь он был создан для того чтобы организовать простой доступ к исходному коду.

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

На каких условиях желаете помочь?
Лучше спросить глупость, чем сделать глупость.

admin
Site Admin
Posts: 912
Joined: Tue Nov 23, 2010 5:55 pm
Location: Novosibirsk
Contact:

Re: ПЛИС Cyclone 4 как mapper для Dendy картриджа

Postby admin » Fri May 10, 2019 3:08 pm

Мда, EP4...хотя там реально хватит EPM3064 за глаза... печалька...
Cyclone 4 здесь совершенное избыточен, согласен. Но на момент проектирования схемы это была первая и единственная ПЛИС у меня в наличии. Я тогда решил себе ни в чем не отказывать.
Позже, встроенная RAM циклона пригодилась для SignalTap в Quartus.

Само по себе использование циклона в картридже может создавать дополнительные проблемы для стабильной работы? В cyclone4 handbook прочитал что конфигурирование ПЛИС в AS происходит не очень быстро. Для частоты 50 МГц (генератора на плате CoreEP4CE10) и EPCS16 размером в 2МБ (16779128 бит) на загрузку конфигурации из флешки уйдет около 335 мс, а приставка ждать столько не будет, я думаю.
Я ни в коем случае не хочу принизить вашу работу, просто может помочь?
Почту за честь :)

Цель моей возни с этим картриджем - знания. Есть желание научиться работать с ПЛИС, а картридж с игрой дополнительный стимул.
Проект на GitHub - это побочный продукт. В первую очередь он был создан для того чтобы организовать простой доступ к исходному коду.

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

На каких условиях желаете помочь?
Да я как бэ хотел предложить реализацию MMC1 на CPLD EPM3064. А если цель научиться, то тут конечно я предлагаю ересь! :)
Само по себе использование циклона в картридже может создавать дополнительные проблемы для стабильной работы? В cyclone4 handbook прочитал что конфигурирование ПЛИС в AS происходит не очень быстро. Для частоты 50 МГц (генератора на плате CoreEP4CE10) и EPCS16 размером в 2МБ (16779128 бит) на загрузку конфигурации из флешки уйдет около 335 мс, а приставка ждать столько не будет, я думаю.
Если желаете учиться, не забывайте читать документацию. Сколько бит у EP4CE10 конфигурационных? Меньше 2mb. Ускорить процесс можно используя сжатие на лету. Циклоны могут грузить запакованную конфигурацию.

mindstation
Posts: 26
Joined: Tue Jan 29, 2013 1:27 am
Location: Russia, Ekaterinburg

Re: ПЛИС Cyclone 4 как mapper для Dendy картриджа

Postby mindstation » Mon May 27, 2019 10:13 am

Если желаете учиться, не забывайте читать документацию. Сколько бит у EP4CE10 конфигурационных?
Спасибо за подсказку. Открыл для себя новый раздел в Cyclone IV handbook: 8. Configuration and Remote System Upgrades in Cyclone IV Devices :)
Там нашел "Configuration File Size" для EP4CE10: 2 944 088 бит. Получается почти в шесть раз быстрее - 58 мс без сжатия. Но гораздом больше периода тактового сигнала CPU ~500 нс, даже со сжатием в 10 раз. Правда, мне неизвестно сколько времени приставка приходит в себя после включения. Возможно гораздо дольше 58 мс.

Переделал картридж под первый Final Fantasy (J). Виснет также. Пару раз у меня сразу после включения воспроизводилась анимация начала боя (затемняющийся к центру экран) с соответствующим звуковым эффектом. Правда вместо графики - мусор.

Решил сделать согласование уровней для единственного вывода идущего в приставку: CIRAM A10. Изменил код для описания выхода как выхода с открытым стоком (через z состояние):

Code: Select all

assign CIRAM_A10 = rControl4_10[1] ? (rControl4_10[0] ? (PPU_A11 ? 1'bz : 1'b0) : (PPU_A10 ? 1'bz : 1'b0)) : (rControl4_10[0] ? 1'bz : 1'b0);
Согласование собрал на резисторах согласно схеме выше (пост от 27 февраля 2017 ).
Ничего не изменилось.

Посмотрел SignalTap'ом что происходит: все виснет в одном и том же состоянии.
Диаграммы сигналов.

Сразу после сброса.
Image

SignalTap_MMC1_PPU_junk_with_Reset.stp

И когда висим.
Image

SignalTap_MMC1_PPU_junk_after_Reset.stp

Выводы PRG_A - это выходы маппера на адресную шину PRG-ROM. Выводы rPRG_b это выходы внутреннего регистра выбора банка PRG-ROM. Видно что до переключения банков даже не доходит.
Да я как бэ хотел предложить реализацию MMC1 на CPLD EPM3064.
Пробежался по даташиту. Интересный вариант.
Я правильно понял, что при питании 3,3В MAX 3000A может спокойно работать в 5В системе без схем согласования?
Лучше спросить глупость, чем сделать глупость.