Концептуальная проблема с микропроцессором гарвардской архитектуры и размещением таблицы переходов GCC

Я разрабатываю конвейерный микропроцессор NIOS2 (часть экосистемы Intel FPGA) с нуля в качестве обучающего упражнения. Это процессор с гарвардской архитектурой с отдельными шинами памяти команд и данных.

Когда я компилирую оператор case на C, GCC создает таблицу переходов и помещает ее непосредственно рядом с остальной исполняемой частью кода. Это создает проблему, потому что процессор загружает значения таблицы переходов через шину памяти данных, которая не связана с памятью программ.

На практике я знаю, что отдельные шины памяти подключены через иерархию кеша, но у меня нет кеша, и я поддерживал строгое разделение между двумя шинами.

В качестве обходного пути я сделал программную память двухпортовой и подключил к ней обе шины, но это не похоже на правильное решение.

Есть ли способ заставить GCC разделить таблицу переходов и исполняемый код на разные разделы? Если нет, должно быть? Как правильно думать об этой проблеме?

0 ответов

Другие вопросы по тегам