STM32 documentation says that the I-CODE and D-CODE buses are connected to the internal flash memory. The I-CODE bus is used to fetch instructions and the D-CODE bus is used for data access in the code memory region (literal load).
The question is why two separate buses are used? Can they provide simultaneous and absolutely independent access to flash memory?
As you can see from the stm32 RM0090 Reference manual (page 73), I-CODE and D-CODE busses cannot access the flash memory independently, they do however access the flash interface independently:
As to why there are two: they have separate chaches, also the I-CODE bus implements prefetch, which would be useless for data fetching. Relevant part of the reference manual (page 84):