Пр о ц е с с о р TMS 3 2 0C4 x
164
Пример Д.2. Программа БПФ
(Кули-Тьюки, основание 2, прореживание по времени)
; В скобках дано время выполнения в циклах и временная группа в
; соответствии с алгоритмом, в которую входит данная команда
; Память: код
36 слов
;
константы
84 слова
;
входной массив 128 слов
; Время выполнения 64-точечного БПФ
3110 циклов ( 124.4 мкс )
.version
40
.ref
_SINE, _INPUT
.global
START
.data
Const
.word
_SINE
; адрес таблицы
W
.word
_INPUT
; адрес входного массива
.word
64
; размерность БПФ N
.word
6
; log
2
(N)
.text
START
LDPK
Const
;
начальная инициализация параметров
(1:T
0
)
LDI
@Const, AR3
; адрес таблицы
W
(1:T
0
)
LDI
@Const+2, R8
; размерность БПФ N
(1:T
0
)
LDI
@Const+1, AR5
; адрес входного массива
(1:T
0
)
LDI
@Const+3, AR7
; log2(N)
(1:T
0
)
SUBI
1, AR7
; количество ступеней
(1:T
0
)
LDI
1, R9
; количество “бабочек”
(1:T
0
)
ASH3-2, R8, IR1
; количество групп N/4
(1:T
0
)
ASH
-1, R8
; R8 = N/2
(1:T
0
)
LDI
AR5, AR4
; адрес входных данных
(1:T
0
)
; для первой группы
T
0
= 10
S_LOOP
;
инициализация цикла по ступеням
SUBI3
1, R8, AR2
;
(1:T
1
)
ASH31, R9, IR0
; IR0 = 2R9
T
1
= 2
(1:T
1
)
G_LOOP
;
инициализация цикла по группам
SUBI
1, R9, RC
;
(1:T
2
)
∗
butterfly loop
;
цикл по “бабочкам”
RPTBD
B_LOOP
;
(1:T
2
)
LDI
AR3, AR1
;
(1:T
2
)
LDI
AR4, AR0
;
(1:T
2
)
ADDI
AR0, IR0, AR6
;
T
2
= 4
(1:T
2
)
MPYF3
∗
AR6,
∗
+AR1(IR1), R2
; a
∗
cos
(3:T
3
)
MPYF3
∗
+AR6(1),
∗
AR1, R3
; b
∗
sin
(1:T
3
)
MPYF3
∗
AR6,
∗
AR1, R0
; a
∗
sin
(1:T
3
)