Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[LPC2131][ASM/uVision4] Kontroler pamięci MAM i zaniżona wydajność

Piesiu567 23 Lip 2012 00:48 1009 8
  • #1 23 Lip 2012 00:48
    Piesiu567
    Poziom 12  

    Mam prosty program napisany w języku ASM:

    Kod: asm
    Zaloguj się, aby zobaczyć kod


    Mikrokontroler taktowany jest kwarcem 10MHz. Konfiguracja PLL: Mnożnik=6, dzielnik=2 (PLLCFG = 0x00000025). Czyli sam procesor taktowany 60MHz. Przy każdym z rozkazów zapisałem ile jego wykonanie zajmuje w symulatorze taktów zegara. Rejestr r0 jest zatem negowany co 6 taktów i wysyłany na port wyjściowy. Na wyjściu każdego pinu powinien pojawić się sygnał prostokątny o częstotliwości 1/12 częstotliwości taktowania procesora, czyli 5MHz. Symulator potwierdzą tą teorię, ale niestety praktyka wygląda zupełnie inaczej. Po podłączeniu do oscyloskopu sygnał ma 1,5MHz. Pytanie, gdzie jest błąd?
    Ja widzę dwie możliwości: albo rozkazy trwają więcej niż mi powiedział symulator, albo kontroler pamięci MAM wprowadza dodatkowe opóźnienia. Podczas testów na oscyloskopie MAM był ustawiony na full enable z timingiem = 4. Po powrocie do domu doszukałem się informacji, że dla taktowania cpu 60MHz timing MAM można zmniejszyć do 3. Różnica między 5MHz, a 1,5MHz jest jednak bardzo duża i nie sądzę, że ten drobny szczegół mógłby wywołać taki spadek.
    W domu nie mam oscyloskopu, ale przetestowałem MAM innym programem. Program wyszukiwał liczby pierwsze z zakresu do 65000, a ja mierzyłem czas ile mu to zajmuje dla różnych konfiguracji MAM. Wyniki uzyskałem... dziwne. Dla MAM ustawionego na disable, partially enable i full enable czasy był kolejno coraz lepsze (14min, 7min i 4:40min). Czyli raczej prawidłowo, jednak jeżeli chodzi o różne timingi dla full enable to za każdym razem czas obliczeń był taki sam. Dla testowanych timingów 7,4,3 wynosił 4:40min. Dla timingu 1 mikrokontroler już nie działał. Pomiary te robione były ze stoperem i ich dokładność zależna jest od mojego słabego refleksu ;).

    Nie bardzo to ogarniam. Dlaczego różnica między częstotliwością wyjściową teoretyczną i zmierzoną jest tak duża? I dlaczego zwiększenie timingu nie wydłuża czasu obliczeń? W końcu kontroler MAM działa z większymi opóźnieniami. A może działa wolniej, ale różnicy nie da się zaobserwować na zwykłym stoperze?

    0 8
  • #2 23 Lip 2012 08:24
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Pierwsza sprawa jest taka, że MAM da różne efekty dla programu który ma 3 rozkazy i takiego który ma ich 300. Dodatkowo dochodzą opóźnienia związane np ze skokami warunkowymi.

    Druga sprawa jest taka, że na symulatorze raczej nie uwzględniłeś tego, że dostęp do adresów GPIO nie jest specjalnie szybki... Symulator to tylko taka ciekawostka jak dla mnie.

    4\/3!!

    0
  • #3 23 Lip 2012 10:24
    94075
    Użytkownik usunął konto  
  • #4 23 Lip 2012 20:00
    Piesiu567
    Poziom 12  

    Tak. To będzie chyba przyczyna. Przerobiłem kod i jak będe miał okazję to sprawdzę na oscyloskopie.
    Ciekawi mnie jeszcze dlaczego dla różnych opóźnień kontrolera MAM program działa tak samo

    0
  • #5 23 Lip 2012 20:16
    LordBlick
    VIP Zasłużony dla elektroda

    Piesiu567 napisał:
    Ciekawi mnie jeszcze dlaczego dla różnych opóźnień kontrolera MAM program działa tak samo
    Dopóki jesteś w trybie legacy GPIO to się nie masz czemu dziwić...

    0
  • #6 23 Lip 2012 23:07
    Piesiu567
    Poziom 12  

    Rzeczywiście jak ustawie GPIO jako fast, timingi wpływają na wydajność. Nigdzie nie w dokumentacji nie widzę informacji, że działają one dopiero w fart IO. Ale mniejsza z tym

    Jeszcze jedna sprawa. Po włączeniu Fast GPIO zauważyłem wyraźny spadek wydajności reszty programu (nie korzystający z portów). Dla przykładu podam, że mój programik testowy który z GPIO korzystna dopiero na końcu wykonywał obliczenia 4:40min bez fast GPIO i 6:55min z włączonym fast GPIO.

    Doszperałem się, że w legacy, GPIO korzystna z magistrali APB, a w trybie fast z magistrali lokalnej tej samej do której podłączona jest pamięć Flash i RAM. Czy jest możliwe, że włączenie fast GPIO zajmuje tą magistralę nawet jak nie używa się portów i to w taki sposób, że następuje wyraźny spadek wydajności? A jeżeli nie to dlaczego program wykonuje się wolniej? Skoro kontroler pamięci MAM w fast IO działa nieco inaczej to może one wprowadza jakieś opóźnienia?

    0
  • #7 24 Lip 2012 08:20
    Freddie Chopin
    Specjalista - Mikrokontrolery

    MAM nie ma nic wspólnego z GPIO, czy to fast czy legacy. Po prostu legacy GPIO jest tak wolne, że nawet jakby Twój układ chodził na 1GHz to i tak byłoby przeraźliwie wolno.

    4\/3!!

    0
  • #8 24 Lip 2012 08:53
    Piesiu567
    Poziom 12  

    A dlaczego w fast GPIO reszta programu działa wolniej niż w legacy?

    0
  • #9 24 Lip 2012 09:08
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Bo coś zepsułeś z resztą programu. Nie ma możliwości, żeby użycie fast GPIO "zwolniło" cały układ.

    P.S. Fast GPIO trzeba włączyć.

    4\/3!!

    0
  Szukaj w 5mln produktów