Instruction fetch: In each cycle, the IF tries to fetch a new instruction package from the memory interface. Each instruction package consists of four bytes. Because of the variable length of bytecode, each package contains up to four bytecodes.
Instruction decode: The decoding of instructions starts after writing a received instruction package in the corresponding IW. Only 3 bytes are necessary for decoding; longer bytecodes are executed by trap routines, which read the parameters directly from the memory. The decoding results in a hardware instruction or it starts a sequence of microcodes. After decoding, the bytes needed by the actual instruction are deleted from the IW.
Operand fetch: This pipeline stage reads the operands needed by the actual operation from the stack. Because of the stack architecture of Java, a lot of data dependencies occur. To manage this problem without adding latencies, the data received from the execution stage is passed through the stack without any time loss.
Execution, Memory and I/O access: The execution stage is responsible for all instructions except of load/store instructions. The execution stage uses the given
operands for executing the operation submitted by the decode stage. In case of a load/store instruction, the memory is addressed by one of the operands. Address calculation is made by software.