Недавно начал осваивать ПЛИС, и потихоньку добрался до имплементации простенького софт процессора.
Остановился на лэттисовском Mico8, как наиболее доступном, как мне показалось.
Несколько удивил некоторый аскетизм среды разработки, в том смысле, что по умолчанию я не нашёл возможности посмотреть получившийся код, который будет исполнять процессор.
Так ещё до кучи оказалось, что и отладка JTAG для Мико8 отсутствует как класс.
В общем - чёрный ящичек такой, никому не покажу, что и как

Порылся в доках (с компилятором GCC я практически не знаком) и нашёл таки, как включить файл карты памяти линкера (опция -Map) и ассемблерных файлов, которые генерирует компилятор (опция -save-temps).
Стало немного понятно, как выглядит код и чем будет заниматься процессор.
Ещё научился запускать утилиту objdump.exe, с помощью которой можно дизассемблировать исполняемый файл проекта целиком и увидеть машинные коды полностью вместе с библиотечными функциями.
Правда, без библиотек Cygwin эта утилита не запускается, пришлось закинуть её в директорию Cygwin... а причём тут последний, зачем он мне нужен под Windows, не понимаю?
Это что получается, компилятор и все его утилиты работают под эмулятором?
В общем, кривенько как то все выходит, может, я что-то не так делаю?
Обычно в средах разработки все эти фишки включаются парой галочек в настройках графического интерфейса, и нет надобности лезть глубже...
Ещё пара не очень приятных впечатлений.
У процессора отсутствуют коды команд нецикличного сдвига битов.
Соостветственно для выполнения операций сдвига >> и << (даже на единичку) генерируются вызовы функций, где операция выполняется в цикле с помощью команд цикличного сдвига.
Неужели не хватило места для имплементации простейшего сдвига?
Стек прерываний почему то у процессора отдельный от общего стека. Причём нигде не нашёл задание его размера.
К примеру, при выборе средней модели памяти (64к) стек прерываний задаётся равным 512 байтам, и точка.
Кто так решил, и почему я должен отводить под него львиную долю памяти?
Слава богу, что есть галочка MICO_NO_INTERRUPTS, где вместе с прерываниями удаляется и этот стек...
