2009-03-26
1
Procesory sygnałowe
Materiały ilustracyjne do wykładu.
Przygotowane z wykorzystaniem materiałów
firmy Texas Instruments
Dr Krzysztof Kardach
(ver. 5.0 - marzec 2009)
Część IV
Tryby adresacji rozkazów w ‘C5400
2009-03-26
Procesory sygnałowe I / IV
2
Wykaz wykorzystanych materiałów
Bruno Pillard „An Introduction To Digital Signal Processors”;
Uniwersytetu Sherbrooke
TMS320C54x DSP Functional Overview [CD-ROM, materiały
podstawowe = C54xx_OV_spru307a.pdf ]
TMS320C54x DSP Reference Set - CPU and Peripherals [CD-ROM,
materiały podstawowe = C54x_CPU_&_Priph_spru131g.pdf]
TMS320C54x DSP Reference Set - Mnemonic Instruction Set [CD-
ROM, materiały podstawowe = C54x_Mnem_Instr_Set_spru172c.pdf]
Peter Robinson TMS320 Algorithm Debugging Techniques; SPRA084
TLC320ADC50 Data Manual; SLAS131E
TMS320C54x Design Workshop – materiały firmy Texas Instruments
2009-03-26
2
2009-03-26
Procesory sygnałowe I / IV
3
Istotne cele
Poznanie wszystkich dostępnych siedmiu podstawowych
trybów adresacji i ich przeznaczenia
Wyrażanie stałych poprzez adresację natychmiastową
Poznanie dostępu do tabel poprzez pośrednie adresowanie –
podobne do użycia wskaźników
Wybór optymalnego sposobu adresacji pośredniej
Wypracowanie metod dostępu do pamięci danych
Określenie i wypracowanie metod nadzoru i przekraczania
granic stron pamięci danych
Prosty dostęp do zmiennych na stosie i MMRs
Adresacja
Przykład
Przeznaczenie, zalety
Tryby adresacji
Natychmiastowa
LD #10,A
Operand bezpośrednio w kodzie rozkazu
(Immediate)
Użyteczny do inicjalizacji
Pośrednia
LD *AR1,A
Adresem operandu jest zawartość aktywnego
(Indirect)
rejestru (ARi) użyta jako wskaźnik
Bezpośrednia
LD @x, A
Adresacja względem wskaźnika strony - DP
(
Direct)
albo wskaźnika stosu - SP
Akumulatorem
READA x
Adresem operandu w pamięci programu
(
Accumulator)
jest zawartość akumulatora
Absolutna
STL A,*(y)
Używa 16-to bitowego adresu dowolnej komórki
(Absolute)
Wymusza dwusłowowy rozkaz
MMR LDM ST1,B
Adresacja z użyciem nazwy rejestru MMR
Szybki dostęp do rejestrów MMR
Na stosie
PSHM AG
Push / Pop danej z pamięci danych lub z MMRs
(on
Stack)
(rejestrów widocznych w przestrzeni pamięci)
Uwaga:Asembler przyjmie również zapis LD x,A dla adresacji bezpośredniej.
Generowanie adresów danych
2009-03-26
3
2009-03-26
Procesory sygnałowe I / IV
5
Adresacja natychmiastowa
16-bitowa natychmiastowa
16-bitowy operand
2 słowa, 2 cykle
Optymalny do initializacji
Przykład:
LD
#1234h,A
Load to A #
1 2 3 4
Przykład:
LD
#12h,A
Load A # 1 2
Krótka natychmiastowa
Użyteczna w ograniczonych
przypadkach
Operandy 3, 5, 8 lub 9 bitów
1 słowo, 1 cykl
Do inicjalizacji:
Akumulator (8)
DP (9)
ASM (5)
itp.
2009-03-26
Procesory sygnałowe I / IV
6
Stałe w adresacji natychmiastowej
3 & 5-bit
Constants
8-bit
Constant
9-bit
Constant
16-bit
Constant!
LD
LD
RPT
FRAME
LD
LD
ADD
RPT
ADDM
AND
RPTZ
ANDM
ST
BITF
STM
CMPM
SUB
XOR
ORM
MAC
XORM
OR
! – 2 słowa, 2 cykle - !
2009-03-26
4
2009-03-26
Procesory sygnałowe I / IV
7
Adresacja absolutna
Dostęp do dowolnego operandu z pamięci.
Adres wyrażany skrótami dmad, pmad, PA i *(lk)
Zawsze rozkaz o co najmniej dwóch słowach
Przykład
Pamięć danych
Addr
Data
.data
x:
.word 1000h
y:
.word 0500h
.text
LD
*(x),A
0 0 0 0 0 0 1 0 0 0
Acc A
ADD *(y),A
. .
. .
x: 01FF 1000
y: 0200 0500
. .
. .
0 0 0 0 0 0 1 5 0 0
2009-03-26
Procesory sygnałowe I / IV
8
Typ
Realizujące go rozkazy
Przykłady:
Typy adresacji absolutnej
dmad
pmad
PA
*(lk)
MVDK
Smem, dmad
MVDM
dmad, MMR
MVKD dmad,
Smem
MVMD
MMR, dmad
FIRS
Xmem, Ymem, pmad
MACD
Smem, pmad, src
MACP
Smem, pmad, src
MVDP
Smem, pmad
MVPD
pmad, Smem
PORTR
PA, Smem
PORTW
Smem, PA
Wszystkie rozkazy używające pojedynczych operandów z pamięci danych.
MVKD DATA, *AR5
albo jego odpowiednik:
MVKD *(DATA), *AR5
MVDP *AR7-, TABLE
albo jego odpowiednik:
MVDP *AR7-, *(TABLE)
PORTW COEFF, 1FB0h
albo jego odpowiednik:
PORTW *(COEFF), 1FB0h
Cztery typy adresacji absolutnej.
2009-03-26
5
2009-03-26
Procesory sygnałowe I / IV
9
Adresacja akumulatorem
Używa zawartości akumulatora jako adresu operandu w pamięci programu.
READA Smem
; pmad => dmad
; A(15:0) - adres w pam. prog. (pmad)
; Smem - adres w pam. danych (dmad)
UWAGA:
dla procesorów ‘C548 i ‘C549, do określenia adresu w pamięci programu
używane są bity (22:0) akumulatora A
WRITA Smem
;dmad => pmad
; Smem - adres w pam. danych (dmad)
; A(15:0) - adres w pam. prog. (pmad)
2009-03-26
Procesory sygnałowe I / IV
10
Układowa realizacja idei wskaźników (pointers)
Dostępne osiem ARs (Address or Auxiliary Registers)
AR0 może zawierać wartość indeksu
Umożliwia szybki i efektywny dostęp do list, tablic...
ARs mogą być modyfikowane „w tle” rozkazu
Przykład
.bss x,5
∑
=
=
5
1
n
n
x
y
.text
LD
*AR1 ,A
ADD
*AR1 ,A
ADD
*AR1 ,A
ADD
*AR1 ,A
ADD
*AR1 ,A
Dane
x1
x2
x3
x4
x5
x
AR1
STM
#x,AR1
+
+
+
+
STL
A,*(y)
y
Adresacja pośrednia (*)
K^2 - 10
2009-03-26
6
2009-03-26
Procesory sygnałowe I / IV
11
Realizuje uaktualnienie o krok w procesie modyfikacji.
AR0 zawiera wielkość kroku.
Ten sposób wybiera się notacją *ARn+0 lub *ARn-0.
Pre-modyfikacja o 16-bit stałą ( *+ARn(lk) )
wymaga dodatkowego cyklu
Przykład:
∑
=
=
5
1
2
n
n
x
y
.bss x,10
.text
STM
#x+1,AR1
LD
*AR1+ ,A
ADD
*AR1+ ,A
ADD
*AR1+ ,A
ADD
*AR1+ ,A
ADD
*AR1 ,A
STL
A,*(y)
P. Danych
AR1 x
X1
X2
X3
X4
X5
X6
X7
X8
x9
X10
y
STM
#2,AR0
0
0
0
0
Adresowanie pośrednie z indeksacją
K^2 - 11
2009-03-26
Procesory sygnałowe I / IV
12
Opcje pośredniej adresacji
Bez modyfikacji *ARn
Arn bez zmian
Opcja
Składnia
Realizacja
Używa:
Absolutna
*(lk)
16-bit stała lk użyta jako adres absolutny
Patrz adresacja absolutna
Pre-modyfik.
*ARn (lk) *(ARn+LK), ARn bez zmian!
*+ARn (lk) *(ARn+LK),
ARn zmienione
*+ARn (lk)% *(ARn+LK), ARn zmienione – kołowo BK
*+ARn
pre-inkrement o 1, tylko dla zapisu
Z odwr.bitów
*ARn+0B post ink. ARn by AR0 z odwr.bitów
AR0
(Bit-Reversed)
*ARn-0B post dek. ARn by AR0 z odwr. bitów
(=FFT size/2)
Kołowa
*ARn+% post inkrement o 1 - kołowo
BK
(Circular)
*ARn-% post dekrement o 1 - kołowo
*ARn+0% post inkrement o AR0 - kołowo
BK, AR0
*ARn-0% post dekrement o AR0 - kołowo
Indeksowana
*ARn+0 post inkrement o zawartość AR0
AR0
*ARn-0 post dekrement o zawarość AR0
Inkrement / *ARn+ post inkrement o 1
Dekrement
*ARn-
post dekrement o 1
K^2 - 12
2009-03-26
7
Inicjalizacja wskaźników przed ich użyciem
Uwzględnienie opóźnień efektów (zależnie od rozkazów):
Bez opóźnienia
STM, MVDK
1 cykl dodatkowy
MVDM, MVKD, MVDD
2 cykle dodatkowe
STLM, ST, etc
W debugerze rejestry ARs są czytane/modyfikowane w fazie dostępu
stąd symulator pokaże wcześniej zmianę ARs!.
CMPT (bit5, ST1) musi być = 0
jest 0 po RESET
Jest ustawiany na 0 poprzez rozkaz RSBX CMPT
CMPT (Compatibility Mode Bit) = 1 ustawia sposób pracy
kompatybilny z ‘C2x/’C2xx/C5x (NARP dla ARs.)*
•Korzystanie z tego sposobu pracy zawsze ogranicza możliwości procesora
dlatego nie zaleca się pracy w trybie CMPT bez wyraźnej potrzeby
Problemy adresacji pośredniej
2009-03-26
Procesory sygnałowe I / IV
14
Adresacja bezpośrednia
W adresacji bezpośredniej rozkaz zawiera 7 młodszych bitów adresu w pamięci
danych (dma).
Opcode
I=0
dma
15 - 8
7
6 - 0
Gdy bit CPL (Compiler) w rejestrze ST1 jest = 0, to pole dma jest łączone z
9-bitami pola DP w ST0 by utworzyć 16-bitowy adres w pamięci danych.
7-bit dma
9-bit DP
Gdy bit CPL = 1, to zawartość pola dma jest dodawana (dodatni offset) do
zawartości wskaźnika stosu (SP) tworząc 16-bitowy adres w pamięci danych.
16-bit Stack Pointer
7-bit dma
+
16-bit Data Memory Address
2009-03-26
8
2009-03-26
Procesory sygnałowe I / IV
15
Adresacja bezpośrednia – względem (DP)
Umożliwia pracę rozkazami o 1 słowie i w 1 cyklu procesora
Siedmiobitowy adres (dma) zapewnia dostęp do 128 słów na stronie
Strony wskazuje zawartość pola DP rejestru statusowego ST0.
.data
x:
.word 01000
y:
.word 00500
Pamięć danych
Addr
Data
0180
0001
. .
x: 01FF
1000
y: 0200
0500
. .
.text
LD
#x,DP
Acc A
- - - - - - - - - -
0 0 3
DP
LD
@x,A
0 1 0 0 0
0 0 3
ADD @y,A
0 1 0 0 1
0 0 3
2009-03-26
Procesory sygnałowe I / IV
16
Adresacja bezpośrednia - łączenie danych w bloki
MEMORY {
PAGE 1: HISRAM: org=100h len=080h
HERRAM: org=210h len=200h
ITSRAM: org=500h len=100h
}
SECTIONS {
vars1 :> HISRAM PAGE 1
vars2 :> HERRAM PAGE 1 BLOCK=64
vars3 :> ITSRAM PAGE 1
}
vars1: Podanie rozmiaru = stronie zapewnia kontrolę rozmieszczenia.
- będzie ostrzeżenie gdy sekcja vars1 będzie większa niż 80h
vars2: Gwarancja umieszczenia danych na tej samej stronie.
- blokowanie wymusza rozmiar sekcji na 2, 4, 8, …128
Wszystkie 3 metody wymagają starannego opisu w zbiorze konfiguracyjnym linkera - linker.cmd
x .usect “vars3”,4,1
;żądanie łączenia zmiennych razem, „1” w trzecim
;polu to sygnał łączenia w blok!
y .set x+3
;przypisze zmienną do zdefiniowanego bloku
vars3: W asemblerze - zagwarantowanie umieszczenia danych na tej samej stronie –
- użycie flagi blokowania by wymusić lokowanie na tej samej stronie
- warto również użyć dyrektywy “
.def y” by widzieć zmienną ‘y’ w debugerze
2009-03-26
9
2009-03-26
Procesory sygnałowe I / IV
17
.bss x,2,1
y
.set x+1
Przykład adresacji bezpośredniej - blokowej
.text
LD
#x,DP
LD
@x,A
0 1 0 0 0
0 0 4
ADD @y,A
0 1 5 0 0
0 0 4
Pamięć danych
Addr
Data
100
1FF ----
200
1000
201
0500
x
y
...
MEMORY { PAGE 0: ...
PAGE 1: SPRAM: org = 00060h len = 00020h }
SECTIONS{ ...
.bss
: > SPRAM PAGE 1
}
Acc A
- - - - - - - - - -
0 0 4
DP
2009-03-26
Procesory sygnałowe I / IV
18
Problemy adresacji bezpośredniej
Programista musi dbać o gospodarkę stronami i ich rozmiar.
Narzędzia NIE OSTRZEGAJĄ o przekraczaniu granic stron.
Bit CPL (Compiler) w ST1 musi być 0 dla adresacji względem DP.
ST1 = 0 po operacji RESET.
Jest wymuszane również rozkazem RSBX CPL.
Adresacja użyteczna dla szybkiego dostępu ale do ~100 zmiennych.
Jeśli zmiennych >100 , używaj wskaźników.
Gdy czas nie jest krytyczny – użyj adresacji absolutnej.
Zalecenie: Uważnie obserwuj DP w trakcie testowania programu:
Polecenie Î
WA
ST0>>7, Base = , x
da na monitorze "Base = " . . . . (kodowany hex adres
aktywnej strony pamięci danych) w okienku WATCH.
2009-03-26
10
2009-03-26
Procesory sygnałowe I / IV
19
Adresacja bezpośrednia na stosie – porzez SP
Sposób podobny do adresacji względem DP
Używa jako bazy 16-bit SP zamiast 9-MSB DP
Użyteczne do operacji na stosie
Przykład
.text
SSBX CPL
Pamięć danych
0100
0050
SP
LD
@1,A
Acc A
ADD
@2,A
0 0 0 0 0 0 0 1 5 0
Uwaga:
1. Adresacje względem SP i DP nie mogą być stosowane równocześnie!
2. Odtwarzaj CPL = 0 (RSBX CPL) przed rozpoczęciem adresacji bezpośredniej.
3. po RESET CPL = 0.
0 0 0 0 0 0 0 1 0 0
2009-03-26
Procesory sygnałowe I / IV
20
Adresacja na stosie
Cztery instrukcje dostępu do stosu używają trybu adresacji stosowej.
PSHD odsyła daną z pamięci danych na stos.
PSHM odsyła zawartość rejestru MMR na stos.
POPD pobiera ze szczytu stosu daną i odsyła do pamięci danych.
POPM pobiera ze szczytu stosu daną i odsyła do rejestru MMR
PUSH pre-dekrementuje a
POP post-inkrementuje adres w wskaźniku stosu (SP)
.
2009-03-26
11
2009-03-26
Procesory sygnałowe I / IV
21
Adresacja rejestrów MMR
DP i SP są ignorowane dla adresacji MMR i nie zmieniane
Ignorowany jest również CL - nie zmieniany
Umożliwia dostęp do wszystkich zasobów na stronie 0
(MMRs and SPRAM)
Używa specyficznych mnemoników dla MMR
LDM, STLM
MMR
⇔ Acc
STM
#
⇒ MMR
PSHM, POPM
MMR
⇔ Stack
MVDM, MVMD
MMR
⇔ DMem
MVMM
AR, SP, BK
⇔ AR, SP, BK
Przykład
LDM
ST1,B
OR
#4000,B
STLM
B,ST1
.mmregs
Włącza użycie nazw rejestrów MMR
Uwaga: W adresacji pośredniej MMR 9 MSB’s
użytego rejestru pomocniczego jest
ustawiane na „0” po wykonaniu operacji.
2009-03-26
Procesory sygnałowe I / IV
22
Rejestry widoczne w pamięci (MMR)
Addr.
Nazwa
(Hex)
Opis
IMR
0000
Interrupt Mask Register
IFR
0001
Interrupt Flag Register
-----
2 - 5
Reserved
ST0
0006
Status 0 Register
ST1
0007
Status 1 Register
AL
0008
A accumulator low (A[15:00])
AH
0009
A accumulator high (A[31:16])
AG
000A
A accumulator guard (A[39:32])
BL
000B
B accumulator low (B[15:00])
BH
000C
B accumulator high (B[31:16])
BG
000D
B accumulator guard (B[39:32])
T
000E
Temporary Register
TRN
000F
Transition Register
Addr.
Nazwa
(Hex)
Opis
AR0
0010
Address Register 0
AR1
0011
Address Register 1
AR2
0012
Address Register 2
AR3
0013
Address Register 3
AR4
0014
Address Register 4
AR5
0015
Address Register 5
AR6
0016
Address Register 6
AR7
0017
Address Register 7
SP
0018
Stack Pointer Register
BK
0019
Circular Size Register
BRC
001A
Block Repeat Counter
RSA
001B
Block Repeat Start Address
REA
001C
Block Repeat End Address
PMST
001D
PMST Register
-------
01E-01F Reserved
Rozmiar XPC i adresy MMR dla peryferii zależą od procesora!
2009-03-26
12
2009-03-26
Procesory sygnałowe I / IV
23
Ćwiczenie: Adresacja 1
Dane: DP=0
DP=4
DP=6
Address/Data (hex)
60
20
200 100
300
100
CPL=0
61
120
201
60
301
30
CMPT=0
62
202
40
302
60
Program
A
B
DP AR0
AR1
AR2
LD
#0,DP
STM #2,AR0
STM #200h,AR1
STM #300h,AR2
LD
@61h,A
ADD *AR1+,A
SUB @60h,A,B
ADD *AR1+,B,A
LD
#6,DP
ADD @1,A
ADD *AR2+,A
SUB *AR2+,A
SUB #32,A
ADD *AR1-0,A,B
SUB *AR2-0,B,A
STL A,62h
2009-03-26
Procesory sygnałowe I / IV
24
Ćwiczenie: Adresacja 1b
Program
A
B
DP AR0
AR1
AR2
LD
#0,DP
STM
#2,AR0
STM
#200h,AR1
STM
#300h,AR2
LD
@61h,A
ADD
*AR1+,A
SUB
@60h,A,B
ADD
*AR1+,B,A
LD
#6,DP
ADD
@1,A
ADD
*AR2+,A
SUB
*AR2+,A
SUB
#32,A
ADD
*AR1-0,A,B
SUB
*AR2-0,B,A
STL
A,62h
Dane: DP=0
DP=4
DP=6
Address/Data (hex)
60
20
200 100
300 100
CPL=0
61 120
201
60
301
30
CMPT=0
62
202
40
302
60
0
2
200
300
120
220
201
200
260
202
6
290
390
301
360
302
340
380
200
320
300
?320?
•
•
•
360
361
362 . . .
•
•
•
320
2009-03-26
13
2009-03-26
Procesory sygnałowe I / IV
25
Ćwiczenie: Adresacja 1c - rozwiązanie
0
2
200
300
120
220
201
200
260
202
6
290
390
301
360
302
340
380
200
320
300
Dane: DP=0
DP=4
DP=6
Address/Data (hex)
60
20
200 100
300 100
CPL=0
61 120
201
60
301
30
CMPT=0
62
202
40
302
60
-----
•
•
•
360
361
362 . . .
•
•
•
320
K^2 - 25
Program
A
B
DP AR0
AR1
AR2
LD
#0,DP
STM
#2,AR0
STM
#200h,AR1
STM
#300h,AR2
LD
@61h,A
ADD
*AR1+,A
SUB
@60h,A,B
ADD
*AR1+,B,A
LD
#6,DP
ADD
@1,A
ADD
*AR2+,A
SUB
*AR2+,A
SUB
#32,A
ADD
*AR1-0,A,B
SUB
*AR2-0,B,A
STL
A,62h
2009-03-26
Procesory sygnałowe I / IV
26
Istotne pojęcia, mechanizmy do przyswojenia
TRYBY ADRESACJI
• pośredni
• bezpośredni
• absolutny
• natychmiastowy
• MMR
• wskaźnikiem stosu
• Akumulatorem
• postmodyfikacja
• premodyfikacja
• adr. Indeksowana
• adr. kołowa
• bufor cyrkulacyjny
• adr. z odwr. bitów
• użycie zasobów do adresacji
• ...
2009-03-26
14
2009-03-26
Procesory sygnałowe I / IV
27
- Prosty przykład ilustrujący –
podgląd obiektów - Watches,
pułapki – Breakpoints,
ocena efektywności - Benchmarking
Warto zerknąć do instrukcji programu debugger!
2009-03-26
Procesory sygnałowe I / IV
28
Ilustracja zadania przenoszenia danych
Szkic kodu (bez pętli)
P
D
.text
vectors
.bss
.data
AR(dst)
AR(src)
LD
(src1)
ACC
STL
(dst1)
LD
(src2)
STL
(dst2)
...
...
done
B
done
Sugestie:
Wybierz najlepszy sposób adresowania
Napisz wyłącznie liniowy program, bez pętli
Na optymalizację przyjdzie jeszcze czas
2009-03-26
15
2009-03-26
Procesory sygnałowe I / IV
29
Kolejność postępowania
1. Skopiuj LAB2D.ASM do LAB3.ASM. Zmodyfikuj LAB3
zastępując NOPy kodem kopiowania 9-ciu danych z
tablicy do wskazanego RAM, jak pokazano poprzednio.
2. Skopiuj LAB2D.CMD do LAB3.CMD. Popraw zgodnie z
potrzebami LAB3 .
3. Asembluj i linkuj program. Sprawdź czy zbiory .LST i
.MAP są zgodne z oczekiwaniami.
4. Przejdź krokowo przez program w symulatorze. Sprawdź
działanie; jeśli zajdzie potrzeba zdebuguj.
Jeśli czas pozwoli dodaj element; utwórz obszar "status" a
następnie skopiuj ST0 do status. Jaki sposób adresacji
będzie tutaj najlepszy? Dlaczego? (zapisz i uzasadnij)
2009-03-26
Procesory sygnałowe I / IV
30
LAB3.ASM : rozwiązanie
; LAB3.ASM: Data Xfer solution
.def start,table,x
.bss
x,4
.bss
a,4
.bss
y,1
.data
table: .word 1,2,3,4
.word 8,6,4,2,0
.text
NOP
start: STM #table,AR1
STM #x,AR2
LD *AR1+,A ;1
STL A,*AR2+
LD *AR1+,A ;2
STL A,*AR2+
LD *AR1+,A ;3
STL A,*AR2+
LD *AR1+,A ;4
STL A,*AR2+
LD *AR1+,A ;5
STL A,*AR2+
LD *AR1+,A ;6
STL A,*AR2+
LD *AR1+,A ;7
STL A,*AR2+
LD *AR1+,A ;8
STL A,*AR2+
LD *AR1+,A ;9
STL A,*AR2+
; Optional process solution
.mmregs
.bss
status,1
.def status
option: LDM ST0,A
STL A,*(status)
done: B done
2009-03-26
16
2009-03-26
Procesory sygnałowe I / IV
31
LAB3.CMD : rozwiązanie
lab3.obj
vectors.obj
-o lab3.out
-m lab3.map
MEMORY { PAGE 0: EPROM: org = 0E000h len = 01F80h
VECS: org = 0FF80h len = 00080h
PAGE 1: SPRAM: org = 00060h len = 00020h
DARAM: org = 00080h len = 01380h
}
SECTIONS{
.vectors: > VECS PAGE 0
.text : > EPROM PAGE 0
.data : > DARAM PAGE 1
.bss
: > SPRAM PAGE 1
}