Much of the material in this chapter was leveraged from L. Spracklen and
S. G. Abraham, “Chip Multithreading: Opportunities and Challenges,” in
11th International Symposium on High-Performance Computer
Over the last few decades microprocessor performance has increased
next. Semiconductor technology has been the main driver for this
today’s multi-GHz frequencies. In addition to these frequency increases,
each new technology generation has essentially doubled the number of
available transistors. As a result, architects have been able to aggressively
chase increased single-threaded performance by using a range of
expensive microarchitectural techniques, such as, superscalar issue, out-
of-order issue, on-chip caching, and deep pipelines supported by
memory wall, and ever-increasing difficulties in extracting further
instruction-level parallelism (ILP), are all conspiring to limit the
performance of individual processors in the future. While recent attempts
at improving single-thread performance through even deeper pipelines
have led to impressive clock frequencies, these clock frequencies have
not translated into significantly better performance in comparison with
less aggressive designs. As a result, microprocessor frequency, which
2 Chapter 1 Introducing Chip Multithreaded (CMT) Processors
This combination of the limited realizable ILP, practical limits to pipelining,
cores. Accordingly, processor designers are searching for new ways to
The techniques being embraced across the microprocessor industry are chip
multiprocessors (CMPs) and chip multithreaded (CMT) processors. CMP, as
the name implies, is simply a group of processors integrated onto the same
chip. The individual processors typically have comparable performance to
their single-core brethren, but for workloads with sufficient thread-level
be many times that delivered by a single-core processor. Most current
Moving beyond these simple CMP processors, chip multithreaded (CMT)
processors go one step further and support many simultaneous hardware
strands (or threads) of execution per core by simultaneous multithreading
(SMT) techniques. SMT effectively combats increasing latencies by enabling
execution resources. With each strand spending a significant portion of time
stalled waiting for off-chip misses to complete, each strand’s utilization of the
core’s execution resources is extremely low. SMT improves the utilization of
Similarly, as with CMP, multiple cores can share chip resources such as the
memory controller, off-chip bandwidth, and the level-2/level-3 cache,
spaces. For instance, in the commercial space, server workloads are broadly
characterized by high levels of TLP, low ILP, and large working sets. The
potential for further improvements in overall single-thread performance is
increases in memory latency. However, typical server applications
client. Furthermore, these processes are currently multithreaded to hide disk
access latencies. This structure leads to high levels of TLP. Thus, it is
extremely attractive to couple the high TLP in the application domain with
Evolution of CMTs 3
Though the arguments for CMT processors are often made in the context of
significant role. New memory technologies, such as fully buffered DIMMs
(FBDs), have higher bandwidths (for example, 60 GB/s/chip), as well as
higher latencies (for example, 130 ns), pushing up their bandwidth-delay
product to 60 GB/s × 130 ns = 7800 bytes. The processor chip’s pins represent
line size of 64 bytes), the processor chip must sustain 7800/64 or over 100
parallel requests. To put this in perspective, a single strand on an aggressive
out-of-order processor core generates less than two parallel requests on typical
Finally, power considerations also favor CMT processors. Given the almost
drops dramatically with reductions in frequency. As a result, for workloads
delivers roughly equivalent performance while reducing power consumption
Given the exponential growth in transistors per chip over time, a rule of
thumb is that a board design becomes a chip design in ten years or less. Thus,
most industry observers expected that chip-level multiprocessing would
eventually become a dominant design trend. The case for a single-chip
multiprocessor was presented as early as 1996 by Kunle Olukotun’s team at
Stanford University. Their Stanford Hydra CMP processor design called for
the integration of four MIPS-based processors on a single chip. A DEC/
and a two-level cache hierarchy on a single chip (code-named Piranha) and
processor designers as a result of the rapidly increasing clock frequencies
required to improve single-thread performance. In response, Sun defined the
MAJC architecture to target thread-level parallelism. Providing well-defined
first step toward general-purpose CMT processors. Shortly after publishing
the MAJC architecture, Sun announced its first MAJC-compliant processor
(MAJC-5200), a dual-core CMT processor with cores sharing an L1 data
4 Chapter 1 Introducing Chip Multithreaded (CMT) Processors
point. In 2003, Sun announced two CMP SPARC processors: Gemini, a dual-
core UltraSPARC II derivative; and UltraSPARC IV. These first-generation
cores did not share any resources other than off-chip datapaths. In most CMP
designs, it is preferable to share the outermost caches, because doing so
localizes coherency traffic between the strands and optimizes inter-strand
communication in the chip—allowing very fine-grained thread interaction
(microparallelism). In 2003, Sun also announced its second-generation CMP
which the on-chip L2 and off-chip L3 caches are shared between the two
In 2006, Sun introduced a 32-way CMT SPARC processor, called
for a CMT design point. UltraSPARC T1 has eight cores; each core is a four-
way SMT with its own private L1 caches. All eight cores share a 3-Mbyte, 12-
way level-2 cache,. Since UltraSPARC T1 is targeted at commercial server
workloads with high TLP, low ILP, and large working sets, the ability to
overall performance. Thus, to accommodate eight cores, each core supports
Sun’s most recent CMT processor is the UltraSPARC T2 processor. The
processor (eight threads per core), as well as improved single-thread
performance, additional level-2 cache resources (increased size and
Sun’s move toward the CMT design has been mirrored throughout industry. In
2001, IBM introduced the dual-core POWER-4 processor and recently
released second-generation CMT processors, the POWER-5 and POWER-6
processors, in which each core supports 2-way SMT. While this fundamental
shift in processor design was initially confined to the high-end server
processors, where the target workloads are the most thread-rich, this change
has recently begun to spread to desktop processors. AMD and Intel have also
subsequently released multicore CMP processors, starting with dual-core
CMPs and more recently quad-core CMP processors. Further, Intel has
announced that its next-generation quad-core processors will support 2-way
core offerings. Similar to the CISC-to-RISC shift that enabled an entire
Future CMT Designs 5
pipeline stages to within a chip, the move to CMT represents a fundamental
doubles the transistor budget. Little design effort is expended on the cores,
and performance is almost doubled every process generation on workloads
with sufficient TLP. Though reusing existing core designs is an attractive
option, this approach may not scale well beyond a couple of process
generations. Processor designs are already pushing the limits of power
dissipation. For the total power consumption to be restrained, the power
dissipation of each core must be halved in each generation. In the past, supply
voltage scaling delivered most of the required power reduction, but
indications are that voltage scaling will not be sufficient by itself. Though
well-known techniques, such as clock gating and frequency scaling, may be
quite effective in the short term, more research is needed to develop low-
Further, given the significant area cost associated with high-performance
cores, for a fixed area and power budget, the CMP design choice is between a
small number of high-performance (high frequency, aggressive out-of-order,
large issue width) cores or multiple simple (low frequency, in-order, limited
issue width) cores. For workloads with sufficient TLP, the simpler core
solution may deliver superior chipwide performance at a fraction of the power.
However, for applications with limited TLP, unless speculative parallelism can
be exploited, CMT performance will be poor. One possible solution is to
support heterogeneous cores, potentially providing multiple simple cores for
thread-rich workloads and a single more complex core to provide robust
performance for single-threaded applications.
Another interesting opportunity for CMT processors is support for on-chip
hardware accelerators. Hardware accelerators improve performance on certain
specialized tasks and off-load work from the general-purpose processor.
Additionally, on-chip hardware accelerators may be an order of magnitude
more power efficient than the general-purpose processor and may be
significantly more efficient than off-chip accelerators (for example,
eliminating the off-chip traffic required to communicate to an off-chip
accelerator). Although high cost and low utilization typically make on-chip
hardware accelerators unattractive for traditional processors, the cost of an
accelerator can be amortized over many strands, thanks to the high degree of
resource sharing associated with CMTs. While a wide variety of hardware
----------------------- Page 25-----------------------
accelerators can be envisaged, emerging trends make an extremely compelling
case for supporting on-chip network off-load engines and cryptographic
accelerators. The future processors will afford opportunities for accelerating
other functionality. For instance, with the increasing usage of XML-formatted
data, it may become attractive to have hardware support XML parsing and
processing.
Finally, for the same amount of off-chip bandwidth to be maintained per core,
the total off-chip bandwidth for the processor chip must also double every
process generation. Processor designers can meet the bandwidth need by
adding more pins or increasing the bandwidth per pin. However, the
maximum number of pins per package is only increasing at a rate of 10
percent per generation. Further packaging costs per pin are barely going down
with each new generation and increase significantly with pin count. As a
result, efforts have recently focused on increasing the per-pin bandwidth by
innovations in the processor chip to DRAM memory interconnect through
technologies such as double data rate and fully buffered DIMMs. Additional
benefits can be obtained by doing more with the available bandwidth; for
instance, by compressing off-chip traffic or exploiting silentness to minimize
the bandwidth required to perform write-back operations. Compression of the
on-chip caches themselves can also improve performance, but the (significant)
additional latency that is introduced as a result of the decompression overhead
must be carefully balanced against the benefits of the reduced miss rate,
favoring adaptive compression strategies.
As a result, going forward we are likely to see an ever-increasing proportion
of CMT processors designed from the ground-up in order to deliver ever-
increasing performance while satisfying these power and bandwidth
constraints.
----------------------- Page 26-----------------------
CHAPTER 2
OpenSPARC Designs
Sun Microsystems began shipping the UltraSPARC T1 chip
multithreaded (CMT) processor in December 2005. Sun surprised the
industry by announcing that it would not only ship the processor but also
open-source that processor—a first in the industry. By March 2006,
UltraSPARC T1 had been open-sourced in a distribution called
OpenSPARC T1, available on http://OpenSPARC.net.
In 2007, Sun began shipping its newer, more advanced UltraSPARC T2
processor, and open-sourced the bulk of that design as OpenSPARC T2.
The “source code” for both designs offered on OpenSPARC.net is
comprehensive, including not just millions of lines of the hardware
description language (Verilog, a form of “register transfer logic”—RTL)
for these microprocessors, but also scripts to compile (“synthesize”) that
source code into hardware implementations, source code of processor and
full-system simulators, prepackaged operating system images to boot on
the simulators, source code to the Hypervisor software layer, a large suite
of verification software, and thousands of pages of architecture and
implementation specification documents.
This book is intended as a “getting started” companion to both
OpenSPARC T1 and OpenSPARC T2. In this chapter, we begin that
association by addressing this question: Now that Sun has open-sourced
OpenSPARC T1 and T2, what can they be used for?
One thing is certain: the real-world uses to which OpenSPARC will be
put will be infinitely more diverse and interesting than anything that
could be suggested in this book! Nonetheless, this short chapter offers a
few ideas, in the hope that they will stimulate even more creative
thinking …
7
----------------------- Page 27-----------------------
8 Chapter 2 OpenSPARC Designs
2.1 Academic Uses for OpenSPARC
The utility of OpenSPARC in academia is limited only by students’
imaginations.
The most common academic use of OpenSPARC to date is as a complete
example processor architecture and/or implementation. It can be used in
coursework areas such as computer architecture, VLSI design, compiler code
generation/optimization, and general computer engineering.
In university lab courses, OpenSPARC provides a design that can be used as a
known-good starting point for assigned projects.
OpenSPARC can be used as a basis for compiler research, such as for code
generation/optimization for highly threaded target processors or for
experimenting with instruction set changes and additions.
OpenSPARC is already in use in multiple FPGA-based projects at universities.
For more information, visit:
http://www.opensparc.net/fpga/index.html
For more information on programs supporting academic use of OpenSPARC,
including availability of the Xilinx OpenSPARC FPGA Board, visit web page:
http://www.OpenSPARC.net/edu/university-program.html
Specific questions about university programs can be posted on the
OpenSPARC general forum at:
http://forums.sun.com/forum.jspa?forumID=837
or emailed to OpenSPARC-UniversityProgram@sun.com.
Many of the commercial applications of OpenSPARC, mentioned in the
following section, suggest corresponding academic uses.
2.2 Commercial Uses for OpenSPARC
OpenSPARC provides a springboard for design of commercial processors. By
starting from a complete, known-good design—including a full verification
suite—the time-to-market for a new custom processor can be drastically
slashed.
----------------------- Page 28-----------------------
2.2 Commercial Uses for OpenSPARC 9
Derivative processors ranging from a simple single-core, single-thread design
all the way up through an 8-core, 64-thread design can rapidly be synthesized
from OpenSPARC T1 or T2.
2.2.1 FPGA Implementation
An OpenSPARC design can be synthesized and loaded into a field-
programmable gate array (FPGA) device. This can be used in several ways:
* An FPGA version of the processor can be used for product prototyping,
allowing rapid design iteration
* An FPGA can be used to provide a high-speed simulation engine for a
processor under development
* For extreme time-to-market needs where production cost per processor
isn’t critical, a processor could even be shipped in FPGA form. This could
also be useful if the processor itself needs to be field-upgradable via a
software download.
2.2.2 Design Minimization
Portions of a standard OpenSPARC design that are not needed for the target
application can be stripped out, to make the resulting processor smaller,
cheaper, faster, and/or with higher yield rates. For example, for a network
routing application, perhaps hardware floating-point operations are
superfluous—in which case, the FPU(s) can be removed, saving die area and
reducing verification effort.
2.2.3 Coprocessors
Specialized coprocessors can be incorporated into a processor based on
OpenSPARC. OpenSPARC T2, for example, comes with a coprocessor
containing two 10 Gbit/second Ethernet transceivers (the network interface
unit or “NIU”). Coprocessors can be added for any conceivable purpose,
including (but hardly limited to) the following:
* Network routing
* Floating-point acceleration
* Cryptographic processing
* I/O compression/decompression engines
* Audio compression/decompression (codecs)
* Video codecs
* I/O interface units for embedded devices such as displays or input sensors
----------------------- Page 29-----------------------
10 Chapter 2 OpenSPARC Designs
2.2.4 OpenSPARC as Test Input to CAD/
EDA Tools
The OpenSPARC source code (Verilog RTL) provides a large, real-world
input dataset for CAD/EDA tools. It can be used to test the robustness of
CAD tools and simulators. Many major commercial CAD/EDA tool vendors
are already using OpenSPARC this way!
----------------------- Page 30-----------------------
CHAPTER 3
Architecture Overview
OpenSPARC processors are based on a processor architecture named the
UltraSPARC Architecture. The OpenSPARC T1 design is based on the
UltraSPARC Architecture 2005, and OpenSPARC T2 is based on the
UltraSPARC Architecture 2007. This chapter is intended as an overview
of the architecture; more details can be found in the UltraSPARC
Architecture 2005 Specification and the UltraSPARC Architecture 2007
Specification.
The UltraSPARC Architecture is descended from the SPARC V9
architecture and complies fully with the “Level 1” (nonprivileged)
SPARC V9 specification.
The UltraSPARC Architecture supports 32-bit and 64-bit integer and 32-
bit, 64-bit, and 128-bit floating-point as its principal data types. The 32-
bit and 64-bit floating-point types conform to IEEE Std 754-1985. The
128-bit floating-point type conforms to IEEE Std 1596.5-1992. The
architecture defines general-purpose integer, floating-point, and special
state/status register instructions, all encoded in 32-bit-wide instruction
formats. The load/store instructions address a linear, 264-byte virtual
address space.
As used here, the word architecture refers to the processor features that
are visible to an assembly language programmer or to a compiler code
generator. It does not include details of the implementation that are not
visible or easily observable by software, nor those that only affect timing
(performance).
The chapter contains these sections:
* The UltraSPARC Architecture on page 12
* Processor Architecture on page 15
* Instructions on page 17
* Traps on page 23
* Chip-Level Multithreading (CMT) on page 23
11
----------------------- Page 31-----------------------
12 Chapter 3 Architecture Overview
3.1 The UltraSPARC Architecture
This section briefly describes features, attributes, and components of the
UltraSPARC Architecture and, further, describes correct implementation of
the architecture specification and SPARC V9-compliance levels.
3.1.1 Features
The UltraSPARC Architecture, like its ancestor SPARC V9, includes the
following principal features:
* A linear 64-bit address space with 64-bit addressing.
* 32-bit wide instructions — These are aligned on 32-bit boundaries in
memory. Only load and store instructions access memory and perform I/O.
* Few addressing modes — A memory address is given as either “register +
register” or “register + immediate”.
* Triadic register addresses — Most computational instructions operate on
two register operands or one register and a constant and place the result in
a third register.
* A large windowed register file — At any one instant, a program sees 8
global integer registers plus a 24-register window of a larger register file.
The windowed registers can be used as a cache of procedure arguments,
local values, and return addresses.
* Floating point — The architecture provides an IEEE 754-compatible
floating-point instruction set, operating on a separate register file that
provides 32 single-precision (32-bit), 32 double-precision (64-bit), and 16
quad-precision (128-bit) overlayed registers.
* Fast trap handlers — Traps are vectored through a table.
* Multiprocessor synchronization instructions — Multiple variations of
atomic load-store memory operations are supported.
* Predicted branches — The branch with prediction instructions allows the
compiler or assembly language programmer to give the hardware a hint
about whether a branch will be taken.
* Branch elimination instructions — Several instructions can be used to
eliminate branches altogether (for example, Move on Condition).
Eliminating branches increases performance in superscalar and
superpipelined implementations.
----------------------- Page 32-----------------------
3.1 The UltraSPARC Architecture 13
* Hardware trap stack — A hardware trap stack is provided to allow nested
traps. It contains all of the machine state necessary to return to the previous
trap level. The trap stack makes the handling of faults and error conditions
simpler, faster, and safer.
In addition, UltraSPARC Architecture includes the following features that
were not present in the SPARC V9 specification:
* Hyperprivileged mode— This mode simplifies porting of operating
systems, supports far greater portability of operating system (privileged)
software, supports the ability to run multiple simultaneous guest operating
systems, and provides more robust handling of error conditions.
Hyperprivileged mode is described in detail in the Hyperprivileged version
of the UltraSPARC Architecture 2005 Specification or the UltraSPARC
Architecture 2007 Specification .
* Multiple levels of global registers — Instead of the two 8-register sets of
global registers specified in the SPARC V9 architecture, the UltraSPARC
Architecture provides multiple sets; typically, one set is used at each trap
level.
* Extended instruction set — The UltraSPARC Architecture provides many
instruction set extensions, including the VIS instruction set for “vector”
(SIMD) data operations.
* More detailed, specific instruction descriptions — UltraSPARC
Architecture specifications provide many more details regarding what
exceptions can be generated by each instruction, and the specific conditions
under which those exceptions can occur, than did SPARC V9. Also,
detailed lists of valid ASIs are provided for each load/store instruction
from/to alternate space.
* Detailed MMU architecture — Although some details of the UltraSPARC
MMU architecture are necessarily implementation-specific, UltraSPARC
Architecture specifications provide a blueprint for the UltraSPARC MMU,
including software view (TTEs and TSBs) and MMU hardware control
registers.
* Chip-level multithreading (CMT) — The UltraSPARC Architecture
provides a control architecture for highly threaded processor
implementations.
3.1.2 Attributes
The UltraSPARC Architecture is a processor instruction set architecture (ISA)
derived from SPARC V8 and SPARC V9, which in turn come from a reduced
instruction set computer (RISC) lineage. As an architecture, the UltraSPARC
----------------------- Page 33-----------------------
14 Chapter 3 Architecture Overview
Architecture allows for a spectrum of processor and system implementations
at a variety of price/performance points for a range of applications, including
scientific or engineering, programming, real-time, and commercial
applications. OpenSPARC further extends the possible breadth of design
possibilities by opening up key implementations to be studied, enhanced, or
redesigned by anyone in the community.
3.1.2.1 Design Goals
The UltraSPARC Architecture is designed to be a target for optimizing
compilers and high-performance hardware implementations. The UltraSPARC
Architecture 2005 and UltraSPARC Architecture 2007 Specification
documents provide design specs against which an implementation can be
verified, using appropriate verification software.
3.1.2.2 Register Windows
The UltraSPARC Architecture architecture is derived from the SPARC
architecture, which was formulated at Sun Microsystems in 1984 through
1987. The SPARC architecture is, in turn, based on the RISC I and II designs
engineered at the University of California at Berkeley from 1980 through
1982. The SPARC “register window” architecture, pioneered in the UC
Berkeley designs, allows for straightforward, high-performance compilers and
a reduction in memory load/store instructions.
Note that privileged software, not user programs, manages the register
windows. Privileged software can save a minimum number of registers
(approximately 24) during a context switch, thereby optimizing context-switch
latency.
3.1.3 System Components
The UltraSPARC Architecture allows for a spectrum of subarchitectures, such
as cache system, I/O, and memory management unit (MMU).
3.1.3.1 Binary Compatibility
An important mandate for the UltraSPARC Architecture is compatibility
across implementations of the architecture for application (nonprivileged)
software, down to the binary level. Binaries executed in nonprivileged mode
should behave identically on all UltraSPARC Architecture systems when those
----------------------- Page 34-----------------------
3.2 Processor Architecture 15
systems are running an operating system known to provide a standard
execution environment. One example of such a standard environment is the
SPARC V9 Application Binary Interface (ABI).
Although different UltraSPARC Architecture systems can execute
nonprivileged programs at different rates, they will generate the same results
as long as they are run under the same memory model. See Chapter 9,
Memory, in an UltraSPARC Architecture specification for more information.
Additionally, UltraSPARC Architecture 2005 and UltraSPARC Architecture
2007 are are upward-compatible from SPARC V9 for applications running in
nonprivileged mode that conform to the SPARC V9 ABI and upward-
compatible from SPARC V8 for applications running in nonprivileged mode
that conform to the SPARC V8 ABI.
An OpenSPARC implementation may or may not maintain the same binary
compatibility, depending on how the implementation has been modified and
what software execution environment is run on it.
3.1.3.2 UltraSPARC Architecture MMU
UltraSPARC Architecture defines a common MMU architecture (see Chapter
14, Memory Management, in any UltraSPARC Architecture specification for
details). Some specifics are left implementation-dependent.
3.1.3.3 Privileged Software
UltraSPARC Architecture does not assume that all implementations must
execute identical privileged software (operating systems) or hyperprivileged
software (hypervisors). Thus, certain traits that are visible to privileged
software may be tailored to the requirements of the system.
3.2 Processor Architecture
An UltraSPARC Architecture processor—therefore an OpenSPARC
processor—logically consists of an integer unit (IU) and a floating-point unit
(FPU), each with its own registers. This organization allows for
implementations with concurrent integer and floating-point instruction
execution. Integer registers are 64 bits wide; floating-point registers are 32,
64, or 128 bits wide. Instruction operands are single registers, register pairs,
register quadruples, or immediate constants.
----------------------- Page 35-----------------------
16 Chapter 3 Architecture Overview
A virtual processor (synonym: strand) is the hardware containing the state for
execution of a software thread. A physical core is the hardware required to
execute instructions from one or more software threads, including resources
shared among strands. A complete processor comprises one or more physical
cores and is the physical module that plugs into a system.
An OpenSPARC virtual processor can run in nonprivileged mode, privileged
mode, or hyperprivileged mode. In hyperprivileged mode, the processor can
execute any instruction, including privileged instructions. In privileged mode,
the processor can execute nonprivileged and privileged instructions. In
nonprivileged mode, the processor can only execute nonprivileged
instructions. In nonprivileged or privileged mode, an attempt to execute an
instruction requiring greater privilege than the current mode causes a trap to
hyperprivileged software.
3.2.1 Integer Unit (IU)
An OpenSPARC implementation’s integer unit contains the general-purpose
registers and controls the overall operation of the virtual processor. The IU
executes the integer arithmetic instructions and computes memory addresses
for loads and stores. It also maintains the program counters and controls
instruction execution for the FPU.
An UltraSPARC Architecture implementation may contain from 72 to 640
general-purpose 64-bit R registers. This corresponds to a grouping of the
registers into a number of sets of global R registers plus a circular stack of
N_REG_ WINDOWS sets of 16 registers each, known as register windows. The
number of register windows present (N_REG_ WINDOWS) is implementation
dependent, within the range of 3 to 32 (inclusive). In an unmodified
OpenSPARC T1 or T2 implementation, N_REG_ WINDOWS = 8.
3.2.2 Floating-Point Unit (FPU)
An OpenSPARC FPU has thirty-two 32-bit (single-precision) floating-point
registers, thirty-two 64-bit (double-precision) floating-point registers, and
sixteen 128-bit (quad-precision) floating-point registers, some of which
overlap (as described in detail in UltraSPARC Architecture specifications).
If no FPU is present, then it appears to software as if the FPU is permanently
disabled.
----------------------- Page 36-----------------------
3.3 Instructions 17
If the FPU is not enabled, then an attempt to execute a floating-point
instruction generates an fp_disabled trap and the fp_disabled trap handler
software must either
* Enable the FPU (if present) and reexecute the trapping instruction, or
* Emulate the trapping instruction in software.
3.3 Instructions
Instructions fall into the following basic categories:
* Memory access
* Integer arithmetic / logical / shift
* Control transfer
* State register access
* Floating-point operate
* Conditional move
* Register window management
* SIMD (single instruction, multiple data) instructions
These classes are discussed in the following subsections.
3.3.1 Memory Access
Load, store, load-store, and PREFETCH instructions are the only instructions
that access memory. They use two R registers or an R register and a signed
13-bit immediate value to calculate a 64-bit, byte-aligned memory address.
The integer unit appends an ASI to this address.
The destination field of the load/store instruction specifies either one or two R
registers or one, two, or four F registers that supply the data for a store or that
receive the data from a load.
Integer load and store instructions support byte, halfword (16-bit), word (32-
bit), and extended-word (64-bit) accesses. There are versions of integer load
instructions that perform either sign-extension or zero-extension on 8-bit, 16-
bit, and 32-bit values as they are loaded into a 64-bit destination register.
Floating-point load and store instructions support word, doubleword, and
quadword1 memory accesses.
1. OpenSPARC T1 and T2 processors do not implement the LDQF instruction in hardware; it
generates an exception and is emulated in hyperprivileged software.
----------------------- Page 37-----------------------
18 Chapter 3 Architecture Overview
CASA, CASXA, and LDSTUB are special atomic memory access instructions
that concurrent processes use for synchronization and memory updates.
Note The SWAP instruction is also specified, but it is
deprecated and should not be used in newly developed
software.
The (nonportable) LDTXA instruction supplies an atomic 128-bit (16-byte)
load that is important in certain system software applications.
3.3.1.1 Memory Alignment Restrictions
A memory access on an OpenSPARC virtual processor must typically be
aligned on an address boundary greater than or equal to the size of the datum
being accessed. An iproperly aligned address in a load, store, or load-store
instruction may trigger an exception and cause a subsequent trap. For details,
see the Memory Alignment Restrictions section in an UltraSPARC
Architecture specification.
3.3.1.2 Addressing Conventions
An unmodified OpenSPARC processor uses big-endian byte order by default:
the address of a quadword, doubleword, word, or halfword is the address of its
most significant byte. Increasing the address means decreasing the
significance of the unit being accessed. All instruction accesses are performed
using big-endian byte order.
An unmodified OpenSPARC processor also supports little-endian byte order
for data accesses only: the address of a quadword, doubleword, word, or
halfword is the address of its least significant byte. Increasing the address
means increasing the significance of the data unit being accessed.
3.3.1.3 Addressing Range
An OpenSPARC implementation supports a 64-bit virtual address space. The
supported range of virtual addresses is restricted to two equal-sized ranges at
the extreme upper and lower ends of 64-bit addresses; that is, for n-bit virtual
addresses, the valid address ranges are 0 to 2n–1 - 1 and 264 - 2n–1 to 264 - 1.
See the OpenSPARC T1 Implementation Supplement or OpenSPARC T2
Implementation Supplement for details.
----------------------- Page 38-----------------------
3.3 Instructions 19
3.3.1.4 Load/Store Alternate
Versions of load/store instructions, the load/store alternate instructions, can
specify an arbitrary 8-bit address space identifier for the load/store data
access.
Access to alternate spaces 0016–2F16 is restricted to privileged and
hyperprivileged software, access to alternate spaces 3016–7F16 is restricted to
hyperprivileged software, and access to alternate spaces 8016–FF16 is
unrestricted. Some of the ASIs are available for implementation-dependent
uses. Privileged and hyperprivileged software can use the implementation-
dependent ASIs to access special protected registers, such as MMU control
registers, cache control registers, virtual processor state registers, and other
processor-dependent or system-dependent values. See the Address Space
Identifiers (ASIs) chapter in an UltraSPARC Architecture specification for
more information.
Alternate space addressing is also provided for the atomic memory access
instructions LDSTUBA, CASA, and CASXA.
3.3.1.5 Separate Instruction and Data Memories
The interpretation of addresses in an unmodified OpenSPARC process is
“split”; instruction references use one caching and translation mechanism and
data references use another, although the same underlying main memory is
shared.
In such split-memory systems, the coherency mechanism may be split, so a
write1 into data memory is not immediately reflected in instruction memory.
For this reason, programs that modify their own instruction stream (self-
modifying code2) and that wish to be portable across all UltraSPARC
Architecture (and SPARC V9) processors must issue FLUSH instructions, or a
system call with a similar effect, to bring the instruction and data caches into
a consistent state.
An UltraSPARC Architecture virtual processor may or may not have coherent
instruction and data caches. Even if an implementation does have coherent
instruction and data caches, a FLUSH instruction is required for self-
modifying code—not for cache coherency, but to flush pipeline instruction
buffers that contain unmodified instructions which may have been
subsequently modified.
1. This includes use of store instructions (executed on the same or another virtual processor) that
write to instruction memory, or any other means of writing into instruction memory (for example,
DMA).
2. This is practiced, for example, by software such as debuggers and dynamic linkers.
----------------------- Page 39-----------------------
20 Chapter 3 Architecture Overview
3.3.1.6 Input/Output (I/O)
The UltraSPARC Architecture assumes that input/output registers are accessed
through load/store alternate instructions, normal load/store instructions, or
read/write Ancillary State register instructions (RDasr, WRasr).
3.3.1.7 Memory Synchronization
Two instructions are used for synchronization of memory operations: FLUSH
and MEMBAR. Their operation is explained in Flush Instruction Memory and
Memory Barrier sections, respectively, of UltraSPARC Architecture
specifications.
3.3.2 Integer Arithmetic / Logical / Shift
Instructions
The arithmetic/logical/shift instructions perform arithmetic, tagged arithmetic,
logical, and shift operations. With one exception, these instructions compute a
result that is a function of two source operands; the result is either written into
a destination register or discarded. The exception, SETHI, can be used in
combination with other arithmetic and/or logical instructions to create a
constant in an R register.
Shift instructions shift the contents of an R register left or right by a given
number of bits (“shift count”). The shift distance is specified by a constant in
the instruction or by the contents of an R register.
3.3.3 Control Transfer
Control-transfer instructions (CTIs) include PC-relative branches and calls,
register-indirect jumps, and conditional traps. Most of the control-transfer
instructions are delayed; that is, the instruction immediately following a
control-transfer instruction in logical sequence is dispatched before the control
transfer to the target address is completed. Note that the next instruction in
logical sequence may not be the instruction following the control-transfer
instruction in memory.
The instruction following a delayed control-transfer instruction is called a
delay instruction. Setting the annul bit in a conditional delayed control-
transfer instruction causes the delay instruction to be annulled (that is, to have
----------------------- Page 40-----------------------
3.3 Instructions 21
no effect) if and only if the branch is not taken. Setting the annul bit in an
unconditional delayed control-transfer instruction (“branch always”) causes
the delay instruction to be always annulled.
Branch and CALL instructions use PC-relative displacements. The jump and
link (JMPL) and return (RETURN) instructions use a register-indirect target
address. They compute their target addresses either as the sum of two R
registers or as the sum of an R register and a 13-bit signed immediate value.
The “branch on condition codes without prediction” instruction provides a
displacement of ±8 Mbytes; the “branch on condition codes with prediction”
instruction provides a displacement of ±1 Mbyte; the “branch on register
contents” instruction provides a displacement of ±128 Kbytes; and the CALL
instruction’s 30-bit word displacement allows a control transfer to any address
within ± 2 gigabytes (± 231 bytes).
Note The return from privileged trap instructions (DONE and
RETRY) get their target address from the appropriate
TPC or TNPC register.
3.3.4 State Register Access
This section describes the following state registers:
* Ancillary state registers
* Read and write privileged state registers
* Read and writer hyperprivileged state registers
3.3.4.1 Ancillary State Registers
The read and write ancillary state register instructions read and write the
contents of ancillary state registers visible to nonprivileged software (Y, CCR,
ASI, PC, TICK, and FPRS) and some registers visible only to privileged and
hyperprivileged software (PCR, SOFTINT, TICK_CMPR, and
STICK_CMPR).
3.3.4.2 PR State Registers
The read and write privileged register instructions (RDPR and WRPR) read
and write the contents of state registers visible only to privileged and
hyperprivileged software (TPC, TNPC, TSTATE, TT, TICK, TBA, PSTATE,
TL, PIL, CWP, CANSAVE, CANRESTORE, CLEANWIN, OTHERWIN, and
WSTATE).
----------------------- Page 41-----------------------
22 Chapter 3 Architecture Overview
3.3.4.3 HPR State Registers
The read and write hyperprivileged register instructions (RDHPR and
WRHPR) read and write the contents of state registers visible only to
hyperprivileged software (HPSTATE, HTSTATE, HINTP, HVER, and
HSTICK_CMPR).
3.3.5 Floating-Point Operate
Floating-point operate (FPop) instructions perform all floating-point
calculations; they are register-to-register instructions that operate on the
floating-point registers. FPops compute a result that is a function of one, two,
or three source operands. The groups of instructions that are considered FPops
are listed in the Floating-Point Operate (FPop) Instructions section of
UltraSPARC Architecture specifications.
3.3.6 Conditional Move
Conditional move instructions conditionally copy a value from a source
register to a destination register, depending on an integer or floating-point
condition code or on the contents of an integer register. These instructions can
be used to reduce the number of branches in software.
3.3.7 Register Window Management
Register window instructions manage the register windows. SAVE and
RESTORE are nonprivileged and cause a register window to be pushed or
popped. FLUSHW is nonprivileged and causes all of the windows except the
current one to be flushed to memory. SAVED and RESTORED are used by
privileged software to end a window spill or fill trap handler.
3.3.8 SIMD
An unmodified OpenSPARC processor includes SIMD (single instruction,
multiple data) instructions, also known as “vector” instructions, which allow a
single instruction to perform the same operation on multiple data items,
totaling 64 bits, such as eight 8-bit, four 16-bit, or two 32-bit data items.
These operations are part of the “VIS” instruction set extensions.
----------------------- Page 42-----------------------
3.4 Traps 23
3.4 Traps
A trap is a vectored transfer of control to privileged or hyperprivileged
software through a trap table that may contain the first 8 instructions (32 for
some frequently used traps) of each trap handler. The base address of the table
is established by software in a state register (the Trap Base Address register,
TBA, or the Hyperprivileged Trap Base register, HTBA). The displacement
within the table is encoded in the type number of each trap and the level of the
trap. Part of the trap table is reserved for hardware traps, and part of it is
reserved for software traps generated by trap (Tcc) instructions.
A trap causes the current PC and NPC to be saved in the TPC and TNPC
registers. It also causes the CCR, ASI, PSTATE, and CWP registers to be
saved in TSTATE. TPC, TNPC, and TSTATE are entries in a hardware trap
stack, where the number of entries in the trap stack is equal to the number of
supported trap levels. A trap causes hyperprivileged state to be saved in the
HTSTATE trap stack. A trap also sets bits in the PSTATE (and, in some cases,
HPSTATE) register and typically increments the GL register. Normally, the
CWP is not changed by a trap; on a window spill or fill trap, however, the
CWP is changed to point to the register window to be saved or restored.
A trap can be caused by a Tcc instruction, an asynchronous exception, an
instruction-induced exception, or an interrupt request not directly related to a
particular instruction. Before executing each instruction, a virtual processor
determines if there are any pending exceptions or interrupt requests. If any are
pending, the virtual processor selects the highest-priority exception or
interrupt request and causes a trap.
See the Traps chapter in an UltraSPARC Architecture specification for a
complete description of traps.
3.5 Chip-Level Multithreading
(CMT)
An OpenSPARC implementation may include multiple virtual processor cores
within the processor (“chip”) to provide a dense, high-throughput system. This
may be achieved by having a combination of multiple physical processor
----------------------- Page 43-----------------------
24 Chapter 3 Architecture Overview
cores and/or multiple strands (threads) per physical processor core, referred to
as chip-level multithreaded (CMT) processors. CMT-specific hyperprivileged
registers are used for identification and configuration of CMT processors.
The CMT programming model describes a common interface between
hardware (CMT registers) and software
The common CMT registers and the CMT programming model are described
in the Chip-Level Multithreading (CMT) chapter in UltraSPARC Architecture
specifications.
----------------------- Page 44-----------------------
CHAPTER 4
OpenSPARC T1 and T2 Processor
Implementations
This chapter introduces the OpenSPARC T1 and OpenSPARC T2 chip-
level multithreaded (CMT) processors in the following sections:
* General Background on page 25
* OpenSPARC T1 Overview on page 27
* OpenSPARC T1 Components on page 29
* OpenSPARC T2 Overview on page 33
* OpenSPARC T2 Components on page 34
* Summary of Differences Between OpenSPARC T1 and OpenSPARC T2
on page 36
4.1 General Background
OpenSPARC T1 is the first chip multiprocessor that fully implements
Sun’s Throughput Computing initiative. OpenSPARC T2 is the follow-on
chip multi-threaded (CMT) processor to the OpenSPARC T1 processor.
Throughput Computing is a technique that takes advantage of the thread-
level parallelism that is present in most commercial workloads. Unlike
desktop workloads, which often have a small number of threads
concurrently running, most commercial workloads achieve their
scalability by employing large pools of concurrent threads.
Historically, microprocessors have been designed to target desktop
workloads, and as a result have focused on running a single thread as
quickly as possible. Single-thread performance is achieved in these
microprocessors by a combination of extremely deep pipelines (over 20
stages in Pentium 4) and by execution of multiple instructions in parallel
(referred to as instruction-level parallelism, or ILP). The basic tenet
25
----------------------- Page 45-----------------------
26 Chapter 4 OpenSPARC T1 and T2 Processor Implementations
behind Throughput Computing is that exploiting ILP and deep pipelining has
reached the point of diminishing returns and as a result, current
microprocessors do not utilize their underlying hardware very efficiently.
For many commercial workloads, the physical processor core will be idle
most of the time waiting on memory, and even when it is executing, it will
often be able to utilize only a small fraction of its wide execution width. So
rather than building a large and complex ILP processor that sits idle most of
the time, build a number of small, single-issue physical processor cores that
employ multithreading built in the same chip area. Combining multiple
physical processors cores on a single chip with multiple hardware-supported
threads (strands) per physical processor core allows very high performance for
highly threaded commercial applications. This approach is called thread-level
parallelism (TLP). The difference between TLP and ILP is shown in
FIGURE 4-1.
Strand 1
Strand 2
TLP
Strand 3
Strand 4
ILP Single strand
executing
two
Executing Stalled on Memory
FIGURE 4-1 Differences Between TLP and ILP
The memory stall time of one strand can often be overlapped with execution
of other strands on the same physical processor core, and multiple physical
processor cores run their strands in parallel. In the ideal case, shown in
FIGURE 4-1, memory latency can be completely overlapped with execution of
other strands. In contrast, instruction-level parallelism simply shortens the
time to execute instructions, and does not help much in overlapping execution
with memory latency.1
1. Processors that employ out-of-order ILP can overlap some memory latency with execution.
However, this overlap is typically limited to shorter memory latency events such as L1 cache
misses that hit in the L2 cache. Longer memory latency events such as main memory accesses are
rarely overlapped to a significant degree with execution by an out-of-order processor.
----------------------- Page 46-----------------------
4.2 OpenSPARC T1 Overview 27
Given this ability to overlap execution with memory latency, why don’t more
processors utilize TLP? The answer is that designing processors is a mostly
evolutionary process, and the ubiquitous deeply pipelined, wide ILP physical
processor cores of today are the evolutionary outgrowth from a time when the
CPU was the bottleneck in delivering good performance.
With physical processor cores capable of multiple-GHz clocking, the
performance bottleneck has shifted to the memory and I/O subsystems and
TLP has an obvious advantage over ILP for tolerating the large I/O and
memory latency prevalent in commercial applications. Of course, every
architectural technique has its advantages and disadvantages. The one
disadvantage of employing TLP over ILP is that execution of a single strand
may be slower on a TLP processor than on an ILP processor. With physical
processor cores running at frequencies well over 1 GHz, a strand capable of
executing only a single instruction per cycle is fully capable of completing
tasks in the time required by the application, making this disadvantage a
nonissue for nearly all commercial applications.
4.2 OpenSPARC T1 Overview
OpenSPARC T1 is a single-chip multiprocessor. OpenSPARC T1 contains
eight SPARC physical processor cores. Each SPARC physical processor core
has full hardware support for four virtual processors (or “strands”). These four
strands run simultaneously, with the instructions from each of the four strands
executed round-robin by the single-issue pipeline. When a strand encounters a
long-latency event, such as a cache miss, it is marked unavailable and
instructions are not issued from that strand until the long-latency event is
resolved. Round-robin execution of the remaining available strands continues
while the long-latency event of the first strand is resolved.
Each OpenSPARC T1 physical core has a 16-Kbyte, 4-way associative
instruction cache (32-byte lines), 8-Kbyte, 4-way associative data cache (16-
byte lines), 64-entry fully associative instruction Translation Lookaside Buffer
(TLB), and 64-entry fully associative data TLB that are shared by the four
strands. The eight SPARC physical cores are connected through a crossbar to
an on-chip unified 3-Mbyte, 12-way associative L2 cache (with 64-byte lines).
The L2 cache is banked four ways to provide sufficient bandwidth for the
eight OpenSPARC T1 physical cores. The L2 cache connects to four on-chip
DRAM controllers, which directly interface to DDR2-SDRAM. In addition,
----------------------- Page 47-----------------------
28 Chapter 4 OpenSPARC T1 and T2 Processor Implementations
an on-chip J-Bus controller and several on-chip I/O-mapped control registers
are accessible to the SPARC physical cores. Traffic from the J-Bus coherently
interacts with the L2 cache.
A block diagram of the OpenSPARC T1 chip is shown in FIGURE 4-2.
OpenSPARC T1
FPU
124,145
SPARC Core
DRAM Control DDR-II
L2 Bank0 Channel 0
SPARC Core 156,64
SPARC Core
DRAM Control DDR-II
L2 Bank1 Channel1
156,64
SPARC Core Cache
Crossbar
SPARC Core (CCX)
DRAM Control
L2 Bank2 Channel 2 DDR-II
156,64
SPARC Core
SPARC Core
DRAM Control
DDR-II
L2 Bank3 Channel3
156,64
SPARC Core
32,32
32,32
32,32 32,32
eFuse
32, 16, Copy
8, or 4 for
JTAG CTU IOB each J-Bus 200 MHz
Port
4 or 8 block System J-Bus
with Interface
CSRs
50 MHz
SSI ROM
SSI
Interface
Notes:
(1) Blocks not scaled to physical size.
(2) Bus widths are labeled as in#,out#, where “in” is into CCX or L2.
FIGURE 4-2 OpenSPARC T1 Chip Block Diagram
----------------------- Page 48-----------------------
4.3 OpenSPARC T1 Components 29
4.3 OpenSPARC T1 Components
This section describes each component in OpenSPARC T1 in these
subsections.
* SPARC Physical Core on this page
* Floating-Point Unit (FPU) on page 30
* L2 Cache on page 31
* DRAM Controller on page 31
* I/O Bridge (IOB) Unit on page 31
* J-Bus Interface (JBI) on page 32
* SSI ROM Interface on page 32
* Clock and Test Unit (CTU) on page 32
* EFuse on page 33
4.3.1 OpenSPARC T1 Physical Core
Each OpenSPARC T1 physical core has hardware support for four strands.
This support consists of a full register file (with eight register windows) per
strand, with most of the ASI, ASR, and privileged registers replicated per
strand. The four strands share the instruction and data caches and TLBs. An
autodemap1 feature is included with the TLBs to allow the multiple strands to
update the TLB without locking.
The core pipeline consists of six stages: Fetch, Switch, Decode, Execute,
Memory, and Writeback. As shown in FIGURE 4-3, the Switch stage contains a
strand instruction register for each strand. One of the strands is picked by the
strand scheduler and the current instruction for that strand is issued to the
pipe. While this is done, the hardware fetches the next instruction for that
strand and updates the strand instruction register.
The scheduled instruction proceeds down the rest of the stages of the pipe,
similar to instruction execution in a single-strand RISC machine. It is decoded
in the Decode stage. The register file access also happens at this time. In the
Execute stage, all arithmetic and logical operations take place. The memory
address is calculated in this stage. The data cache is accessed in the Memory
stage and the instruction is committed in the Writeback stage. All traps are
signaled in this stage.
1. Autodemap causes an existing TLB entry to be automatically removed when a new entry is
installed with the same virtual page number (VPN) and same page size.
----------------------- Page 49-----------------------
30 Chapter 4 OpenSPARC T1 and T2 Processor Implementations
Instructions are classified as either short or long latency instructions. Upon
encountering a long latency instruction or other stall condition in a certain
strand, the strand scheduler stops scheduling that strand for further execution.
Scheduling commences again when the long latency instruction completes or
the stall condition clears.
FIGURE 4-3 illustrates the OpenSPARC T1 physical core.
Strand
I-Cache Instruction Strand
Decode
Registers Scheduler
Store Buffers
ALU
Register Files
D-Cache
External
Interface
FIGURE 4-3 OpenSPARC T1 Core Block Diagram
4.3.2 Floating-Point Unit (FPU)
A single floating-point unit is shared by all eight OpenSPARC T1 physical
cores. The shared floating-point unit is sufficient for most commercial
applications, in which fewer than 1% of instructions typically involve
floating-point operations.
----------------------- Page 50-----------------------
4.3 OpenSPARC T1 Components 31
4.3.3 L2 Cache
The L2 cache is banked four ways, with the bank selection based on physical
address bits 7:6. The cache is 3-Mbyte, 12-way set associative with pseudo-
LRU replacement (replacement is based on a used-bit scheme), and has a line
size of 64 bytes. Unloaded access time is 23 cycles for an L1 data cache miss
and 22 cycles for an L1 instruction cache miss.
4.3.4 DRAM Controller
1
OpenSPARC T1’s DRAM Controller is banked four ways , with each L2 bank
interacting with exactly one DRAM Controller bank. The DRAM Controller is
interleaved based on physical address bits 7:6, so each DRAM Controller
bank must have the same amount of memory installed and enabled.
OpenSPARC T1 uses DDR2 DIMMs and can support one or two ranks of
stacked or unstacked DIMMs. Each DRAM bank/port is two DIMMs wide
(128-bit + 16-bit ECC). All installed DIMMs on an individual bank/port must
be identical, and the same total amount of memory (number of bytes) must be
installed on each DRAM Controller port. The DRAM controller frequency is
an exact ratio of the CMP core frequency, where the CMP core frequency
must be at least 4× the DRAM controller frequency. The DDR (double data
rate) data buses, of course, transfer data at twice the frequency of the DRAM
Controller frequency.
The DRAM Controller also supports a small memory configuration mode,
using only two DRAM ports. In this mode, L2 banks 0 and 2 are serviced by
DRAM port 0, and L2 banks 1 and 3 are serviced by DRAM port 1. The
installed memory on each of these ports is still two DIMMs wide.
4.3.5 I/O Bridge (IOB) Unit
The IOB performs an address decode on I/O-addressable transactions and
directs them to the appropriate internal block or to the appropriate external
interface (J-Bus or SSI). In addition, the IOB maintains the register status for
external interrupts.
1. A two-bank option is available for cost-constrained minimal memory configurations.
----------------------- Page 51-----------------------
32 Chapter 4 OpenSPARC T1 and T2 Processor Implementations
4.3.6 J-Bus Interface (JBI)
J-Bus is the interconnect between OpenSPARC T1 and the I/O subsystem. It is
a 200 MHz, 128-bit-wide, multiplexed address/data bus, used predominantly
for DMA traffic, plus the PIO traffic to control it.
The JBI is the block that interfaces to J-Bus, receiving and responding to
DMA requests, routing them to the appropriate L2 banks, and also issuing PIO
transactions on behalf of the strands and forwarding responses back.
4.3.7 SSI ROM Interface
OpenSPARC T1 has a 50 Mbit/s serial interface (SSI) which connects to an
external FPGA which interfaces to the BOOT ROM. In addition, the SSI
interface supports PIO accesses across the SSI, thus supporting optional CSRs
or other interfaces within the FPGA.
4.3.8 Clock and Test Unit (CTU)
The CTU contains the clock generation, reset, and JTAG circuitry.
OpenSPARC T1 has a single PLL, which takes the J-Bus clock as its input
reference, where the PLL output is divided down to generate the CMP core
clocks (for OpenSPARC T1 and caches), the DRAM clock (for the DRAM
controller and external DIMMs), and internal J-Bus clock (for IOB and JBI).
Thus, all OpenSPARC T1 clocks are ratioed. Sync pulses are generated to
control transmission of signals and data across clock domain boundaries.
The CTU has the state machines for internal reset sequencing, which includes
logic to reset the PLL and signal when the PLL is locked, updating clock
ratios on warm resets (if so programmed), enabling clocks to each block in
turn, and distributing reset so that its assertion is seen simultaneously in all
clock domains.
The CTU also contains the JTAG block, which allows access to the shadow
scan chains, plus has a CREG interface that allows the JTAG to issue reads of
any I/O-addressable register, some ASI locations, and any memory location
while OpenSPARC T1 is in operation.
----------------------- Page 52-----------------------
4.4 OpenSPARC T2 Overview 33
4.3.9 EFuse
The eFuse (electronic fuse) block contains configuration information that is
electronically burned in as part of manufacturing, including part serial number
and strand-available information.
4.4 OpenSPARC T2 Overview
OpenSPARC T2 is a single chip multithreaded (CMT) processor.
OpenSPARC T2 contains eight SPARC physical processor cores. Each SPARC
physical processor core has full hardware support for eight processors, two
integer execution pipelines, one floating-point execution pipeline, and one
memory pipeline. The floating-point and memory pipelines are shared by all
eight strands. The eight strands are hard-partitioned into two groups of four,
and the four strands within a group share a single integer pipeline.
While all eight strands run simultaneously, at any given time at most two
strands will be active in the physical core, and those two strands will be
issuing either a pair of integer pipeline operations, an integer operation and a
floating-point operation, an integer operation and a memory operation, or a
floating-point operation and a memory operation. Strands are switched on a
cycle-by-cycle basis between the available strands within the hard-partitioned
group of four, using a least recently issued priority scheme.
When a strand encounters a long-latency event, such as a cache miss, it is
marked unavailable and instructions will not be issued from that strand until
the long-latency event is resolved. Execution of the remaining available
strands will continue while the long-latency event of the first strand is
resolved.
Each OpenSPARC T2 physical core has a 16-Kbyte, 8-way associative
instruction cache (32-byte lines), 8-Kbyte, 4-way associative data cache (16-
byte lines), 64-entry fully-associative instruction TLB, and 128-entry fully
associative data TLB that are shared by the eight strands. The eight
OpenSPARC T2 physical cores are connected through a crossbar to an on-chip
unified 4-Mbyte, 16-way associative L2 cache (64-byte lines).
The L2 cache is banked eight ways to provide sufficient bandwidth for the
eight OpenSPARC T2 physical cores. The L2 cache connects to four on-chip
DRAM Controllers, which directly interface to a pair of fully buffered DIMM
----------------------- Page 53-----------------------
34 Chapter 4 OpenSPARC T1 and T2 Processor Implementations
(FBD) channels. In addition, two 1-Gbit/10-Gbit Ethernet MACs and several
on-chip I/O-mapped control registers are accessible to the SPARC physical
cores.
A block diagram of the OpenSPARC T2 chip is shown in FIGURE 4-4.
.
Fully B uffered
D IM M s (FB D )
1.4Ghz1.4Ghz 4.8Ghz
OpenSPARC T2 800M hz
N ia g a ra 2
64
10
S P A R C C o re L2 B ank0 128 M C U 0 14
1010
64
S P A R C C o re L2 B ank1 14
64
1010
S P A R C C o re C ache L2 B ank0
C ro ssbar 128 M C U 1 14
1010
S P A R C C o re (C C X ) L2 B ank1 64
14
64
1010
S P A R C C o re L2 B ank0
128 M C U 2 14
1010
S P A R C C o re L2 B ank1 64
14
S P A R C C o re L2 B ank0 64 1010
14
128 M C U 3
1010
S P A R C C o re L2 B ank1 64
14
TC U C C U eFuse
DD IMIM MM s:s: 11 22 33 88
Ranks: 1 or 2 per D IMM
10 Gb MA C N IU P C I-E X
10 Gb MA C S IU
Optional dual C hannel M ode
FC R A M Intf P C I-E X
S S I R O M Intf
FIGURE 4-4 OpenSPARC T2 Chip Block Diagram
4.5 OpenSPARC T2 Components
This section describes the major components in OpenSPARC T2.
----------------------- Page 54-----------------------
4.5 OpenSPARC T2 Components 35
4.5.1 OpenSPARC T2 Physical Core
Each OpenSPARC T2 physical core has hardware support for eight strands.
This support consists of a full register file (with eight register windows) per
strand, with most of the ASI, ASR, and privileged registers replicated per
strand. The eight strands share the instruction and data caches and TLBs. An
autodemap feature is included with the TLBs to allow the multiple strands to
update the TLB without locking.
Each OpenSPARC T2 physical core contains a floating-point unit, shared by
all eight strands. The floating-point unit performs single- and double-precision
floating-point operations, graphics operations, and integer multiply and divide
operations.
4.5.2 L2 Cache
The L2 cache is banked eight ways. To provide for better partial-die recovery,
OpenSPARC T2 can also be configured in 4-bank and 2-bank modes (with 1/
2 and 1/4 the total cache size respectively). Bank selection is based on
physical address bits 8:6 for 8 banks, 7:6 for 4 banks, and 6 for 2 banks. The
cache is 4 Mbytes, 16-way set associative, and uses index hashing. The line
size is 64 bytes.
4.5.3 Memory Controller Unit (MCU)
OpenSPARC T2 has four MCUs, one for each memory branch with a pair of
L2 banks interacting with exactly one DRAM branch. The branches are
interleaved based on physical address bits 7:6, and support 1–16 DDR2
DIMMs. Each memory branch is two FBD channels wide. A branch may use
only one of the FBD channels in a reduced power configuration.
Each DRAM branch operates independently and can have a different memory
size and a different kind of DIMM (for example, a different number of ranks
or different CAS latency). Software should not use address space larger than
four times the lowest memory capacity in a branch because the cache lines are
interleaved across branches. The DRAM Controller frequency is the same as
that of the DDR (double data rate) data buses, which is twice the DDR
frequency. The FBDIMM links run at six times the frequency of the DDR data
buses.
The OpenSPARC T2 MCU implements a DDR2 FBD design model that is
based on various JEDEC-approved DDR2 SDRAM and FBDIMM standards.
JEDEC has received information that certain patents or patent applications
----------------------- Page 55-----------------------
36 Chapter 4 OpenSPARC T1 and T2 Processor Implementations
may be relevant to FBDIMM Advanced Memory Buffer standard (JESD82-
20) as well as other standards related to FBDIMM technology (JESD206) (For
more information, see
http://www.jedec.org/download/search/FBDIMM/Patents.xls).
Sun Microsystems does not provide any legal opinions as to the validity or
relevancy of such patents or patent applications. Sun Microsystems
encourages prospective users of the OpenSPARC T2 MCU design to review
all information assembled by JEDEC and develop their own independent
conclusion.
4.5.4 Noncacheable Unit (NCU)
The NCU performs an address decode on I/O-addressable transactions and
directs them to the appropriate block (for example, DMU, CCU). In addition,
the NCU maintains the register status for external interrupts.
4.5.5 System Interface Unit (SIU)
The SIU connects the DMU and L2 cache. SIU is the L2 cache access point
for the Network subsystem.
4.5.6 SSI ROM Interface (SSI)
OpenSPARC T2 has a 50 Mb/s serial interface (SSI), which connects to an
external boot ROM. In addition, the SSI supports PIO accesses across the SSI,
thus supporting optional Control and Status registers (CSRs) or other
interfaces attached to the SSI.
4.6 Summary of Differences
Between OpenSPARC T1 and
OpenSPARC T2
OpenSPARC T2 follows the CMT philosophy of OpenSPARC T1, but adds
more execution capability to each physical core, as well as significant system-
on-a-chip components and an enhanced L2 cache.
----------------------- Page 56-----------------------
4.6 Summary of Differences Between OpenSPARC T1 and OpenSPARC T2 37
4.6.1 Microarchitectural Differences
The following lists the microarchitectural differences.
* Physical core consists of two integer execution pipelines and a single
floating-point pipeline. OpenSPARC T1 has a single integer execution
pipeline and all cores shared a single floating-point pipeline.
* Each physical core in OpenSPARC T2 supports eight strands, which all
share the floating-point pipeline. The eight strands are partitioned into two
groups of four strands, each of which shares an integer pipeline.
OpenSPARC T1 shares the single integer pipeline among four strands.
* Pipeline in OpenSPARC T2 is eight stages, two stages longer than
OpenSPARC T1.
* Instruction cache is 8-way associative, compared to 4-way in
OpenSPARC T1.
* The L2 cache is 4-Mbyte, 8-banked and 16-way associative, compared to
3-Mbyte, 4-banked and 12-way associative in OpenSPARC T1.
* Data TLB is 128 entries, compared to 64 entries in OpenSPARC T1.
* The memory interface in OpenSPARC T2 supports fully buffered DIMMS
(FBDs), providing higher capacity and memory clock rates.
* The OpenSPARC T2 memory channels support a single-DIMM option for
low-cost configurations.
* OpenSPARC T2 includes a network interface unit (NIU), to which network
traffic management tasks can be off-loaded.
4.6.2 Instruction Set Architecture (ISA)
Differences
There are a number of ISA differences between OpenSPARC T2 and
OpenSPARC T1, as follows:
* OpenSPARC T2 fully supports all VIS 2.0 instructions. OpenSPARC T1
supports a subset of VIS 1.0 plus the SIAM (Set Interval Arithmetic Mode)
instruction (on OpenSPARC T1, the remainder of VIS 1.0 and 2.0
instructions trap to software for emulation).
* OpenSPARC T2 supports the full CMP specification, as described in
UltraSPARC Architecture 2007. OpenSPARC T1 has its own version of
CMP control/status registers. OpenSPARC T2 consists of eight physical
cores, with eight virtual processors per physical core.
----------------------- Page 57-----------------------
38 Chapter 4 OpenSPARC T1 and T2 Processor Implementations
* OpenSPARC T2 does not support OpenSPARC T1’s idle state or its idle,
halt, or resume messages. Instead, OpenSPARC T2 supports parking and
unparking as specified in the CMP chapter of UltraSPARC Architecture
2007 Specification. Note that parking is similar to OpenSPARC T1’s idle
state. OpenSPARC T2 does support an equivalent to the halt state, which
on OpenSPARC T1 is entered by writing to HPR 1E16. However,
OpenSPARC T2 does not support OpenSPARC T1’s STRAND_STS_REG
ASR, which holds the strand state. Halted state is not software-visible on
OpenSPARC T2.
* OpenSPARC T2 does not support the INT_VEC_DIS register (which
allows any OpenSPARC T1 strand to generate an interrupt, reset, idle, or
resume message to any strand). Instead, an alias to ASI_INTR_W is
provided, which allows only the generation of an interrupt to any strand.
* OpenSPARC T2 supports the ALLCLEAN, INVALW, NORMALW,
OTHERW, POPC, and FSQRT instructions in hardware.
* OpenSPARC T2’s floating-point unit generates fp_unfinished_other with
FSR.ftt unfinished_FPop for most denorm cases and supports a nonstandard
mode that flushes denorms to zero. OpenSPARC T1 handles denorms in
hardware, never generates an unfinished_FPop, and does not support a
nonstandard mode.
* OpenSPARC T2 generates an illegal_instruction trap on any quad-precision
FP instruction, whereas OpenSPARC T1 generates an fp_exception_other
trap on numeric and move-FP-quad instructions. See Table 5-2 of the
UltraSPARC T2 Supplement to the “UltraSPARC Architecture 2007
Specification.”
* OpenSPARC T2 generates a privileged_action exception upon attempted
access to hyperprivileged ASIs by privileged software, whereas, in such
cases, OpenSPARC T1 takes a data_access_exception exception.
* OpenSPARC T2 supports PSTATE.tct; OpenSPARC T1 does not.
* OpenSPARC T2 implements the SAVE instruction similarly to all previous
UltraSPARC processors. OpenSPARC T1 implements a SAVE instruction
that updates the locals in the new window to be the same as the locals in
the old window, and swaps the ins (outs) of the old window with the outs
(ins) of the new window.
* PSTATE.am masking details differ between OpenSPARC T1 and
OpenSPARC T2, as described in Section 11.1.8 of the UltraSPARC T2
Supplement to the “UltraSPARC Architecture 2007 Specification.”
* OpenSPARC T2 implements PREFETCH fcn = 1816 as a prefetch
invalidate cache entry, for efficient software cache flushing.
* The Synchronous Fault register (SFSR) is eliminated in OpenSPARC T2.
----------------------- Page 58-----------------------
4.6 Summary of Differences Between OpenSPARC T1 and OpenSPARC T2 39
* T1’s data_access_exception is replaced in OpenSPARC T2 by multiple
DAE_* exceptions.
* T1’s instruction_access_exception exception is replaced in
OpenSPARC T2 by multiple IAE_* exceptions.
4.6.3 MMU Differences
The OpenSPARC T2 and OpenSPARC T1 MMUs differ as follows:
* OpenSPARC T2 has a 128-entry DTLB, whereas OpenSPARC T1 has a 64-
entry DTLB.
* OpenSPARC T2 supports a pair of primary context registers and a pair of
secondary context registers. OpenSPARC T1 supports a single primary
context and single secondary context register.
* OpenSPARC T2 does not support a locked bit in the TLBs.
OpenSPARC T1 supports a locked bit in the TLBs.
* OpenSPARC T2 supports only the sun4v (the architected interface between
privileged software and hyperprivileged software) TTE format for I/D-TLB
Data-In and Data-Access registers. OpenSPARC T1 supports both the
sun4v and the older sun4u TTE formats.
* OpenSPARC T2 is compatible with UltraSPARC Architecture 2007 with
regard to multiple flavors of data access exception (DAE_*) and instruction
access exception (IAE_*). As per UltraSPARC Architecture 2005,
OpenSPARC T1 uses the single flavor of data_access_exception and
instruction_access_exception, indicating the “flavors” in its SFSR
register.
* OpenSPARC T2 supports a hardware Table Walker to accelerate ITLB and
DTLB miss handling.
* The number and format of translation storage buffer (TSB) configuration
and pointer registers differs between OpenSPARC T1 and OpenSPARC T2.
OpenSPARC T2 uses physical addresses for TSB pointers; OpenSPARC T1
uses virtual addresses for TSB pointers.
* OpenSPARC T1 and OpenSPARC T2 support the same four page sizes (8
Kbyte, 64 Kbyte, 4 Mbyte, 256 Mbyte). OpenSPARC T2 supports an
unsupported_page_size trap when an illegal page size is programmed into
TSB registers or attempted to be loaded into the TLB. OpenSPARC T1
forces an illegal page size being programmed into TSB registers to be 256
Mbytes and generates a data_access_exception trap when a page with an
illegal size is loaded into the TLB.
* OpenSPARC T2 adds a demap real operation, which demaps all pages with
r = 1 from the TLB.
----------------------- Page 59-----------------------
40 Chapter 4 OpenSPARC T1 and T2 Processor Implementations
* OpenSPARC T2 supports an I-TLB probe ASI.
* Autodemapping of pages in the TLBs only demaps pages of the same size
or of a larger size in OpenSPARC T2. In OpenSPARC T1, autodemap
demaps pages of the same size, larger size, or smaller size.
* OpenSPARC T2 supports detection of multiple hits in the TLBs.
4.6.4 Performance Instrumentation
Differences
Both OpenSPARC T1 and OpenSPARC T2 provide access to hardware
performance counters through the PIC and PCR registers. However, the
events captured by the hardware differ significantly between OpenSPARC T1
and OpenSPARC T2, with OpenSPARC T2 capturing a much larger set of
events, as described in Chapter 10 of the UltraSPARC T2 Supplement to the
“UltraSPARC Architecture 2007 Specification.” OpenSPARC T2 also supports
count events in hyperprivileged mode; OpenSPARC T1 does not.
In addition, the implementation of pic_overflow differs between
OpenSPARC T1 and OpenSPARC T2. OpenSPARC T1 provides a disrupting
pic_overflow trap on the instruction following the one that caused the
overflow event. OpenSPARC T2 provides a disrupting pic_overflow on the
instruction that generates the event, but that occurs within an epsilon number
of event-generating instructions from the actual overflow.
Both OpenSPARC T2 and OpenSPARC T1 support DRAM performance
counters.
4.6.5 Error Handling Differences
Error handling differs quite a bit between OpenSPARC T1 and
OpenSPARC T2. OpenSPARC T1 primarily employs hardware correction of
errors, whereas OpenSPARC T2 primarily employs software correction of
errors.
* OpenSPARC T2 uses the following traps for error handling:
* data_access_error
* data_access_MMU_error
* hw_corrected_error
* instruction_access_error
* instruction_access_MMU_error
* internal_processor_error
* store_error
* sw_recoverable_error