Обновить
Комментарии 14
Спасибо, отличная статья!
… и начинать пилить бэкенд для llvm.
Мне вот этот этап всегда казался самым сложным.
Я вот тоже совсем не уверен что удастся осилить.
Сомнительная простота с двухпортовым ОЗУ и Lua. На мой взгляд, лучше все же начать изучение с действительно простых примеров, например MCPU. В качестве ассемблера там используется Symbolic Macro Assembly Language
В любой FPGA найти двух портовую память как раз не проблема, куда проще чем приделывать любую обычную память к мелкой CPLD снаружи, так что с простотой там тоже не всё так однозначно, и в качестве ассемблера там тоже есть такой же велосипед, только страшненький и на питоне jeelabs.org/2017/11/tfoc---a-minimal-computer
Для того чтобы допилить SMLA для данного процессора двадцатью строчками думаю не обойтись. Ну и с Lua, как мне кажется, получилось красиво, особенно то, что сама программа на ассемблере остаётся валидным кодом на Lua, со всеми её плюшками для препроцессора/макросов забесплатно.
Цель же была не в изучении, для этого есть MIPS и RISC-V, а в велосипедостроении.
В очередной раз просто по другому упаковывать различные операции в биты команд не так интересно, таких процессоров действительно полно.
Тут же полагаю основная фича в простой расширяемости, а если максимально упаковать пяток инструкций в минимальное количество бит в инструкции, получив железный аналог brainfuck, добавить туда что-то будет сложно. Но за это, правда, приходится платить размером инструкций/кода особенно для разрядностей больше 8.
Quartus Prime Version 18.1.0 Build 625 09/12/2018 SJ Lite Edition
Revision Name cpu
Top-level Entity Name cpu
Family Cyclone 10 LP
Device 10CL006YE144C8G
Timing Models Final
Total logic elements 91 / 6,272 ( 1 % )
Total registers 24
Total pins 10 / 89 ( 11 % )
Total virtual pins 0
Total memory bits 6,144 / 276,480 ( 2 % )
Embedded Multiplier 9-bit elements 0 / 30 ( 0 % )
Total PLLs 0 / 2 ( 0 % )
Шикарно! ) Можно попросить попробовать переключить проект на микросхему MAX240? Я, правда, не помню, двухпортовая ли там память.
Насколько помню — нету там памяти, только флэша немного.
Причём пользовательская флэш у epm240 — последовательная, с максимальной частотой 8МГц, то есть ROM из неё конечно можно сделать, но с частотой выборки 16ти битных слов 512кГц, а двухпортовой «памяти» данных на триггерах получится байт 20.
То есть упихать-то можно конечно, но что-то совсем уж какой-то «троллейбус из буханки белого (или черного) хлеба.jpg» получается.
Насчёт 20 байт памяти это я погорячился, если убрать регистр вычитания, чтение PC и порта, т.е. assign data = data_r; и оставить только 8 байт памяти, получается
Device EPM240T100C5
Total logic elements 236 / 240 ( 98 % )
почему-то не очень хорошо получается память из логики в CPLD, да и «параллельный» флэш из последовательного UFM тоже не бесплатно.
Он же вместо памяти делает регистры, если её нет. А если нет двухпортовой памяти — делает два регистра? )
Да вроде как у D триггера и так есть вход D и выход Q, поэтому для двухпортовой памяти у которой один порт на чтение, а другой на запись ничего больше и не надо.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.