<< Chapter < Page | Chapter >> Page > |
Where do the actual operations such as multiplication and addition take place? The C6000 CPU has several
functional units that perform the actual operations. Each register file has 4 functional units named
.M
,
.L
,
.S
, and
.D
. The 4 functional units connected to the register file A are named
.M1
,
.L1
,
.S1
, and
.D1
. Those connected to the register file B are named
.M2
,
.L2
,
.S2
, and
.D2
. For example, the functional unit
.M1
performs multiplication on the operands that are in register file A. When the CPU executes the
MPY .M1 A0, A1, A3
above, the functional unit
.M1
takes the value stored in
A0
and
A1
, multiply them together and stores the result to
A3
. The
.M1
in
MPY .M1 A0, A1, A3
indicates that this operation is performed in the
.M1
unit. The
.M1
unit has a 16 bit multiplier and all the multiplications are performed by the
.M1
(or
.M2
) unit. The following diagram shows the basic architecture of the C6000 family and functional units.
Similarly, the
ADD
operation can be executed by the
.L1
unit. The
.L1
can perform all the logical operations such as bitwise AND operation (
AND
instruction) as well as basic addition (
ADD
instruction) and subtraction (
SUB
instruction).
Read the description of the
ADD
and
MPY
instructions in SPRU733 or similar document for the processor you are using. Write an assembly program that computes
A0*(A1+A2)+A3
.
Quite often you need to load a register with a constant.
The C6x instructions you can use for this task are
MVK
,
MVKL
, and
MVKH
. Each of these instructions can
load a 16-bit constant to a register. The
MVKL
instruction loads the LOWER 16-bits and the
MVKH
instruction loads the HIGH 16-bits into the register. In order to load 32-bit values into a register, both instructions are needed.
(Loading constants): Write assembly instructions to do the following:
0xff12
to
A1
.0xabcd45ef
to
B0
.Contents of one register can be copied to another register
by using the
MV
instruction. There is
also the
ZERO
instruction to set a
register to zero.
Because the C6x processor has the so-called load/store
architecture, you must first load up the content of memoryto a register to be able to manipulate it. The basic
assembly instructions you use for loading are
LDB
,
LDH
, and
LDW
for loading up 8-, 16-, and 32-bit
data from memory. (There are some variations to theseinstructions for different handling of the signs of the
loaded values.)
However, to specify the address of the memory location to load from, you need to load up another register (used as anaddress index) and you can use various addressing modes to specify the memory locations in many different ways. The addressing mode is the method by which aninstruction calculates the location of an object in memory. The table below lists all the possible different ways tohandle the address pointers in the C6x CPU. Note the similarity with the C pointer manipulation.
Notification Switch
Would you like to follow the 'Dsp lab with ti c6x dsp and c6713 dsk' conversation and receive update notifications?