Решил попробовать собрать свой картридж для 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В сигналом.
Более общий вопрос: можно ли смешивать различные способы согласования в одной схеме? То есть на шину данных поставить трансивер, а на прочие выводы - буферную микросхему.
ПЛИС Cyclone 4 как mapper для Dendy картриджа
Moderators: HardWareMan, aodinets, admin, figura, alex
-
- Posts: 26
- Joined: Tue Jan 29, 2013 1:27 am
- Location: Russia, Ekaterinburg
Re: ПЛИС Cyclone 4 как mapper для Dendy картриджа
А что такое: EP4CE10F17C0N, это вроде как цифра обозначающая задержку распространения сигнала "pin to pin" внутри FPGA...Решил попробовать собрать свой картридж для 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В сигналом.
Более общий вопрос: можно ли смешивать различные способы согласования в одной схеме? То есть на шину данных поставить трансивер, а на прочие выводы - буферную микросхему.
...зачем? Не проще ли взять ФЛЭШЬ 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:](./images/smilies/f09f98b2_2x.png)
А вообще можно разделить шины резисторами, только подтянуть с каждой стороны резисторами соотв. к 3-м и 5-ти вольтам, при этом в программируемой логике назначить на эти пины Open Drain (если они подразумеваются как I/O или как Output, а если только как Input, то достаточно будет только резисторов, для HOMEBREW поделки такое норм.).
-
- Posts: 26
- Joined: Tue Jan 29, 2013 1:27 am
- Location: Russia, Ekaterinburg
Моя ошибка. Конечно же EP4CE10F17C8N. Не разглядел восьмерку.А что такое: EP4CE10F17C0N...
5В флеш и ОЗУ у меня уже есть, а 3-х вольтовые придется докупать. С 3В получится аккуратнее, но и количество выводов требующих согласования резко увеличится. А сейчас - это не более 11 ног....зачем? Не проще ли взять ФЛЭШЬ 3-x вольтовую, да и SRAM тож на 3в.? ...и весь огород поставить после согласования уровней?
Запитывать буду от стабилизатора ПЛИС (об этом ниже).почитайте про LVC244A...
Главное что "Inputs Accept Voltages to 5.5 V".
Спасибо за предупреждение. Один раз я уже на этом обжегся.
Конечно же транслятор. TXB0108.Это как?...трансивер?
Я нуб и еще и в наименованиях путаюсь.
![Краснеет :oops:](./images/smilies/f09f98b3_2x.png)
С выходом типа "Открытый сток" разобрался. 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-х вольтовой стороны чтобы передний фронт сигнала не был слишком завален:Моя ошибка. Конечно же EP4CE10F17C8N. Не разглядел восьмерку.А что такое: EP4CE10F17C0N...
5В флеш и ОЗУ у меня уже есть, а 3-х вольтовые придется докупать. С 3В получится аккуратнее, но и количество выводов требующих согласования резко увеличится. А сейчас - это не более 11 ног....зачем? Не проще ли взять ФЛЭШЬ 3-x вольтовую, да и SRAM тож на 3в.? ...и весь огород поставить после согласования уровней?
Запитывать буду от стабилизатора ПЛИС (об этом ниже).почитайте про LVC244A...
Главное что "Inputs Accept Voltages to 5.5 V".
Спасибо за предупреждение. Один раз я уже на этом обжегся.
Конечно же транслятор. TXB0108.Это как?...трансивер?
Я нуб и еще и в наименованиях путаюсь.
С выходом типа "Открытый сток" разобрался. 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В логикой имеется.
Поэтому навыки согласования логических уровней мне также пригодятся.
![Image](http://ramfactory.com/devices/IMAGES/SMP.png)
Однако, ещё раз скажу, так делать не особо "хорошо"...
-
- Posts: 26
- Joined: Tue Jan 29, 2013 1:27 am
- Location: Russia, Ekaterinburg
UNROM mapper
UNROM взлетел.
![Image](https://img-fotki.yandex.ru/get/509531/45375976.0/0_177f64_5a8eee3c_M.jpg)
По входу на ПЛИС поставил SN74LVC244A. Выход с ПЛИС завел напрямую на PRG ROM.
Принципиальная схема и Verilog код на GitHub:
https://github.com/mindstation/Famicom_mappers
П.С. Взлетело-то еще в мае. Но пока оформлял проект. Осваивал Git и EasyEDA. Наступила осень![Широко улыбается :D](./images/smilies/f09f9880_2x.png)
![Image](https://img-fotki.yandex.ru/get/509531/45375976.0/0_177f64_5a8eee3c_M.jpg)
По входу на ПЛИС поставил SN74LVC244A. Выход с ПЛИС завел напрямую на PRG ROM.
Принципиальная схема и Verilog код на GitHub:
https://github.com/mindstation/Famicom_mappers
П.С. Взлетело-то еще в мае. Но пока оформлял проект. Осваивал Git и EasyEDA. Наступила осень
![Широко улыбается :D](./images/smilies/f09f9880_2x.png)
Лучше спросить глупость, чем сделать глупость.
- HardWareMan
- Гуру, Super DONATE +15000
- Posts: 318
- Joined: Sun Dec 19, 2010 11:12 pm
Re: ПЛИС Cyclone 4 как mapper для Dendy картриджа
Но ведь главное то это результат.
Re: UNROM mapper
КРУТА!!! Главное что процесс идет!UNROM взлетел.
По входу на ПЛИС поставил SN74LVC244A. Выход с ПЛИС завел напрямую на PRG ROM.
Принципиальная схема и Verilog код на GitHub:
https://github.com/mindstation/Famicom_mappers
П.С. Взлетело-то еще в мае. Но пока оформлял проект. Осваивал Git и EasyEDA. Наступила осень
![Слегка улыбается :)](./images/smilies/f09f9982_2x.png)
-
- Posts: 26
- Joined: Tue Jan 29, 2013 1:27 am
- Location: Russia, Ekaterinburg
Re: ПЛИС Cyclone 4 как mapper для Dendy картриджа
Идею с Cyclone 4 в качестве mapper для Dendy картриджа не забросил. Но с реализацией MMC1 забуксовал.
На данный момент картридж без проблем работает с дампером Cluster'а. Ром считывается без ошибок.
Банки и режимы их переключения меняются соответственно описанию MMC1 на nesdev.com. А вот на фамиклонах (Dendy Junior III, Magistr Savia) картридж не работает.
Приставка виснет сразу же после включения. Обычно демонстрируя экран залитый каким-нибудь одним цветом. Иногда выдает "кашу" из случайных тайлов.
![Image](https://i.ibb.co/LvfT65R/My-MMC1-titles-glitch-2019-04-21-20-33-59.png)
Тестировал на роме "Raf World (J).nes" из goodNES_V3.1 и с ПЗУ из пиратского картриджа "Ferrari - Grand Prix Challenge". Скриншоты сделаны с Raf World.
Если запускать картридж с игрой, которая не использует маппер, то все работает отлично.
Подозреваю что это следствия моего навесного монтажа.
![Image](https://i.ibb.co/rGsY3Mp/IMG-7687.jpg)
Старался использовать проводники одинаковой длины, не более 4 см. Проводники многожильные.
Насколько сложно завести картридж с навесным монтажом?
Схема картриджа доступна по следующей ссылке (не доразведена Save RAM часть):
https://easyeda.com/mindstation/MMC1mst ... d4d2aeb13a
Проект на GitHub (ветка mmc1dev, директория MMC1proj):
https://github.com/mindstation/Famicom_ ... ee/mmc1dev
На данный момент картридж без проблем работает с дампером Cluster'а. Ром считывается без ошибок.
Банки и режимы их переключения меняются соответственно описанию MMC1 на nesdev.com. А вот на фамиклонах (Dendy Junior III, Magistr Savia) картридж не работает.
Приставка виснет сразу же после включения. Обычно демонстрируя экран залитый каким-нибудь одним цветом. Иногда выдает "кашу" из случайных тайлов.
![Image](https://i.ibb.co/jZzk2Fr/My-MMC1-flat-color-glitch-2019-04-21-20-39-26.png)
![Image](https://i.ibb.co/LvfT65R/My-MMC1-titles-glitch-2019-04-21-20-33-59.png)
Тестировал на роме "Raf World (J).nes" из goodNES_V3.1 и с ПЗУ из пиратского картриджа "Ferrari - Grand Prix Challenge". Скриншоты сделаны с Raf World.
Если запускать картридж с игрой, которая не использует маппер, то все работает отлично.
Подозреваю что это следствия моего навесного монтажа.
![Image](https://i.ibb.co/X2k6d3t/IMG-7689cut.jpg)
![Image](https://i.ibb.co/rGsY3Mp/IMG-7687.jpg)
Старался использовать проводники одинаковой длины, не более 4 см. Проводники многожильные.
Насколько сложно завести картридж с навесным монтажом?
Схема картриджа доступна по следующей ссылке (не доразведена Save RAM часть):
https://easyeda.com/mindstation/MMC1mst ... d4d2aeb13a
Проект на GitHub (ветка mmc1dev, директория MMC1proj):
https://github.com/mindstation/Famicom_ ... ee/mmc1dev
Лучше спросить глупость, чем сделать глупость.
Re: ПЛИС Cyclone 4 как mapper для Dendy картриджа
Если схема правильная можно хоть ВВГ разной длины, хоть на пол метра различающиеся.Насколько сложно завести картридж с навесным монтажом?
Схема не правильная для SAVE RAM, будут "отваливаться" сохранения.Схема картриджа доступна по следующей ссылке (не доразведена Save RAM часть):
https://easyeda.com/mindstation/MMC1mst ... d4d2aeb13a
Проект на GitHub (ветка mmc1dev, директория MMC1proj):
https://github.com/mindstation/Famicom_ ... ee/mmc1dev
Мда, EP4...хотя там реально хватит EPM3064 за глаза... печалька...
Может вам схему нормальную нарисовать, а то тут целые проекты на гит'е? А работы на три часа.
P.S. Я ни в коем случае не хочу принизить вашу работу, просто может помочь?
-
- Posts: 26
- Joined: Tue Jan 29, 2013 1:27 am
- Location: Russia, Ekaterinburg
Re: ПЛИС Cyclone 4 как mapper для Dendy картриджа
Cyclone 4 здесь совершенное избыточен, согласен. Но на момент проектирования схемы это была первая и единственная ПЛИС у меня в наличии. Я тогда решил себе ни в чем не отказывать.Мда, EP4...хотя там реально хватит EPM3064 за глаза... печалька...
Позже, встроенная RAM циклона пригодилась для SignalTap в Quartus.
Само по себе использование циклона в картридже может создавать дополнительные проблемы для стабильной работы? В cyclone4 handbook прочитал что конфигурирование ПЛИС в AS происходит не очень быстро. Для частоты 50 МГц (генератора на плате CoreEP4CE10) и EPCS16 размером в 2МБ (16779128 бит) на загрузку конфигурации из флешки уйдет около 335 мс, а приставка ждать столько не будет, я думаю.
Почту за честьЯ ни в коем случае не хочу принизить вашу работу, просто может помочь?
![Слегка улыбается :)](./images/smilies/f09f9982_2x.png)
Цель моей возни с этим картриджем - знания. Есть желание научиться работать с ПЛИС, а картридж с игрой дополнительный стимул.
Проект на GitHub - это побочный продукт. В первую очередь он был создан для того чтобы организовать простой доступ к исходному коду.
Если поможете со схемой я буду очень благодарен. А если дадите краткие пояснения по наиболее грубым моим ошибкам, в чем преимущество вашего решения, буду крайне признателен.
На каких условиях желаете помочь?
Лучше спросить глупость, чем сделать глупость.
Re: ПЛИС Cyclone 4 как mapper для Dendy картриджа
Да я как бэ хотел предложить реализацию MMC1 на CPLD EPM3064. А если цель научиться, то тут конечно я предлагаю ересь!Cyclone 4 здесь совершенное избыточен, согласен. Но на момент проектирования схемы это была первая и единственная ПЛИС у меня в наличии. Я тогда решил себе ни в чем не отказывать.Мда, EP4...хотя там реально хватит EPM3064 за глаза... печалька...
Позже, встроенная RAM циклона пригодилась для SignalTap в Quartus.
Само по себе использование циклона в картридже может создавать дополнительные проблемы для стабильной работы? В cyclone4 handbook прочитал что конфигурирование ПЛИС в AS происходит не очень быстро. Для частоты 50 МГц (генератора на плате CoreEP4CE10) и EPCS16 размером в 2МБ (16779128 бит) на загрузку конфигурации из флешки уйдет около 335 мс, а приставка ждать столько не будет, я думаю.
Почту за честьЯ ни в коем случае не хочу принизить вашу работу, просто может помочь?
Цель моей возни с этим картриджем - знания. Есть желание научиться работать с ПЛИС, а картридж с игрой дополнительный стимул.
Проект на GitHub - это побочный продукт. В первую очередь он был создан для того чтобы организовать простой доступ к исходному коду.
Если поможете со схемой я буду очень благодарен. А если дадите краткие пояснения по наиболее грубым моим ошибкам, в чем преимущество вашего решения, буду крайне признателен.
На каких условиях желаете помочь?
![Слегка улыбается :)](./images/smilies/f09f9982_2x.png)
Если желаете учиться, не забывайте читать документацию. Сколько бит у EP4CE10 конфигурационных? Меньше 2mb. Ускорить процесс можно используя сжатие на лету. Циклоны могут грузить запакованную конфигурацию.Само по себе использование циклона в картридже может создавать дополнительные проблемы для стабильной работы? В cyclone4 handbook прочитал что конфигурирование ПЛИС в AS происходит не очень быстро. Для частоты 50 МГц (генератора на плате CoreEP4CE10) и EPCS16 размером в 2МБ (16779128 бит) на загрузку конфигурации из флешки уйдет около 335 мс, а приставка ждать столько не будет, я думаю.
-
- Posts: 26
- Joined: Tue Jan 29, 2013 1:27 am
- Location: Russia, Ekaterinburg
Re: ПЛИС Cyclone 4 как mapper для Dendy картриджа
Спасибо за подсказку. Открыл для себя новый раздел в Cyclone IV handbook: 8. Configuration and Remote System Upgrades in Cyclone IV DevicesЕсли желаете учиться, не забывайте читать документацию. Сколько бит у EP4CE10 конфигурационных?
![Слегка улыбается :)](./images/smilies/f09f9982_2x.png)
Там нашел "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);
Ничего не изменилось.
Посмотрел SignalTap'ом что происходит: все виснет в одном и том же состоянии.
Диаграммы сигналов.
Сразу после сброса.
![Image](https://i.ibb.co/8XyC0Wm/my-MMC1-PPU-junk-with-reset-2019-05-27-07-51-15-cut.png)
SignalTap_MMC1_PPU_junk_with_Reset.stp
И когда висим.
![Image](https://i.ibb.co/9Z4k2CR/my-MMC1-PPU-junk-after-reset-2019-05-27-07-51-43-cut.png)
SignalTap_MMC1_PPU_junk_after_Reset.stp
Выводы PRG_A - это выходы маппера на адресную шину PRG-ROM. Выводы rPRG_b это выходы внутреннего регистра выбора банка PRG-ROM. Видно что до переключения банков даже не доходит.
Пробежался по даташиту. Интересный вариант.Да я как бэ хотел предложить реализацию MMC1 на CPLD EPM3064.
Я правильно понял, что при питании 3,3В MAX 3000A может спокойно работать в 5В системе без схем согласования?
Лучше спросить глупость, чем сделать глупость.