Современные CISC-процессоры обладают раздельной кэш-памятью 1-го уровня для команд и данных, что позволяет им за один рабочий такт получать одновременно и команду, и данные для её выполнения. То есть процессорное ядро аппаратно гарвардское, но программно оно фон-неймановское, что упрощает написание программ.
к примеру в CISC допустима аппаратная команда умножения, которые декодером команд процессора превращается в большую последовательность сложений и сдвигов, занимающие подсистемы проца на множество тактов.
в RISC такой аппаратной команды в принципе не может быть. и компилятор преобразует команду умножения в набор RISC команд сложений и сдвигов еще на этапе создания двоичной исполняемой последовательности.
т.е. в принципе тоже самая последовательность действий что и в CISC, но записана отдельными командами в двоичном коде.
в современных контроллерах нет разделения на память команд и память данных. адресное пространство едино. все виды памяти: flash, ram, eeprom, размещены в одном и том же адресном пространстве. туда же выведены все интерфейсы остальных аппаратных модулей и т.д.
и ROM вполне себе используется для хранения данных. к примеру статически заложенных при компиляции проги строк, таблиц данных и т.д.
и RAM вполне себе может использоваться для хранения кода програм.
кажись в старших PIC так организуется возможность удаленной перепрошивки boot-rom (могу ошибаться давно это читал.)