Комментарии 12
По идее (раз скорость режет ожидание flash), «полноценных» 48МГц можно достичь при исполнении из RAM. Применимость в целом так себе, но в каких-то случаях вынести туда критический код может и помочь.
Проверять не хочу, но там может вылезти другая проблема - Гарвардская архитектура. Сейчас шины должны работать в параллель. Флэшка для кода, ОЗУ для данных. Так - будут задержки из-за двойного использования шины ОЗУ для кода/данных.
Но я проверял только те режимы, которыми собираюсь пользоваться, а уж проверку этого дела оставим тем, кто решит использовать этот вариант. Но на Cortex M при исполнении из ОЗУ этот эффект точно возникает.
Другой вопрос, как быть с предсказателями ветвлений, если они не могут предсказать безусловный переход?
Подскажите, осциллограммы строились на первой итерации цикла или нет? По идее, на первой итерации у предсказателя должна быть осечка, ведь он ещё не встречался с этим циклом, ещё не обучен.
Уже на устоявшемся цикле. Сначала стартовал код, потом я выставлял картинку поэффектнее, уже затем останавливал развёртку осциллографа.
А вот тут ещё вопрос, что вообще имеется в виду под предсказателем в данной реализации? А то при общей невнятности документации может оказаться простым «все переходы назад - вероятны, вперёд - нет».
На скрине в статье видны BTB, BHT, RAS -- это механизмы Branch Target Buffer, Branch History Table и Return Address Stack. Конкретно в этом куске кода наверно отыграет branch target buffer -- фактически маленькая ассоциативная память (кэшик), которая по program counter выдаёт сохраненный ранее адрес перехода.
Полезная статья. Надо будет свой msp430fr5939 протестировать (да, там не заявлено прямым текстом об "улучшайзерах", но мало ли).
Крутая и глубокая статья, спасибо. Столько интересной информации из простого ногодрыга👍👍
Стало крайне интересно как будет работать ch32l103
Ядро и память те же, а вот частота 96 МГц. Возможно и вам он будет интереснее, по цене схожи
Очевидно, что доступ к flash памяти вызывает простой конвейера. Чтобы нивилировать тормознутость флэша в ядро добавляют кэш инструкций. Есть ли такой кэш в этом китайском МК и какого объема ?
Я работаю со своей синтезируемой СнК (RV32IMFAC). Частота ядра - 60 МГц. Внутренняя шина - AXI4. При исполнении программы из внешней NOR Flash памяти (QSPI) производительность падает на 30%, хотя доступ к памяти в 4 раза медленее и возможен только блоком. I$ размером всего 2 кБ весьма неплохо "сглаживает" тормознутость флэша.
Рассматриваем циклы процессора в контроллере CH32x035