Релизация CPU на плис. Ядро SomeAVR

В этой записи я попытаюсь рассказать о реализации части процессорного ядра, использующего подмножество команд, используемых микроконтроллерами с архитектурой AVR. Проект далёк от завершения, но помигать светодиодом уже можно ;-) Например так:

Здесь правые 8 светодиодов показывают значение регистра R20, а левые 8 — значение IP(PC). Немного описания далее.
Были найдены готовые реализации AVR на FPGA: pAVR, AVR Core, Navré AVR clone. Но они явно очень сложные для начинающих и некоторые из них написаны не на Verilog, а мне пока хотелось бы более подробно познакомится с ним. Больше всего данный проект похож на reducedAVR. Только тут не приходится так извращаться с последовательной памятью, а можно сразу использовать встроенный блок m4k как ROM память.

Реализованы минимально необходимые инструкции: некоторые арифметические и условного перехода. Например вот код, который выполняется на камне в видео:

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

При загрузке конфигурации FPGA все регистры устанавливаются в значение по умолчанию, это можно увидеть на следующем видео

К сожалению пока всё, надеюсь будет продолжение :-)

Yuriy Nazarov on GithubYuriy Nazarov on Twitter
Yuriy Nazarov
Software engineer
Люблю machine learning