In reply to UVM_LOVE:
You absolutely can (and should) reuse a block-level environment in a system-level environment.
The function of an block-level environment is to verify that the functionality of the block using monitors, checkers and scoreboards. You want to encapsulate a block-level environment into your system-level environment so that you can reuse this verification capability.
The function of a test is to generate stimulus by running sequences on agent sequencers. With properly written block-level test sequences (using the RAL), these test sequences can easily be reused by the system-level environment.
Even if you change your stimulus approach by using a real CPU and code, you still make use of the functionality checking provided by the block-level environment.