DEC ALPHA description

David Hough sun!Eng!David.Hough
Tue Feb 25 10:47:55 PST 1992


Note no D format, no integer divide, double precision only,
no sqrt, no condition code register,
no multiplier extension register, imprecise traps, static mode bits ...
A mixture of good and bad ideas, but definitely significant.
 From comp.arch:

   ALPHA ARCHITECTURE TECHNICAL SUMMARY 
   Dick Sites, Rich Witek


   [NOTE: "Alpha" is an internal code name. An official name will be announced
    soon.]


   WHAT IS ALPHA?

   Alpha is a 64-bit RISC architecture, designed with particular emphasis on 
   speed, multiple instruction issue, multiple processors, software migration 
   from VAX VMS and MIPS ULTRIX, and long lifetime. The architects rejected 
   any feature that did not appear to be usable for at least 25 years.

   The first chip implementation runs at up to 200 MHz.  The speed of Alpha 
   implementations is expected to scale up from this by at least a factor of 
   1000 over the next 25 years. 

   FORMATS

   Data Formats

   Alpha is a load/store RISC architecture with all operations done between
   registers. Alpha has 32 integer registers and 32 floating registers, each
   64 bits. Integer register R31 and floating register F31 are always zero.
   Longword (32-bit) and quadword (64-bit) integers are supported. Four
   floating datatypes are supported: VAX F-float, VAX G-float, IEEE single
   (32-bit), and IEEE double (64-bit). Memory is accessed via 64-bit virtual
   little-endian byte addresses. 

   Instruction Formats

   Alpha instructions are all 32 bits, in four different instruction formats
   specifying 0, 1, 2, or 3 register fields. All formats have a 6-bit opcode. 

	   +-----+-------------------------+
	   | OP  |		number		| PALcall
	   +-----+----+--------------------+
	   | OP  | RA |	disp		| Branch
	   +-----+----+----+---------------+
	   | OP  | RA | RB |    disp	| Memory
	   +-----+----+----+----------+----+
	   | OP  | RA | RB |  func.   | RC	| Operate
	   +-----+----+----+----------+----+

   PALcalls specify one of a few dozen complex operations to be performed.

   Conditional branches test register RA and specify a signed 21-bit
   PC-relative longword target displacement. Subroutine calls put the return
   address in RA. 

   Loads and stores move longwords or quadwords between RA and memory, using 
   RB plus a signed 16-bit displacement as the memory address.

   Operates use source registers RA and RB, writing result register RC. There 
   is an extended opcode in the 11-bit function field. Integer operates can use 
   the RB field and part of the function field to specify an 8-bit 
   zero-extended literal.

   INSTRUCTIONS

   PALcall Instructions

   The Privileged Architecture Library call instructions specify one of a few
   dozen complex functions to be performed. These functions deal with
   interrupts and exceptions, task switching, virtual memory, and other
   complex operations that must be done atomically. PALcall instructions
   vector to a privileged library of software subroutines (using the same Alpha 
   instruction set) that implement an operating-system-specific set of these 
   complex operations. 

   Branch Instructions

   Conditional branch instructions can test a register for positive/negative
   or for zero/nonzero. They can also test integer registers for even/odd. 
   Unconditional branch instructions can write a return address into a 
   register. There is also a calculated jump instruction the branches to an 
   arbitrary 64-bit address in a register.

   Load/Store Instructions

   Load and store instructions can move either 32- or 64-bit aligned
   quantities. The VAX floating-point load/store instructions swap words to
   give a consistent register format for floats. Memory addresses are flat
   64-bit virtual addresses, with no segmentation. A 32-bit integer datum is
   placed in a register in a canonical form that makes 33 copies of the high
   bit of the datum. A 32-bit floating datum is placed in a register in a
   canonical form that extends the exponent by 3 bits and extends the fraction
   with 29 low-order zeros. 32-bit operates preserve these canonical forms. 

   There are no 8- or 16-bit load/store instructions, but there are facilities 
   for doing byte manipulation in registers.

   Alpha has no 32/64 mode bit or other such device. Compilers, as directed by 
   user declarations, can generate any mixture of 32- and 64-bit operations.

   Integer Operate Instructions

   The integer operate instructions manipulate full 64-bit values, and include
   the usual assortment of arithmetic, compare, logical, and shift
   instructions. There are just three 32-bit integer operates: add, subtract,
   and multiply. These differ from their 64-bit counterparts ONLY in overflow
   detection and in producing 32-bit canonical results. 

   There is no integer divide instruction.

   In addition to the operations found in conventional RISC architectures,
   there are scaled add/subtract for quick subscript calculation, 128-bit
   multiply for division by a constant and multiprecision arithmetic,
   conditional moves for avoiding branches, and an extensive set of
   in-register byte manipulation instructions for avoiding single-byte writes.

   Rather then keeping a global state bit for integer overflow trap enable,
   the enable is encoded in the function field of each instruction. Thus, both
   ADDQ/V and ADDQ opcodes exist for specifying 64-bit add with and without
   overflow checking. This makes pipelined implementations easier.

   Floating-point Operate Instructions

   The floating operate instructions include four complete sets of VAX and
   IEEE arithmetic, plus conversions between float and integer. 

   There is no floating square root instruction.

   In addition to the operations found in conventional RISC architectures, 
   there are conditional moves for avoiding branches, and merge sign/exponent 
   instructions for simple field manipulation.

   Rather then keeping global state bits for arithmetic trap enables and
   rounding mode, these enable and mode bits are encoded in the function field
   of each instruction. 


   SIGNIFICANT DIFFERENCES BETWEEN ALPHA AND CONVENTIONAL RISC PROCESSORS

   First, Alpha is a true 64-bit architecture, with a minimal number of 32-bit 
   instructions. It is not a 32-bit architecture that was later expanded to 64
   bits. 

   Second, Alpha was designed to allow very high-speed implementations. The
   instructions are very simple (no load-four-registers-unaligned-and-check-
   for-bytes-of-zero). There are no special registers that would prevent
   pipelining multiple instances of the same operations (no MQ register and no
   condition codes). The instructions interact with each other ONLY by one
   instruction writing a register or memory, and another one reading from the
   same place. This makes it particularly easy to build implementations that
   issue multiple instructions every CPU cycle. (The first implementation
   in fact issues two instructions every cycle.) There are no
   implementation-specific pipeline timing hazards, no load-delay slots, and
   no branch-delay slots. These features would make it difficult to maintain
   binary compatibility across multiple implementations and difficult to
   maintain full speed on multiple-issue implementations. 

   Alpha is unconventional in the approach to byte manipulation. Single-byte
   stores found in conventional RISC architectures force cache and memory
   implementations to include byte shift-and-mask logic, and sequencer logic
   to perform read-modify-write on memory words. This approach is awkward to
   implement quickly, and tends to slow down cache access to normal 32- or
   64-bit aligned quantities. It also makes it awkward to build a high-speed
   error-correcting write-back cache, which is often needed to keep a very
   fast RISC implementation busy. It also can make it difficult to pipeline
   multiple byte operations. 

   Instead, the byte shifting and masking is done in Alpha with normal 64-bit
   register-to-register instructions, crafted to keep the sequences short.

   Alpha is also unconventional in the approach to arithmetic traps. In
   contrast to conventional RISC architectures, Alpha arithmetic traps
   (overflow, underflow, etc.) are imprecise -- they can be delivered an
   arbitrary number of instructions after the instruction that triggered the
   trap, and traps from many different instructions can be reported at once.
   This makes implementations that use pipelining and multiple issue
   substantially easier to build. 

   If precise arithmetic exceptions are desired, trap barrier instructions can
   be explicitly inserted in the program to force traps to be delivered at
   specific points. 

   Alpha is also unconventional in the approach to multiprocessor shared
   memory. As viewed from a second processor (including an I/O device), a 
   sequence of reads and writes issued by one processor may be arbitrarily 
   reordered by an implementation. This allows implementations to use 
   multi-bank caches, bypassed write buffers, write merging, pipelined writes 
   with retry on error, etc. If strict ordering between two accesses must be
   maintained, memory barrier instructions can be explicitly inserted in the
   program. 

   The basic multiprocessor interlocking primitive is a RISC-style
   load_locked, modify, store_conditional sequence. If the sequence runs
   without interrupt, exception, or an interfering write from another
   processor, then the conditional store succeeds. Otherwise, the store fails
   and the program eventually must branch back and retry the sequence. This
   style of interlocking scales well with very fast caches, and makes Alpha an
   especially attractive architecture for building multiple-processor systems.

   Alpha includes a number of HINTS for implementations, all aimed at allowing 
   higher speed. Calculated jumps have a target hint that can allow much 
   faster subroutine calls and returns. There are prefetching hints for the 
   memory system that can allow much higher cache hit rates. There are also
   granularity hints for the virtual-address mapping that can allow much more 
   effective use of translation lookaside buffers for big contiguous 
   structures.

   Alpha includes a very flexible privileged library of software for operating-
   system-specific operations, invoked with PALcalls. This library allows Alpha
   to run full VMS using one version of this software library that mirrors many
   of the VAX operating-system features, and to run OSF/1 using a different
   version that mirrors many of the MIPS operating-system features, and
   similarly for NT. Other versions could be tailored for real-time, teaching,
   etc. The PALcalls allow Alpha to run VMS with hardly more hardware than
   a a conventional RISC machine has (the PAL mode bit itself, plus 4 extra
   protection bits in each TB entry). This library makes Alpha an especially
   attractive architecture for multiple operating systems. 

   Finally, Alpha is not strongly biased toward only one or two programming 
   languages. It is an attractive architecture for compiling at least a dozen 
   different languages.


   SUMMARY

   Alpha is designed to be a leadership 64-bit architecture.

   --------------------
       Specifications (150MHz version).

       Process Technology          .75 micron CMOS 

       Cycle Time                   150 MHz (6.6 ns)

       Die Size                     13.9mm x 16.8mm

       Transistor Count             1.68 million

       Package                      431 pin PGA

       Number of Signal Pins        291

       Power Dissipation            23 W at 6.6 ns cycle

       Power Supply                 3.3 volts

       Clocking Input               300 MHz differential 

       On-chip D-cache              8 Kbyte, physical, direct-mapped,
				    write-through, 32-byte line, 32-byte fill

       On-chip I-cache              8 Kbyte, physical, direct-mapped,
				    32-byte line, 32-byte fill, 64 ASNs

       On-chip DTB                  32-entry; fully-associative; 8-Kbyte,
				    64-Kbyte, 256-Kbyte, 4-Mbyte page sizes

       On-chip ITB                  8-entry, fully associative, 8-Kbyte page
				    plus 4-entry, fully-associative, 4-Mbyte page

       Floating Point Unit          On-chip FPU supports both IEEE and VAX
				    floating point

       Bus                          Separate data and address bus.
				    128-bit/64-bit data bus

       Serial ROM Interface         Allows the chip to directly
				    access serial ROM

       Virtual Address Size         64 bits checked; 43 bits
				    implemented

       Physical Address Size        34 bits implemented

       Page Size                    8 Kbytes

       Issue Rate                   2 instructions per cycle to A-box,
				    E-box, or F-box

       Integer Pipeline             7-stage pipeline

       Floating Pipeline            10-stage pipeline



More information about the Numeric-interest mailing list