Я там только АЛУ начинал строить. Забросил на моменте, когда понял, что будет куча «копипаста» вручную по одному блоку. Хотя, проблему копипаста можно решить через моды админки.
Бибило П.Н. — Основы языка VHDL (поможет разобраться с синтаксисом.)
Лично мне понравился Pong P. Chu:
1)RTL Hardware Design Using VHDL
2)FPGA Prototyping by VHDL Examples
Целью статьи было показать, что процессор можно написать самому
Совершенно не знаком с разработкой чипов, потому есть нубский вопрос: а что должно получиться в результате написания процессора? Его топография, которую сдают «китайцам» и они штампуют процессоры?
P.S. Помнится сильно мечтал в детстве о процессоре с двумя аппаратными стеками как раз для реализации Forth-машины — очень тогда Forth-понравился.
VHDL-код (если он удовлетворяет критерию «синтезируемости») в конечном итоге может быть преобразован в принципиальную схему, где будут триггеры и логические элементы, а из этой схемы можно уже сделать топологию кристалла, то есть расположить на кристалле элементарные ячейки и нарисовать разводку между ними.
Заметил у вас синхронный сброс, хорошо что вы знакомы с xilinx recommendation.
Чтобы развить идея остаётся добавить прерывания, перейти на популярную шину (к примеру Wishbone), добавить контроллер динамической памяти и дельной периферии. А там уже и не далеко портировать ОС реального времени.
А что, если выборку делать по фронту, а исполнение по спаду? Тогда будет один такт на команду вместо двух.
Говорят, еще иногда юзают смещенные по фазе тактовые сигналы (одной и той же частоты), чтобы получить подтакты, но в реальности с таким я не сталкивался.
Ну, чем выше частота, тем ярче проявляются неприятные ВЧ эффекты, вроде как… К тому же если и так умножитель уже использован внутренний, то придетется искать соответствующие кварцы (в два раза более высокой частоты) — думаю, все таки может быть оправдано.
С точки зрения схемы что выборки делать в 2 раза чаще, что частоту повышать в два раза: все это приводит к одному — уменьшению вдвое временных ограничений. За этим следить надо. По идее, конечно, это САПР должна все разводить, но практика показывает что не всегда это делается хорошо.
Дописал загрузчик, теперь я уверен, что он из процессора точно ничего не выкидывает при трансляции проекта: Финальный отчет
Заодно отвечу на комментарий:
Сколько MIPS и на какой частоте заработает на вашей FPGA?
Проваленная временная константа — это из-за высокой заданой частоты на входе. При заданой частоте в 50МГц (стандартная для стартер кита для Spartan3E) он[транслятор ISE :)] не особо старается упаковывать проект и максимально возможную частоту работы не показывает.
Максимальная частота работы получилась 79.5Мгц для кристала Spartan3E xc3s500. Самая длинная линия на умножителе. Следом за ней идут линии на сумматоре и компараторе.
Простор для оптимизации есть — сейчас процессор такт выборки команды просто простаивает, в этот такт можно вынести какие-либо предварительные вычисления.
MIPS будет в 2 раза ниже частоты, на которой работает процессор.
Forth-процессор на VHDL