depends on the scope. to do it properly and without any requirements, you need *everything*.
if you have a program in mind, and want to run it on a virtual CPU from some other platform, you only need the features used by the program.
and by everything, you need to emulate its cache, ram and memory behavior, and possibly other hardware that the cpu interfaces to directly. You will need a clock and IIRC it may have variable settings for low power mode (???).