Дублирую свое сообщение из одноименой темы в разделе "вопросы о плате марсоход", чтобы соблюдать организацию форума.
Понятно, что раз это мой первый опыт работы с ПЛИС вообще и с Quartus и Verilog в частности, то там есть еще над чем работать, мягко говоря... Но все-таки он работает:) Играться уже можно:) Запоминать он что-то запоминает, но в компьютер осциллограммы пока не отдает - это в планах.
Что в нем внутри на данный момент:
АЦП Марсохода 2 измеряет на максимально допустимой для него частоте - 20MHz.
Показания АЦП и значение счетчика горизонтальной развертки осциллографа служат для вычисления координаты точки в двухмерном массиве байтов размером 256x128. Происходит запись точки. Линии пока не чертятся - при резких фронтах видно только площадки, но более плавные сигналы выглядят довольно красиво.
Запись идет в двухпортовую память. Вторым ее пользователем является простой видеоконтроллер, который асинхронен по отношению к генератору видеосинхроимпульсов - пиксельклок может быть разным и размер и положение окна и рамки можно гибко регулировать. Кроме вывода точек видеоконтроллер пересчитывает их яркость в сторону уменьшения - они красиво затухают :)
Видеоконтроллер "двухслойный" - кроме графики выводит текст на основании шрифта 8x8 (выдранного из ПЗУ Спектрума :), массива кодов символов и массива цветов. Цвет пока не доделан. Все это хранится в другой двухпортовой памяти. Видеоконтролер делит ее с простым самодельным процессором. Остаток этой памяти отведен под программу процессора. Тут опрос кнопок марсохода (ps/2 пока не присоединил), частотомера, вывод интерфейса на экран и изменение частоты и типа триггера развертки. Этому процессору не нужен ассемблер - он исполняет непосредственно текстовый файл с программой на простом самодельном языке программирования. Эдакий калькулятор с ветвлениями. Адресация сугубо косвенная с автоинкрементом, вместо регистров память и два указателя в нее. Арифметика производится над содержимым ячеек памяти, на которых показывают эти два указателя. Коды команд совпадают с кодами символов =+- и т д, поэтому набирать программу можно прямо в квартусе или блокноте. Благодаря автоинкреенту и little endian, если надо сложить два байта - пишем ++, надо 32бит сложить - пишем ++++
Вот hello world на этом языке:
0800 "Hello world" .
а вот 3 + 2:
i0 '03'
i1 '02'
i0, i1 + `результат в i1
ветвление если i0>0:
i0 ? 0800 "да " `; 0800 "нет" ` какой-то комментарий
и все :) Как бы меньше чем за неделю больше не сочинишь, а больше пока и не надо. Хочется поискать ошибки, почитать ругань квартуса, перерисовать схему проекта как-то красивее, уменьшить количество неблокирующих присваиваний и т.д. И конечно хочется более удобной аналоговой части. Потом в планах подключение PS/2 и задействование SDRAM и COM-порта для хранения и передачи в компьютер осциллограм.
Если кто будет смотреть проект, то не обращайте внимание на вторую PLL и шину leds - это для баловства и отладки. Приятно, что уже можно глядеть свой же собственный видеосигнал марсохода меняя триггеры и частоты развертки. Все в оттенках зеленого сделал специально - ретро :) Bat-файл обновляет hex-файл памяти с шрифтом, текстом и программой и чистит проект, чтобы квартус применил измененный файл. Html-страница делает hex-файл из картинки.