[Какой софткор нам нужен]? Размышлизма по причине достижения -> предела софткоростроения. Неплохая статья по теме гибридных стеково-регистровых процессоров --> http://caxapa.ru/836115.html
http://caxapa.ru/836111.html
Исключения
На практике могут быть любые, самые невероятные извращения, которые делают неприменимыми все описанные мною мысли.
Зачем нам нужен софткор?
Он нужен, чтобы сэкономить ресурсы на программировании гигантских не очень быстрых конечных автоматов в FPGA. Например, 1Г Ethernet - это 200к пакетов в секунду по 512 байт [грубая прикидка]. И для 50 MIPS софткора у нас будет 250 32 битных операций на обработку этого пакета. Не так и сложно успеть. А вот КА для обработки пакета - это монстр!
Софткор нам нужен, чтобы управлять чем-то.
Что софткор не должен делать?
Софткор не должен проводить массивные вычисления самостоятельно. Он может управлять вычислительнымп блоком, но не сам проводить вычисления. Аппаратные умножение и деление стоит оставить для удобства программиста. Никакой плавучки!
Linux на софткоре - это эпическая глупостью. Одно время это было очень продвигаемым решением, но увы - это время закончилось. Для этого есть FPGA со встроенными железными ядрами. "Linux микросхема за $16" http://caxapa.ru/686130.html сделает это сильно быстрее и сильно-сильно дешевле.
Каким должен быть софткор
Event-система.
Мы засунули софткор внутрь чипа потому, что нам надо быстро, и внешний MCU черех SPI не успевает? Значит, нужна система событий.
Во многих современных MCU она есть, но в программируемом варианте это достаточно сложная вещь, по сути специализированная FPGA внутри MCU. Если на этапе синтеза FPGA мы пропишем все связи, то ресрурсов надо будет очень немного.
Быстрая работа с прерываниями.
Раз нам надо быстро, то и прерывания должны быть очень быстрыми.
Безрегистровая архитектура - самое то. Нет нужды сохранять контекст по причине его отсуствия.
Быстрая IO шина - идеи Cortex-M0+
Нужны команды прямой работы с виртуальными регистрами, которые отображены на отдельную IO шину. Чтобы не "считать содержимое регистра, наложить маску, понять, что там творится", а чтобы был некий виртуальный регистр (несколько штук - единицы), с содержимым которого софткор работал бы за 1 такт. В том числе переходы. Еще раз - таких регистров буквально 1-2. Могут сильно ускорить реальные задачи.
Asm программизм.
Эта часть сильно отличается от общепринятой традиции. Чистое IMHO.
Наш кастомный процессор управляет кастомной периферией - готовых либ не будет. Так что совместимость нас заботит не очень сильно.
Пусть у нас есть безрегистровое ядро, в которого ALU делает все операции над 32 битными числами. Кроме плавучки.
Если писать в нормальной IDE, с человеческими именами переменных и визуализатором стека, то будет эффективно.
http://caxapa.ru/836111.html