Content area
Full Text
Because of the complex architecture of the zSeries® processors, an internal code, called millicode, is used to implement many of the functions provided by these systems. While the hardware can execute many of the logically less complex and high-performance instructions, millicode is required to implement the more complex instructions, as well as to provide additional support functions related primarily to the central processor. This paper is a review of millicode on previous zSeries CMOS systems and also describes enhancements made to the z990 system for processing of the millicode. It specifically discusses the flexibility millicode provides to the z990 system.
Introduction
As the instruction set for high-end processors has evolved over the years, more and more complex instructions and features have been added to the architecture. Conceptually more straightforward instructions, such as loads, stores, moves, branches, and logical and arithmetic instructions, can be implemented directly by the hardware. The more complex instructions and features, such as I/O instructions, Start Interpretive Execution (SIE), crossmemory instructions, interruption handlers, resets, and certain RAS (reliability, availability, and serviceability) features, must be implemented with some type of internal code. Starting with the S/390* G4 [1] processor in 1997 and continuing through the G5 [2, 3], G6 [3], z900 [4], and now the z990 [5] processors, the code internal to the central processor (CP) is called millicode.
On many processors prior to G4, which were implemented using multiple chips in bipolar technology, the internal code was placed on separate chips of the processor; this is known as horizontal microcode. With the G4 system, the entire processor was implemented on one chip. Because of the area constraints of the chip, a redesign of the internal code of the processor was required, since it would no longer fit on the chip, and, with new requirements being architected and designed for high-end systems, even more processor internal code would be needed. This led to the design of vertical millicode as the internal code of the processor. The millicode is written in assembler language, primarily with z/Architecture* [6] instructions, as well as with specialized millicode-only instructions.
One of the main objectives in designing the hardware to support millicode was to provide additional flexibility to the machine. Various features in the hardware were defined early...