Emulation - a useful tool in the development of computer systems
Authors: F. A. Salomon, D. A. Tafuri
Venue: Proceedings of the 15th annual symposium on Simulation (1982)

Emulation is playing a key role in the development of a BELLMAC-32A microprocessor-based computer system at Bell Telephone Laboratories. The emulation is used for the development of the operating system for the new computer system to permit both hardware and software development to proceed in parallel. The emulation's goal is to permit the operating system to be developed before the hardware is available. This is aimed at reducing the time and effort required in the hardware/software integration interval to permit a more rapid introduction of a computer system - both hardware and operating system. Emulation is one of several software/hardware models being used in the development of the computer system. There are also functional, gate-level, manufacturing-model simulations used in the development of the BELLMAC-32A microprocessor. Several steps are used in verifying the emulation as well as cross-verification of the BELLMAC-32A microprocessor portion of the different models. Both the BELLMAC-32A microprocessor and the computer system were emulated. The emulation model includes an emulation of the memory mapping, interrupt structure, memory management and peripherals of the real processor. It is an instruction-level compatible emulation that provides high throughput for software debugging. Since the bit layouts of the software that runs on the emulation and the real machine are identical, code that runs on the emulation will run on the real machine except for time dependent code. Since the emulator is a form of software, it can be instrumented for additional debugging capabilities. The emulator went through a rigorous development methodology of requirements, design, implementation and testing phases. Each phase had reviews and/or walk-throughs. Further, the testing phase was done by personnel other than the emulator developers to ensure that the product met external specifications as seen by the customers of the emulation. The emulator development environment includes both microcode development tools and lab environment debugging tools. Both sets of tools run on the UNIX [1] operating system. The microcode development tools include an assembler, pre- and post-processors for generation of microcode, and a microcode simulator for testing the microcode. Both a pre- and post-processor were developed to aid in generating microcode for the emulator developers. Additional pre-processors were taken from other standard UNIX software to further aid the developers with conditional assemblies and symbolic references. The lab environment for the emulation makes use of a UNIX software based front-end lab support processor that interfaces to the emulation processor. A powerful debugging tool is available to the emulator developers on the front-end processor to permit single stepping at both the micro and macro level, display and modification of internal registers, give microinstruction traces, provide breakpointing capabilities, provide microcode and object code download capabilities and to maintain control of the emulation machine.