Thanks for the response! From this information I gather that it would not help my application speed much to attempt to move some code to the ITCM. But I am still unsure how it is done in practice. Is this correct:
The ITCM is simply a different bus that can be used to access the entire internal flash. When used, it can use the ART (if enabled) whereas the standard AXIM bus can use the processor L1 cache. ITCM also allows access to the ITCM RAM.
I am unsure how you would actually use code over the ITCM bus. It seems to me that the code will all be in the flash memory anyway, and the way it works now is that the code starts at 0x08000000 and the processor boots and runs from 0x00000000 which is aliased to 0x08000000 and will use the AXIM bus. How can you specify to run functions over the ITCM bus? Also, it seems like you should be able to load some functions into the ITCM RAM and run them from there over the ITCM bus.
The application note you linked to has examples for what looks like every possible combination of code and data placements. I’m going to check out the example, I’m just realizing now that it is posted under a different branch of the Cube package: X-CUBE-32F7PERF. Hopefully this explains further for me! Thanks again.