
xxii
Preface
Because the 29K family architecture reveals the processor’s internal pipeline
operation much more than a CISC architecture, a better understanding of how the
software can control the hardware and avoid resource conflicts is required to obtain
the best performance. Up to this point, software engineers have had to glean
information about programming the 29K family from scattered application notes,
conference proceedings and other publications. In addition much of the necessary
information has never been documented. This has lead to a number of difficulties,
particularly where the most efficient use of the RISC design features is sought.
The material presented is practical rather than theoretical. Each chapter is in a
somewhat standalone form, reducing the need to read earlier chapters before later
chapters are studied. Many of the code examples are directly usable in real embedded
systems rather than as student exercises. Engineers planning on using the 29K
family will be able to extract useful code sequences from the book for integration into
their own designs. Much of the material presented has been used by AMD, and other
independent companies, in building training classes for computer professionals
wishing to quickly gain an understanding of the 29K family.
This book is organized as follows:
Chapter 1
describes the architectural characteristics of the 29K RISC
microprocessor and microcontroller family. The original family member, the
Am29000 processor, is described first. Then the family tree evolution is dealt with in
terms of each member’s particular features. Although all 29K processors are
application code compatible they are not all pin compatible. The ability of the 29K
family to be flexible in its memory requirements is presented. In addition, the chapter
shows the importance of keeping the RISC pipeline busy if high performance is to be
achieved.
Chapter 2
deals with application programming. It covers the main topics
required by a software developer to produce code for execution on a 29K.
Application coding is done in a high level language and the chapter assumes the C
language is most widely used. The dual register and memory stack technique used by
the 29K procedure calling–convention is described in detail, along with the process
of maintaining the processor’s local register file as a cache for the top of the register
stack. Application programs require runtime support. The library services typically
used by developers make demands upon such operating system services. The Host
Interface (HIF) specifies a set operating system services. The HIF services are
described and their relevance put in context.
Chapter 3
explains how to program a 29K at assembly level. Methods of
partioning and accessing a processor’s register space are described. This includes the
special register space which can only be reached by assembly level instructions. The
reader is shown how to deal with such topics as branch delay slots and memory access
latency. It is not expected that application programs will be developed in assembly