AN2072 Freescale Semiconductor / Motorola, AN2072 Datasheet - Page 20

no-image

AN2072

Manufacturer Part Number
AN2072
Description
AN2072, Decision Feedback Equalizer for StarCore-Based DSPs
Manufacturer
Freescale Semiconductor / Motorola
Datasheet
Implementation of the Algorithm
20
2.
;***************************************************************************
loop_address_setting:
loop_compute:
In the Matlab code, the monic matrix L (L_matrix) of the LDL* Cholesky factor is generated by
multiplying each column of matrix A by the reciprocal of the diagonal entry for that column. In the
assembly routine, a new array called L_matrix is formed in the same way but only a subset of matrix
L is generated in the DSP implementation. To clarify this point, Figure 8 on page 20 depicts an
example showing the elements of matrix A that are used in forming the L_matrix (here the optimum
delay is assumed to be 8). The e direction of the arrow shows how the contents of L_matrix are
arranged in memory. The L_matrix array is filled with elements l(8,7), l(7,6), l(8,6), l(6,5), l(7,5),
l(8,5)…where l(i,j)=a(i,j)/a(j,j).
The entries of L_matrix are processed and the results are stored in an intermediate array, v (same
notation as the Matlab code).
Note that in the Matlab code, the array labeled v is filled from the back (that is; the first element
computed is the last entry in v). In the DSP routine, the v array is filled in the opposite way, that is, the
first value computed is the first element in array v. Therefore, at the end of filling array v, the pointer
points to the last element of the array v. Filling the array in this direction is helpful because the next
loop, the loop that computes w_opt, can read the entries from array v by simply decrementing the
address register by one each time.
a 10 1
a 1 1
a 2 1
a 3 1
a 4 1
a 5 1
a 6 1
a 7 1
a 8 1
a 9 1
(
(
(
(
(
(
(
(
(
(
loopstart0
move.f (r0),d1 doen1 d8
jsr one_over_x
loopstart1
adda n0,r0
move.2f (r0),d4:d5
mpy d4,d0,d6
,
,
,
,
,
,
,
,
,
,
) a 1 2
) a 2 2
) a 3 2
) a 4 2
) a 5 2
) a 6 2
) a 7 2
) a 8 2
) a 9 2
) a 10 2
(
(
(
(
(
(
(
(
(
(
Decision Feedback Equalizer for StarCore™-Based DSPs, Rev. 1
,
,
,
,
,
,
,
,
,
,
Code Listing 7. DSP Code that Generates the L_Matrix
) a 1 3
) a 2 3
) a 3 3
) a 4 3
) a 5 3
) a 6 3
) a 7 3
) a 8 3
) a 9 3
) a 10 3
Figure 8. Generating L_Matrix for Back Substitution
(
mpy d5,d0,d7
(
(
(
(
(
(
(
(
(
,
,
,
,
,
,
,
,
,
,
) a 1 4
) a 2 4
) a 3 4
) a 4 4
) a 5 4
) a 6 4
) a 7 4
) a 8 4
) a 9 4
) a 10 4
(
(
(
(
(
(
(
(
(
(
,
,
,
,
,
,
,
,
,
,
) a 1 5
) a 2 5
) a 3 5
) a 4 5
) a 5 5
) a 6 5
) a 7 5
) a 8 5
) a 9 5
) a 10 5
(
(
(
(
(
(
(
(
(
(
,
,
,
,
,
,
,
,
,
,
) a 1 6
) a 2 6
) a 3 6
) a 4 6
) a 5 6
) a 6 6
) a 7 6
) a 8 6
) a 9 6
) a 10 6
(
(
(
(
(
(
(
(
(
(
,
,
,
,
,
,
,
,
,
,
) a 1 7
) a 2 7
) a 3 7
) a 4 7
) a 5 7
) a 6 7
) a 7 7
) a 8 7
) a 9 7
) a 10 7
; forloop for moving pointer to
; previous col. in the cholesky
; matrix
; d1=diagonal elenemt, d8=counter
; d0=1/diagonal element, d2=scale
; factor
; start for loop to fill up
; L_matrix
; r0->next element in the col.
; d4=real and d5=image od the
; elements down the col.
; d6=real(1/diagonal)*elements in
; the same col.
; d7=imag(1/diagonal)*elements in
(
(
(
(
(
(
(
(
(
(
,
,
,
,
,
,
,
,
,
,
) a 1 8
) a 2 8
) a 3 8
) a 4 8
) a 5 8
) a 6 8
) a 7 8
) a 8 8
) a 9 8
) a 10 8
(
(
(
(
(
(
(
(
(
(
,
,
,
,
,
,
,
,
,
,
) a 1 9
) a 2 9
) a 3 9
) a 4 9
) a 5 9
) a 6 9
) a 7 9
) a 8 9
) a 9 9
) a 10 9
(
(
(
(
(
(
(
(
(
(
,
,
,
,
,
,
,
,
,
,
) a 1 10
) a 2 10
) a 3 10
) a 4 10
) a 5 10
) a 6 10
) a 7 10
) a 8 10
) a 9 10
) a 10 10
(
(
(
(
(
(
(
(
(
(
Freescale Semiconductor
,
,
,
,
,
,
,
,
,
,
)
)
)
)
) a 5 1 1 ( )
)
)
)
)
) a 10 11
a 1 11
a 2 11
a 3 11
a 4 11
a 6 11
a 7 11
a 8 11
a 9 11
(
(
(
(
(
(
(
(
(
(
,
,
,
,
,
,
,
,
,
,
)
)
)
)
)
)
)
)
) a 10,
) a 5 1
a 1 1
a 2 1
a 3 1
a 4 1
a 6 1
a 7 1
a 8 1
a 9 1
(
(
(
(
(
(
(
(
(
(
,
,
,
,
,
,
,
,
,

Related parts for AN2072