Pull to refresh

Comments 77

молодца,

как я понял, работает связка: NES -> Nios -> FPGA,
где NES CPU -> С/С++ эмуляция на Nios
или чистый Verilog?
Спасибо!
Нет-нет, Nios II используется только для загрузки образов с SD и для USB джойстика. Думаю, поддержку FAT32 было бы немного неразумно делать аппаратно, когда есть Nios. Все остальное (CPU6502, PPU, APU и т.д.) Verilog.
да, логично

>Канал дельта-модуляции в проекте пока не реализован.
интересная задача…
Действительно, огромная работа! Удачи в дальнейших ваших начинаниях :)
но зачем вам эта приставка?
Я в восхищении! Автору высочайший респект и уважуха!

Было бы ещё круто, если бы можно было сие повторить (т.е. ссылки где купить отладочную плату, скачать прошивку). Ибо, уверен, что даже относительно далёким людям будет интересно поиграть в Деньди. А потом, быть может эти далёкие люди начнут осваивать Verilog. И не будут бояться. Как в анекдоте:

Мой кот боялся пылесоса. Но ничего, потом втянулся


Так и люди, боятся ПЛИС, а потом втянутся. Так что было бы замечательно ещё статью-инструкцию, как это сделать самим :)
Спасибо большое!
Так великолепная инструкция уже написана на nesdev.com. По своему опыту скажу, что в Verilog самое сложное — это начать «мыслит аппаратно», поначалу это действительно сложно, особенно если приходится каждый день скакать Verilog / процедурный язык типа C. Кстати, некоторые вещи вообще проще реализуются на Verilog. А, например, операции сдвига, «сборка адреса» tVRAM/vVRAM из примера в этой статье, так вообще одно удовольствие, ведь аппаратно это все равно что «провода» со смещением подключить — на ПЛИС это условно бесплатные операции.
Ну я имею в виду, что я бы малой кровью сделал бы себе такую Деньди, без разбирательства с верилогом (пока что) :).

По своему опыту скажу, что в Verilog самое сложное — это начать «мыслит аппаратно», поначалу это действительно сложно, особенно если приходится каждый день скакать Verilog / процедурный язык типа C.


Это да… Помню, для меня было просто взрывом мозга, что на компе все инструкции выполняются последовательно, а тут все СРАЗУ!
Особенно круто совместить несовместимое и писать/симулировать железо не на Verilog или VHDL, а прямо на C++. Получается довольно страшно, и с синтезом пока серьезные проблемы, но как мост между истинным C и настоящим Verilog — вполне себе, как минимум со взрывом мозга от параллельности справиться помогает.
Во время стажировки в компании Aldec в Польше занимался такой задачей — трансляция VHDL в C++, для последующей компиляции и быстрой симуляции железа на PC. Насколько помню этот продукт у них называется Active-HDL. Сделал и я свой маленький вклад в него…
Active HDL работает через трансляцию VHDL в C++? Если честно ОЧЕНЬ удивлён, не ожидал, что они реализуют свой софт именно так…
UFO just landed and posted this here
На моем опыте SystemC не дает заметных преимуществ перед Verilog или VHDL, а синтезируемое подмножество оказывается даже сложнее.
Так что лучше сразу на Haskell. :-)
Годнота! Жду сорцы на гитхабе.
Отлично.
Мой опыт работы с FPGA пока ограничивается синтезом и отладкой пары десятков очень простых программ на VHDL, используя Spartan-3A Starter Kit, поэтому такой проект выглядит очень сложным, но дико крутым.
Много времени заняла реализация?
Порядка 3-х месяцев работы по вечерам.
Очень круто! Объём проделанной работы впечатляет.
У меня для вас плохая весть… У Курта не будет больше релизов с ударными.
Очень круто не то слово.
ps: Увидел цену DE2-115 и немного погрустил Price: $595
а если на такой приставке реализовать еще и Sega mega drive II, и предел моих мальчишецких мечтаний — сони плейстейшн — то было бы оправданно по цене.
Обратите внимание, что у продавцов есть и академическая лицензия (для студентов, преподавателей и сотрудников). Можно попробовать заказать плату по этим каналам.
Я покупал по студенческой цене, спасибо другу, он работает в университете.
Кстати, есть варианты намного дешевле, например, можно купить модуль на Cyclone IV за 35 долларов и использовать его на самодельных ЛУТ платах. Зато можно поэкспериментировать и решить, хочешь продолжать или нет. DE2-115 хороша тем, что на борту куча периферии уже есть, но для начинающего, я думаю, сама FPGA там немного великовата (115k LE), хотя есть конечно и DE2/DE1.

У Terasic еще есть маленькая плата DE0-Nano за 60 USB для студента, но Terasic отправляет только экспресс-методами и цена доставки выходит дороже платы, невыгодно получается.
Как вариант, можно использовать и готовые модули. На том же стартерките есть недорогие (порядка 2 т. р.) модули.
Найдите любой студак и купите за 300.
И за что минусы? Терасику реально пофиг студент вы или нет, им нужно отчитаться перед Альтерой, что купил студент и они сделают вам скидку! Суть коммента состояла в том, что заказать со скидкой может любой человек.
Попробуйте эту же плату от терасика или плату DE1 — возможностей меньше, но и цена более приятная. Если охота попробовать вкуснятину в виде CortexA9+FPGA ( Cyclone 5), то EBV уже выпустили socrates board, цена получается под 400 евро, но оно того стоит. Для совсем первоначального знакомства — закажите De0-nano, а чтобы не связываться с дхл и прочими курьерами, сделайте у наших поставщиков — у тойже терраэлектроники.
Автору респект у самого в универе есть такие, но реализация NES только в планах… Если вам интересно, то на OpenCores есть реализация SoC, на которой можно запустить DOS/
Сколько ресурсов FPGA кушает проект? Можно ли его портировать на недорогое железо типа gameduino (микросхема XC3S200A-4VQG100C, Xilinx семейства Spartan-3A)?
Если не считать Nios, то около 4300 LE. Но это очень много — еще можно многое оптимизировать!
Кстати, еще про память. В качестве CPU RAM (которая 2 КБ + 6 КБ) и PPU VRAM (4 КБ) я использую память на самом Циклоне (M9K).
Но это не совсем оптимально, потому что так как память картриджа (PRG/CHR ROM) — внешняя SRAM, и учитывая, что CPU/PPU обращается к своим RAM и ROM не одновременно (шина-то у них общая), то можно подмэппить RAM и VRAM на ту же самую внешнюю память, где хранится образ картриджа, даже частоту поднимать не потребуется, тогда проект можно будет запустить на маленьких чипах.
По поводу XC3S200A боюсь соврать, я с Xilinx не работал, но вроде бы при желании можно запустить. Я в комментариях упоминал модули CoreEP4CE10 (он на чипе EP4CE10F17C8N) и CoreEP4CE6 (на EP4CE6E22C8N) — вот на них 100% можно с внешней памятью.

Извиняюсь за глупый вопрос, но, можете вкратце описать разницу ПЛИС между, тем же микроконтроллером? Я как-то сложно представляю, как можно управлять/изменять железную структуру чипа програмно.
Сейчас объясню на пальцах.

Представьте себе, что у нас есть много отдельных простых микросхем. Триггеры, логика и т.п. Из десятка таких блоков можно собрать регистр, из 20-ти — сумматор. Тысяч десять уйдет на процессор. Если эти блоки и соединительные проводники уместить на маленьком кусочке кремния, получится обычная микросхема с жесткой структурой.

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

Теперь уже привычным способом уменьшим эту структуру и получим ПЛИС. Она состоит из большого числа одинаковых простых блоков, линий связи между ними, ключей, которые могут соединять или разъединять те или иные связи, и небольшой управляющей схемы, которая читает «прошивку» и управляет ключами.
При работе с ПЛИС, мы не привязываемся к архитектруным особенностям (в отличии от микроконтроллера). Если например мы делали прошивку для ПЛИС фирмы Altera, то мы без особого труда можем ее перенести на ПЛИС фирмы Xilinx. Главное при этом переназначить ноги (пины) конечной ПЛИС.
Если например мы делали прошивку для ПЛИС фирмы Altera, то мы без особого труда можем ее перенести на ПЛИС фирмы Xilinx
Ну-ну… Нельзя просто так взять и перенести проект с Альтеры на Xilinx. У них разная организация логических блоков, разные наборы периферии. Даже стандарты языков Verilog и VHDL их трансляторы понимают немного по-разному. Да, после некоторых плясок с бубном перенести можно, но я не назвал бы это «без особого труда».
Прошу прошения, я с Вами полностью согласен. Я имел ввиду типовые простые проекты. Сталкивался пару раз, что после Альтеры Xilinx не хотел компилировать, но это решилось тем, что немного переписал код на Verilog'e на который ISE ругался и заработало.
Увы, все далеко не так просто, особенно последние годы с появлением специализированных аппаратных модулей различных у разных микросхем.
Это есть. Я ходил на последнюю конференцию Xilinx. Они вообще стараются делать все так, чтобы Альтере тяжело было c них скопировать что-то в технологическом плане.
Дополню тех, кто писал выше. На ПЛИС вы можете написать микроконтроллёр и под него уже написать программу в этом преимущество ПЛИС. В данном посте как раз и рассмотрено написание микроконтроллёра (процессора Z80) со всей перефирией. Микронтроллёр такое не позволяет сделать. В некотором роде вы делаете прототип микросхемы ПЛИС для этого и создавались, прошивка ПЛИС может быть перенесена не только на другой ПЛИС, но и на ASIC (полностью заказной камень), для этого некоторые производители делаю ПЛИС, максимально похожие по структуре на ASIC, например серия ProASIC от Actel
При всем уважении, но MOS 6502 ни разу не Z80. Это раз. Два — это что мешает создать эмуль любого проца на микроконтроллере? Тем более такого простого как 6502? Да ничто, пара-тройка десятков строк на си.
Думаю, человек просто торопился и ошибся по поводу Z80. Z80, кстати, используется как сопроцессор в приставке Sega Genesis (Mega Drive).

Вы меня тоже извините, но вот прямо таки любого, да на микроконтроллере? Не выйдет. Точнее с адекватной производительностью не выйдет. По-моему была статья, как Дмитрий загрузил Linux на AVR. Два часа загружался, эффективная частота всего несколько килогерц, а так ничего. И что вы подразумеваете под микроконтроллером? Ядро того же AVR не намного сложнее 6502.
Программная эмуляция как минимум потребует значительного (в несколько раз) увеличения тактовой частоты эмулирующей системы, а на ПЛИС — нет.

Конкретно вариант MOS6502 для NES можно при желании запустить на STM32, но я бы не сказал, что это прям так просто, по сравнению с эмулятором на PC, у которого производительность во много раз выше. Причем в любом случае придется возиться с «тактовой совместимостью» -учитывать за какое количество тактов выполняется каждая команда на реальном 6502. Иначе как минимум будут непредсказуемые эффекты на выводимой картинке из-за синхронной работы PPU-CPU (я про это говорил в статье).
А торопиться не надо. Нужно отделять мух от котлет, в смысле Z80 сюда никаким боком не причастен. Человек вот прямо пишет:
Микронтроллёр такое не позволяет сделать.
и это есть неправда. Не знаю, с какими вы там микроконтроллерами на килогерцах работаете, но я знаю с десяток общедоступных (читай по стоимости с пару бутылок пива) микроконтроллеров с частотой от 20 Мгц. И уж на 20 Мгц умудриться не сымулить 6502 это я не знаю, постараться надо. Наверное, действительно нужно запустить пару-тройку часов линупс, на нем за сутки поднять питон и на нем уже за год обработать один опкод 6502.
Я не говорб за всю перефирию типа PPU и процее. Я только за сам проц.
Извиняюсь, извиняюсь, думал о GameBoy писал о NES, это в GameBoy стоит модифицированный Z80, но сути это не меняет. Вы не можете на микроконтролёре сделать процессор, вы можете написать эмулятор процессора для микроконтролёра. А вот в ПЛИС вы может сделать процессор, если у вас есть его схема, то вы сделает клон, а не эмулятор, если схемы нет вы сделаете аналог с совместимой системой команд, а не эмулятор. Если у вас есть достаточно скила, то вы можете повторить не только архитектуру, но и микроархитектуру. Ещё раз говорю устраивать холивар между ПЛИС и микроконтроллёром занятие бессмысленное, ПЛИС нужны для прототипов цифровых микросхем или для того, что бы реализовать сложные вычисления определённого вида, т.е. если вам надо заточить железку под узкую задачу.
В ГБ стоит Sharp LR35902. Наши его называют «сильно упрощенным Z80», буржуи — «гибрид i8080 и Z80». Я его считаю «частично совместимым с Z80/i8080». Точном огу сказать только после декапа. К слову, декап 2A03 (или 6527 в случае клона) видно, что ядро CPU — полная копия кристалла 6502, за исключением 6 поправок, который отключают десятичный режим (защита от патента на 6502). Полную информацию можно взять здесь: www.breaknes.com

Кстати, китаец уже пару лет как создал Verilog модель точного PPU по работам BreakNES. forums.nesdev.com/viewtopic.php?f=9&t=10920

Китайцы уже стали делать клоны с FPGA вместо PPU. forums.nesdev.com/viewtopic.php?f=9&t=12578&p=149249

По NES теперь вообще нет белых пятен. Правда, полная схема только в транзисторах, но мы работаем над этим.
Круто, круто. Не думали туда реальный 6502 впилить, а все остальное — на плис?
Спасибо! В этом нет смысла. Можно и PPU (2C02) найти, но тогда это будет уже совсем неинтересно.
К тому же это надо искать CMOS версию 6502. И могут быть проблемы с недокументированными опкодами 6502, а в ПЛИС версии, при необходимости, можно добавить что угодно.
Вот какие должны быть статьи на хабре, ребята! А то я уже собрался из RSS вычеркивать, ибо тривиальщина и копипаст уже задрали. Автору респект. Почитал с удовольствием.
Не совсем понятно (а точнее, совсем не понятно), какие преимущества имеют такие FPGA по сравнению с микропроцессорами? Судя по характеристикам, они дороже, медленнее, ещё и программируются сложнее.
По поводу сложности в программировании, то наверное для людей далеких от FPGA — это так. Но «не боги горшки обжигают», как говорит пословица.

По поводу преимуществ, то мы можем реализовать абсолютно любую простую или сложную цифровую систему или устройство, просто описав логику работы каждой микросхемы входящей в устройство, используя языки описания аппаратуры Verilog / VHDL или делая все в виде схем (на уровне триггеров и регистров).

По поводу микропроцессора, то мне кажется он будет подороже чем FPGA. Если конечно Вы не подразумеваете микроконтроллер, то он действительно дешевле чем FPGA. Мы заказывали FPGA Altera Cyclone III в последний раз что-то около 1200 рублей за штуку, а микроконтроллер, мне кажется, будет стоить в пределах 300-500 рублей. Не учитывая сверхдорогие флагманские модели тех и других.
По поводу цены — вот в комментах писали, что $300 академическая цена. В то время, как например Raspberry Pi — $25/35.
Сравниваете теплое с мягким.
Омг сравнение хуже некуда.

RPi это самый дешевый дев борд на проце вообще, впринципе.
На непонятно каком проце, без нормальных доков.
Производитель(в данном случае Altera, terrasic делает платы по ее заказу), как правило, закладывает в свои отладки тех поддержку в отличие от RPi.
Помимо официальной ТП у их на сайте есть куча how-to.

Нужна недорогая борда?
marsohod.org/index.php/prodmarsohod

Более того, все пишут про эти $25, а реально то за эти деньги кто-нибудь ее купил?
В этом месте год назад покупал RasPi B за заявленные 35 у.е. + доставка не помню сколько. ps: цена указанная в магазине с учётом каких-то налогов, которые исчезали при указании страны РФ, и получалось 35.
Да вообще как можно сравнивать ПЛИС и процессор/микропроцессор!? У них у каждого своя область применения. Причем часто в реальных изделиях они работают в связке.

Раз уж про RPi зашел разговор, то свое мнение про него выскажу. Конечно, у меня он тоже есть, я купил его за 44 доллара — дорого, но я кроме него заказывал много чего еще в одном месте, поэтому с доставкой вышло более-менее.

Вообще, по моему мнению, RPi ужасен! Чего только стоят эти все разъемы, торчащие со всех сторон и выступающие на разную величину, даже SD карта, если стандарт брать, жутко выступает. Гнались за размером, а в итоге при подключении всего-то HDMI/power/USB получается краб, который занимает весь стол. А крепления… Это же ужас, в версии «А» их, вроде бы вообще нет, а на «B» два отверстия, расположенные как попало. Я не знаю точно, но предположу, что скорее всего и GPIO тоже многие не вывели из-за размера платы. Да пусть была бы больше по размеру, но все с одной или хотя бы с двух сторон и больше GPIO.

RPi просто хорошо распиарен.
Про процессор Вы точно сказали, Broadcom вообще славится своей манерой утаивать документацию, даже на маршрутизаторах и ADSL модемах на нем проблемы со сторонними прошивками — ни документации нормальной, ни драйверов.

почти оффтоп: Юмор-реклама на тему FPGA EPC3 от Lattice Semiconductor.
Я имел ввиду 1200 рублей чисто за микросхему (а не за отладочную плату). Т.е. под нее разрабатываешь печатную плату и припаиваешь. Но больше паять Циклон 3 руками я не хочу — зрение сильно садится и глаза устают по сильнее чем от сидения за компьютером.
FPGA дают намного большую свободу программирования, т.к. здесь ты сам решаешь, какие вычислительные устройства у тебя будут и сколько их будет, и ограничен только количеством блоков в твоем FPGA.
Нужен регистр — напиши регистр. Нужен сумматор — напиши сумматор. Нужно сто параллельно работающих сумматоров — напиши шаблон и тебе их синтезатор 100 сделает, лишь бы блоков хватило.
Вот понадобился человеку для реализации игровой приставки процессор 6502 — и он написал его. Не эмуляцию грубую последовательную, а сам процессор, разные части которого работают параллельно.
Или, скажем, придумалась тебе новая железка, которая делает какую-то простую, но важную задачу. От идеи до производства могут пройти годы, а на FPGA ее архитектуру можно начать отлаживать почти сразу.
CodeRush — отлично сказали. Прежде чем заводить продукт в серию. Можно протестировать и поэкспериментировать на ПЛИС.
Все делается апаратно и параллельно, можно сделать то, чего не реализовано в процессоре.

Вы ведь не сравниваете грузовик и экскаватор. В экскаваторе в ковше тоже можно груз возить.
Что значит, «сделать то, чего не реализовано в процессоре»? Можно написать любой код, и процессор его выполнит. Есть преимущество в скорости? Так по данной статье это не понятно, т.к. эмуляторы NES уже давно можно даже на мобильниках запускать.
На процессоре вы не сделаете видеокарту. А на FPGA сделаете.
Вообще, если кому интересно, реализация NES на FPGA уже была. danstrother.com/fpga-nes/
А еще HardWareMan сделал флеш-картридж с FPGA для эмуляции почти всех мапперов.
Если упрощенно то:
процессор выполняет ваши команды,
из ПЛИС в просто делаете цифровую микросхему, любую, в том числе и процессор или 10.

ну и самый простой из примеров: делать логическое И/ИЛИ с 128 входов с частотой 100МГц
Любые цифровые видеофильтры ПЛИС выиграет у микроконтроллёра. Особенно те, что содеражат умножение.
FPGA дают преимущества там, где нужна параллельность. Процессор дает преимущества там, где нужна абсолютная гибкость.
На FPGA можно сделать процессор и получить абсолютную гибкость в квадрате. ПЛИС кроет любой процессор по универсальности как бык овцу, но стоит значительно дороже.
Чтобы полученный на FPGA процессор имел более-менее терпимую производительность( ясно, что это будет именно процессор, а не микроконтроллер, причем не шибко старый процессор) прийдется забыть о Cyclone/Spartan и чесать в сторону Virtex/Stratix, а у них цены не просто значительно, а конкретно значительно выше. Хотя если хочется супергибкости — Zynq/Cyclone V с двумя A9 вёдрами на борту. От альтеровской реализации я вообще кипятком ссу, идеальный вариант получился.
С процессором сложно. Получить частоты выше 400 МГц на ПЛИС очень сложно даже на самых крутых и дорогих. Для Циклона вообще 200 МГц уже предел мечтаний для более менее реального проекта, поэтому я согласен с JerleShannara, Cyclone 5 и Aria очень интересное решение от Altera, когда нужен прцоессор.
Ну понятно, что это в теории. Естественно железно отлитое решение будет работать быстрей и стоить дешевле.
Не хочу обижать, но разве не проще-ли было реализовать симуляцию поверх существенной архитектуре — например поверх ARM или MIPS. Было-бы быстрее и проще. (см. пример с PS1 и PS one)
Люблю электронику и NES, и тут такой замечательный пост. Автор, спасибо! Статья — кладезь информации, я её ещё перечитывать буду на выходных. Кинамана посматриваете?
Александр, большое спасибо за замечательную статью! Вы меня прям вдохновили и я тоже заказал себе FPGA от Altera, буду пробовать!
Спасибо за статью! Проделанная работа очень впечатляет!
Sign up to leave a comment.

Articles