logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmel AVR pytanie o architekturę

12 Lut 2010 14:12 3221 28
  • #1 7682953
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #2 7683088
    tmf
    VIP Zasłużony dla elektroda
    Po prostu nie jest tak jak piszesz. Tak naprawde instrukcje trwaja co najmniej 2 takty - pobranie i dekodowanie i w kolejnym wykonanie. Tyle, ze w trakcie drugiego taktu pierwszej instrukcji pobierana i dekodowana jest kolejna, w efekcie efektywnie masz 1 instrukcje/takt. Ten mechanizm widac najlepiej w momencie kiedy kolejka jest pusta - instrukcje skokow, wejscia do procedur przerwan itd. Natomiast dokladnych szczegolow pewnie nie znajdziesz - jest to objete patentem i Atmel sie nie chwali.
  • #3 7683137
    Konto nie istnieje
    Konto nie istnieje  
  • #5 7683236
    Konto nie istnieje
    Konto nie istnieje  
  • #7 7683545
    Konto nie istnieje
    Konto nie istnieje  
  • #8 7683590
    Konto nie istnieje
    Poziom 1  
  • #9 7683689
    asembler
    Poziom 32  
    Inaczej mówiac tam gdzie nastepuje zmiana licznika programu PC procesor nie moze miec informacji o adresie nastepengo rozkazu i musi poczekac jeden takt az taka informacja sie pojawi stąd jeden tak wypada z obiegu.
  • #10 7683725
    Konto nie istnieje
    Poziom 1  
  • #11 7683782
    asembler
    Poziom 32  
    A mnie sie jednak wydaje ze procesor wykonując biezacy rozkaz pobiera z nastepnej w kolejnosci komórki rozkaz do dekodowania, a wykonanie rozkazu w ktorym nastepuje zamian PC powoduje wyzerowanie modulu odpowiadajacego za dekodowanie rozkazu i zmuszenie procesora do pobrania rozkazu z nowej lokalizacji.
    Tak jak ty piszesz to procesor nie mogłby przewidziec jaki jest nastepny adres i czekac az sie wykona poprzedni a nie zapominaj ze dopiero po wykonani rozkaz nastepuje zmiana PC a procesor juz dekoduje nastepny rozkaz w trakcie wykonania poprzedniego. I tu jest sprzecznosc w twoim rozumowaniu nie tak?
    Tak jak ty piszesz to rozkaz skoku trwalby 3 takty wukonanie rozkazu skoku (zmianaPC) pobranie nastepnego rozkazu i 3 takt wykonanie tegoż rozkazu.
  • #12 7683874
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #13 7683928
    asembler
    Poziom 32  
    Tak napisałem w uproszczeni ze wszsytkie rozkazy w ktorych PC po ich wykonaiu bedzie dopiero znany czyli rozkazy skoków wywolan podprogramow powrotów z podprogramów. Moze sie zle wyraziłem upraszczajac za bardzo. To co napisale w drugim poscie wydaje sie byc logiczne.
  • Pomocny post
    #14 7683943
    Konto nie istnieje
    Poziom 1  
  • #15 7721763
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #16 7722119
    tmf
    VIP Zasłużony dla elektroda
    Dlatego, ze rjmp zajmuje tylko jedno slowo, a jmp 2 slowa, wiec procesor potrzebuje dodatkowy cykl na odczyt dodatkowej komorki pamieci.
    AVR Studio to tylko symulator, nie musi dokladnie odzwierciedlac pewnych niuansow, ktore dla programu nie maja znaczenia. Zauwaz, ze AVR startuje w kilka-kilkaset tys. taktow zegara. Wiec realnie to, ze pierwsza wykonywana instrukcja zajmie o jeden cykl wiecej jest bez znaczenia, nie potrzeba wiec tego symulowac. Posrednio o tym, ze jest tak jak piszemy swiadczy obsluga przerwan. Zauwaz, ze jmp, ktory w czasie przerwania jest efektywnie wykonywany trwa 3 takty, a wejscie w przerwanie trwa 4. Ten dodatkowy takt potrzebny jest wlasnie na prefetch w celu zapelnienia kolejki.
  • #17 7725861
    Konto nie istnieje
    Konto nie istnieje  
  • #18 7738811
    Nawigator
    Poziom 33  
    Moim zdaniem jeden cykl rozkazu to 4 cykle zegara CPU który prawdopodobnie jest tworzony wewnętrznym układem PLL synchronizowanym z zegara systemowego.
    Do dyspozycji CPU jest więc 8 zboczy na kolejne fazy wykonywanego rozkazu.

    Dla kwarcu 20MHz częstotliwość PLL może wynosić więc 80MHz.

    N.
  • #19 7738864
    Konto nie istnieje
    Poziom 1  
  • #20 7743106
    Nawigator
    Poziom 33  
    To może nie mieć związku z zegarem rdzenia. PLL ma minimalną częstotliwość pracy i taktowania procesów wewnętrznych. Po wykonaniu rozkazu rdzeń po prostu czeka na początek zegara systemowego/zewnętrznego.
    Zobacz jak taktowany jest w niektórych Megach generator kwarcowy 32kHz dla RTC. Lubi sie opóźniać bo gubione są impulsy w procesie próbkowania.
    Zobacz też na pasmo EMC generowane przez AVR. Największa szpila jest na poczwórnej częstotliwości kwarcu.
    Oczywiście moje dywagacje mogą być mylne a na pewno 1000% to umrzemy.

    N.
  • #21 7743357
    Konto nie istnieje
    Konto nie istnieje  
  • #22 7757702
    Konto nie istnieje
    Konto nie istnieje  
  • #24 7758368
    Nawigator
    Poziom 33  
    Datasheet podaje poglądowy rysunek dla konsumentów chipsów bo też bardziej szczegółowa wiedza jest niepotrzebna do zaprogramowania i uruchomienia układu z procesorem.
    Kilka linków może ciekawych jak działa pipeline:
    http://en.wikipedia.org/wiki/Instruction_pipeline
    http://en.wikibooks.org/wiki/Microprocessor_Design/Print_Version
    oraz stary juz pdf z 99r o rdzeniu avr:
    http://www.atmel.com/dyn/resources/prod_documents/0890s.pdf
    gdzie ciekawostką są tytułowe zdania:
    - Fully Static Operation, 0-33 MHz (0.5 micron), 0-45 MHz (0.35 micron)
    - Faster Version can be Created Upon Request

    N.
  • #25 7758421
    michalko12
    Specjalista - Mikrokontrolery
    marcel333 napisał:
    Moim zdaniem instrukcja musi trwać dwa cykle zegarowe wynika to z datasheet-u np. Atmega8:
    Datasheet
    strona 14 'Figure 5' gdzie podany jest timing instrukcji wykonywanej w dwóch cyklach (taktach) zegarowych ('fetch' potem w drugim 'execute'). Obrazek poniżej 'Figure 6' pokazuje niby timing operacji wykonywanej w rzeczywistym jednym takcie jednak wydaje mi się że jest to faza (stan) 'execute' przed którą musiała być faza 'fetch' co daje dwa cykle zegarowe całości. Może ktoś się wypowie na ten temat.
    Pozdrawiam

    W zależności od rozkazu i typu AVRa, czas jego wykonania trwa od jednego do 5 cykli. Nie ma sensu wnikać w pipelining. Jeśli są po sobie 3 rozkazy jednocyklowe to zostaną one wykonane w 3 cyklach. Są trzy rodzaje rozkazów wielocyklowych. Jedne to takie na których wykonanie dekoder instrukcji potrzebuje więcej czasu wtedy pobieranie z potoku jest wstrzymane np MUL, drugi rodzaj to takie które potrzebuję dodatkowe dane, wtedy wykonanie rozkazu jest wstrzymane do momentu pobrania dodatkowych danych z potoku i dopiero wtedy następuje wykonanie rozkazu w 1 cyklu np STS,w czasie wykonywania tej instrukcji jest uzupełniany potok i trzeci rodzaj to takie które potrzebują dodatkowe dane i więcej czasu na wykonanie np CALL. Obsługa potoku jest wliczona w czas wykonywania rozkazu i nie ma sensu wnikać w jego istnienie i działanie.
  • #26 7758594
    Konto nie istnieje
    Konto nie istnieje  
  • #27 7758635
    michalko12
    Specjalista - Mikrokontrolery
    marcel333 napisał:
    Nie wszyscy mnie rozumieją. W swoim ostatnim poście pomijałem 'pipeling' bo nie chodziło mi o niego, to że jest wiem i nie zaprzeczałem przecież jego istnienia! Chodziło mi tylko o zwrócenie uwagi na to co w 'datasheecie' pisze producent że każda z instrukcji rzeczywiście trwa co najmniej dwa cykle zegarowe (wyłączając 'pipeling') efektywnie z 'pipelingiem' włącznie jest szybciej - wiadomo. Jeśli byłyby instrukcje trwające rzeczywisty jeden cykl zegarowy (czyli cykl maszynowy równy cyklowi zegarowemu) to troche nie zgadzało by się z budową automatu skończonego sterującego procesorem.


    Wykonanie cyklu który według dokumentacji trawa jeden cykl dekoderowi instrukcji zajmuje dokładnie jeden cykl! Drugi pseudocykl potrzebny jest na dostarczenie rozkazu z pamięci do dekodera instrukcji. Jest chyba tylko jeden przypadek gdy wykonanie rozkazu może trwać dłużej, jest to wtedy gdy CPU zaczyna prace po resecie bo potok musi zostać zapełniony.
  • #28 7758664
    Konto nie istnieje
    Konto nie istnieje  
  • #29 7759638
    tmf
    VIP Zasłużony dla elektroda
    Marcel, napij sie kawy, bo krecisz sie w kolko. Przeciez to juz napisalem w drugim poscie tego watku. Swoja droga jesli dla zabawy budujesz swoj procesor, to sensowniej bedzie zamiast tu czytac rozne wypociny, zajrzec na opencores i sciagnac sobie pare rdzeni i zobaczyc jak sa napisane. Jest tez AVR - z tym, ze nie tak efektywny jak oryginal.
REKLAMA