|
Features |
The debugging of system-on-chip designs containing several cores places new demands on development tools.
Ideally chip designers and tool producers should agree quickly on suitable techniques that guarantee the
user rapid availability of high-quality development tools with free selection of the core combination.
Application-specific ASICs are used to an increasing extent today for embedded designs. At the same time
it is becoming more and more common for several cores to be integrated to form a system-on-chip (SoC) in
order to achieve optimum functionality and performance. The use of a RISC processor combined with a DSP is
widespread, although other combinations are also employed.
The testing and the integration phase of multicore SoC designs of this type place new demands
on microprocessor development tools. This article focuses on debugging by addressing several
cores via a shared debug interface.
|
Addressing several cores via one debug interface |
TRACE32 Debugger systems support parallel and cascaded JTAG interfaces. More than one debugger can be
connected to the same JTAG interface.
Separate debuggers and separate JTAG Connectors
Separate debuggers and common JTAG Connector, cores selected by special line
Separate debuggers and common JTAG Connector, cores cascaded
Common debuggers and common JTAG Connector, cores selected by special line
Common debuggers and common JTAG Connector, cores cascaded
|
Advantages and Disadvantages |
Most processors today provide on-chip debug logic for debugging.
The interface most frequently used for controlling the debug logic is the
JTAG interface. However, with multicore SoC designs a separate JTAG interface
is not provided for every core in order to save on the number of pins and so
cut costs. Instead, a joint JTAG interface has to suffice for debugging all cores.
This raises the question of how the debugger can address several cores via the
joint JTAG interface and how synchronous debugging can be implemented:
One debugger supporting all cores on the SoC
At first glance this would appear to be the ideal solution for the developer.
The chief advantages of this solution are as follows: one development tool for
all cores and hence the need for familiarization with only one user interface
and product philosophy. This is certainly the best approach to adopt for SoCs
that are produced in large numbers of units and are used for a large number of
developments. An example of this type of solution is the TriCore Debugger from
Lauterbach that allows debugging of the main core as well as the peripheral
control processor (PCP).
By contrast there is also a counter trend towards individualized SoCs that are
used for the development of only one product. A new SoC that achieves even more
optimized performance and functionality is created for the next product. If one
also wants full freedom in the selection of the integrated cores, one needs the
services of a tool producer who can provide an optimum product for every
architecture that is employed. Naturally the debugger should also be available
fully tested by the time the first chip is produced from the wafer.
Although this solution is obviously the best solution available, the chances of
it being implemented cheaply and more especially quickly while maintaining a high
standard of quality are rather unlikely.
Using a JTAG server
The debuggers are using the software interface of the JTAG server instead
having their own JTAG hardware.
Highly developed debuggers are already available today for the majority of cores.
We might therefore ask, why not connect the existing debuggers to a JTAG server
that takes care of the addressing of the individual cores via the joint JTAG
interface?
One can imagine a solution of this kind being implemented along the following
lines. A server hardware is connected in front of the joint JTAG interface.
This hardware is controlled by server software on the host. The individual
debug client now sends its communication request to the server by means of a
remote procedure call. This guarantees exclusive access to the joint JTAG interface
and forwards the communication request to the individual core. Figure 1 shows
the basic principle of a server solution of this type.
In this case the debugger uses a software interface to the JTAG server instead
of dedicated JTAG hardware.
This approach, although it appears very elegant at first sight, similarly does
not offer a complete solution to the problem. A number of semiconductor manufacturers
already offer server solutions for core groupings in their product range, but there
is no server standard in sight offering a vendor-neutral solution.
The JTAG server solution also proves to be rather inflexible when individual
semiconductor manufacturers have expanded the JTAG signals of their core in order
to offer additional debug functionality. For a multicore development environment,
for example, it would be desirable for each core to have a stop request signal
making it possible to stop the core immediately. Another possibility would be to
indicate that a core has stopped by means of a stop indication signal. Both
signals could be used ideally for synchronous stopping of all cores in a multicore
application.
With free selection of an optimum core combination there can quickly be a number of
additional signals. One alternative would simply be to let these signals go by the
board and dispense with the additional functionality. However, these signals are
often necessary or at least very helpful and should be used for this reason. The
JTAG server would therefore still have to be matched to the specific application
again and tested.
Another critical point especially for real-time applications is the large volumes
of data that have to be handled by the JTAG server. This slows the reaction time
of the individual core accordingly. Nevertheless, in order to match up to the real
time requirements it is necessary to pack time-critical functions into the hardware
which brings us back to the application-specific server.
An optimum server solution is therefore particularly one in which all cores used
come from the same semiconductor manufacturer, and this manufacturer supplies the
JTAG server and at the same time the matching debuggers. Application-specific servers
on the other hand require agreements between the producers of the debuggers used which
is something that usually proves difficult because of the competitive situation and is
also time-consuming and cost-intensive. An added factor is that it is necessary to adapt
the server again for every new core combination.
Completely independent debuggers at the joint JTAG interface
TRACE32 also already supports a wide array of cores with its debuggers. A standard user
interface and a common product philosophy therefore already exist for using these debuggers
for multicore SoC designs.
As long as multicore debugging remains in its infancy and no general standard is defined
we regard this third solution as the most effective. TRACE32 Debuggers
are already equipped for operating at a joint JTAG interface.
|