Ну, раз такой живой интерес возник..
Вот архив с сегодняшним слепком проекта:
см.Обновление
Должен открываться и собираться, относительно быстро, в Quartus II Web Edition. У меня версия 7.1, с другими не проверял.
Никакой доки пока нет, есть только немного комментариев в коде. Расскажу вкратце об особенностях.
1. Видео. Наиболее стремная часть проекта, не судите строго.. На моем мониторе получается увидеть режим 720x576 @ 50Hz, хоть монитор и поругивается на его "неоптимальность". В принципе, можно пересобрать все для режима 800x600@60, но тогда это будет уже как бы другой компьютер. См. define-ы в файле vector06cc.v.
2. Память. Поскольку на DE1 есть 512Кб статического раму, я воспользовался именно им, ибо халява. Распределяется он следующим образом: первые 64Кб, с адреса 0 -- основная память Вектора; следующие за ними (с адреса 0x8000) 256Кб -- квазидиск. В перспективе, конечно же, надо перейти на DRAM. Это сразу облегчит перенос проекта на другие платы.
3. ПЗУ загрузчика, 2Кб, лежит прямо в проекте и собирается в M4K блоках. Инициализируется из zagr512.hex, но это на самом деле какой-то из двухкилобайтных загрузчиков, который я немножко подправил для удобства. В частности, он никогда не чистит основную память.
4. Переключатели и кнопки. Это описано подробно в комментарии к топлевелу. Главное, чтобы SW8 и SW9 были в верхнем положении, остальное в принципе используется только для отладки и мощного мигания лампочками. KEY[0] -- RESET а-ля БЛК+ВВОД, KEY[3], как и F12 на клавиатуре -- БЛК+СБР. В особых случаях можно нажимать KEY[3] и KEY[0] одновременно -- тогда загрузчика вообще не будет.
Про компиляцию.
Тут сказать нечего, все должно собраться сразу, порядка 400 предупреждений будет. В главном файле, vector06cc, есть несколько define-ов. x800x600 даст левый, но более монитороугоднический видеорежим. Остальные направлены на ускорение компиляции при отладке. Можно собрать, например, Вектор без процессора.
Теперь о том, как его загружать.
Сделать JTAG интерфейс как в примерах я пока так и не удосужился. Поэтому для загрузки я пользуюсь примером API из комплекта софта к DE1. Загружатем API-шный модуль, присоединяемся его программой к плате, открываем страничку SRAM и закачиваем. Обычные программы из файлов .rom надо заливать по адресу 0x80 (0x100 в байтах, но память там по 16 бит в слове). После этого отсоединяемся программой, переходим обратно в Квартус, закачиваем vector06cc.sof. Любовно подправленный загрузчик не затрет память, нажимаем F12 и voila.
Вариант загрузки номер два. Все так же, как и в первом случае, но берем образ квазидиска и заливаем его в SRAM начиная с адреса 8000. Теперь загрузчик будет видеть, что на диске что-то есть и будет грузиться с него.
Вариант загрузки номер три, кассетный магнитофон или айпод, никто не отменял. Загрузка с кассеты работает. Да и выгрузка тоже.
Немножко павлина-мавлина: все сорцы открытые. Лицензия на то, что моё собственное -- Modified BSD, переводится на русский приблизительно как "можно делать совершенно всё, что угодно, пенять при этом на себя, автора помнить добрым словом". Кроме того в проекте использован код процессора T80 с opencores.org, 82c55 c fpgaarcade и i2c протокол для конфигурации кодека из примеров от DE1, лицензии на них см. в исходниках.
Да, а о том что находится в ПЗУ на видео выхлопе я понятия не имею. В полноценном Векторе там было ОЗУ, в котором хранилась палитра. Свою реализацию я считаю полноценной, поэтому у меня там тоже ОЗУ =)
Внешние ссылки:
ZIP-архив с проектом и всеми исходниками: см. Обновление
Образ квазидиска для примера: http://www.sensi.org/~svo/vector06c/ramdisk.zip
Обновление: проект теперь живет на http://code.google.com/p/vector06cc/. Там можно и взять самые последние сорцы, и выкачать последний слепок и-или скомпилирвоанные битстрим файлы. Квазидиски по-прежнему лежат тут: кваз1 и тут: кваз2.





Ответить с цитированием