For simulation, we ran under Synopsis's Cyclone product. I helped develop and later assumed the maintenance of a software debug environment written in Tcl/Tk. The debug environment provided the usual sorts of things that programmers want which ASIC engineers don't care much about -- a nice display of the processors registers, PC, current instruction, memory in both raw and disassembled forms. I used this environment for initial debug of the diagnostics (and of course found some bugs in the process).
For emulation, we used a Cadence Quickturn Cobalt box. I ported our debug environment to the emulator, and later adapted it for a different ASIC also under emulation. Under emulation we were able to run vastly more cycles than we had been able to under simulation. This a gave us the ability to run a significant portion of our embedded kernel. I did the work to run the kernel through selected portions of the boot sequence and up to its main event loop.
In bringup, our model was that all the engineers were out on the floor together. The board designers did some of the initial testing on their own. As soon as it made any sense at all, boards were given to the rest of the lab stations where one ASIC designer and either a software or diagnostics engineer would sit together to shoot the next problem. In a system that was 50/50 hardware/software, that model worked well.