Pull to refresh

Comments 10

Честно говоря не очень понятно, как можно «досконально разобраться» в работе процессора написав его не в HDL. Ведь только в verilog/vhdl можно реализовать именно потактную обработку, pipeline, посмотреть, как работает кэш и т.д.
Обычные не HDL языки ведь лишены понятия течения времени.
Вы про то, что нет сигнала тактирования? Здесь тактированием выступает пошаговое выполнение инструкций. Разобраться через HDL на FPGA? Отладка — очень трудоемкая. Data hazards — это отдельная фундаментальная задача. Работа с кешем — тоже. Ну и доказательство корректности, к примеру для новых Extentions делать на Verilog? Я привел ссылки в статье на эту тему. Гляньте.
Ну может я не совсем верно высказал свою мысль.
Как вы иммитируете конвейерное исполнение инструкций?
Вот эти fetch -> decode -> execute -> write mem или что там…
Пока текущая команда исполняется, следующая тем временем декодируется и через-следующая уже выбирается…
Это 1-stage pipline. Для 5-stage pipline уже нужна реализация data hazards.
Это осмысленно только для задач производительности. Однако на FPGA особой производительности не достичь.
Более того — реализация на HDL действительно много. И параметрической генерации, оптимизации под конкретные платы и IP.
На данном этапе — для меня 5-stage pipline задача интересная, но избыточная.
Но с другой стороны если задаваться целью понять, как работает процессор, то как раз pipeline и интересен. И не обязательно загружать в FPGA — можно в симуляторе смотреть.
Но, конечно, и 1-stage программный эмулятор дает некоторое представление, тут вы правы.
А разве реализация формальной спецификации ISA не предполагает абстрагирование от микроархитектуры, т. е. от явной аппаратной имплементации? Насколько я понял, автор изучает именно ISA-часть. Без всякого сомнения, описать ISA на уровне RTL интересно и полезно с точки зрения практики. Но и исследовать ISA тоже увлекательно.
С моей же стороны мне интересно от вас услышать: отзывы, впечатления, добрые напутствия. А для самых смелых — помощь в поддержании проекта.
Было бы здорово, если бы Вы реализовали возможность сравнивать трассировку состояний вашей модели при выполнении программ с аналогичной трассировкой состояний RTL-ядер. Тогда любопытно было бы проанализировать работу открытых проектов.
Круто. Когда-то давно сам сделал DISC процессор, но пришёл к выводу, что это бесполезная трата времени (когда разобрался в вопросе, стало не интересно, а применить негде). Надеюсь, вы придёте к другому выводу. Желаю успехов!
> сам сделал DISC процессор
Вы имели ввиду RISC-V?
Сделали — HDL реализация на FPGA?
Если вы действительно разобрались, то открыты ли вы к вопросам? Как я писал в статье — порой квалифицировання консультация очень нужна.
Вы имели ввиду RISC-V?

Нет, это слишком трудозатратно. Я сделал свою, так сказать, defective instruction set computer архитектуру, которая даёт базовое понимание физики компьютера. Дальше делать смысла не увидел, ибо усложнение сути не меняет.

Сделали — HDL реализация на FPGA?

Сначала я сделал виртуалку, в которой существовали конденсаторы, транзисторы и прочие физические электрические элементы. Потом из них собрал процессор. Затем подключил виртуальную память и генератор. Далее написал ассемблер и транслятор для него. И всё это на C# (не портить же железо).

Часто оказывалось, что не до конца понятно как инструкция должна работать. К сожалению надежного товарища, которому можно было бы позвонить в 3 часа ночи и взволнованным голосом с придыханием спросить: «А знаешь, BLTU инструкция наверное по-другому signextend-ится...» — у меня нет.

Вы, конечно, можете меня спросить, но я отвечу что-то вроде: «У меня эта инструкция эквивалентна HALT.» Особенно, если учесть, что в виртуальной машине существование регистров и всего кэша теряет смысл))

Судя по вашему репозиторию, вы начали сразу с виртуализации процессора?
Sign up to leave a comment.

Articles