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.

Atmel AVR pytanie o architekturę

12 Lut 2010 14:12 2864 28
  • #1 12 Lut 2010 14:12
    194876
    Użytkownik usunął konto  
  • Pomocny post
    #2 12 Lut 2010 14:42
    tmf
    Moderator Mikrokontrolery Projektowanie

    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.

    0
  • #3 12 Lut 2010 14:54
    194876
    Użytkownik usunął konto  
  • #4 12 Lut 2010 15:13
    Freddie Chopin
    Specjalista - Mikrokontrolery
  • #5 12 Lut 2010 15:16
    194876
    Użytkownik usunął konto  
  • #6 12 Lut 2010 15:54
    Freddie Chopin
    Specjalista - Mikrokontrolery
  • #7 12 Lut 2010 16:27
    194876
    Użytkownik usunął konto  
  • #8 12 Lut 2010 16:39
    atom1477
    Poziom 43  

    Po prostu w datasheecie jest to uproszczone.
    Nie ma żadnego powodu dla którego skok miał by trwać 2 cykle.
    W rzeczywistości skok trwa jeden cykl a wszystkie inne rozkazy dwa. Tyle że na siebie nachodzą i efektywnie przy programie liniowym czas wykonania instrukcji to jeden takt. A gdy nadchodzi skok który trwa jeden cykl to rzeczywiście trwa on jeden cykl ale później trzeba kolejny jeden cykl przeczekać aż się potok zapełni czyli efektywnie można powiedzieć że to skok trwa 2 cykle. Ot i cała zagadka.
    Że tak jest pewności nie mam ale wiele na to wskazuje.

    PS. tmf: jeżeli coś było by opatentowane to ATMEL musiał by się tym pochwalić ;)

    0
  • #9 12 Lut 2010 17:01
    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.

    0
  • #10 12 Lut 2010 17:06
    atom1477
    Poziom 43  

    Odwrotnie. Skoro zmienia licznik programu to znaczy że jednak adres następnego rozkazu ma. Ale ma adres a nie rozkaz. Więc najpierw pobiera adres i to mu zajmuje jedną instrukcję, później rozkaz ale to jest nowy rozkaz więc musi poczekać jeszcze jedną instrukcję aż rozkaz się zdekoduje i dopiero w trzeciej instrukcji wykona rozkaz. Czyli w 3 instrukcjach wykona skok i kolejną instrukcję.

    0
  • #11 12 Lut 2010 17:21
    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.

    0
  • #12 12 Lut 2010 17:42
    atom1477
    Poziom 43  

    No zaraz zaraz. Pisałeś że w miejscu gdzie jest zmieniany PC to adres nie jest znany.
    Skoro PC jest zmieniany to znaczy że wartość na jaką jest zmieniany jest znana. No nie można się z tym nie zgodzić. Mój komentarz dotyczył właśnie tego co napisałeś. Reszty nie wiem bo nie znam budowy procesora AVR.

    0
  • Pomocny post
    #13 12 Lut 2010 17:54
    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.

    0
  • Pomocny post
    #14 12 Lut 2010 17:57
    atom1477
    Poziom 43  

    A po za tym to zauważyłem że rozumujemy tak samo. Twój wywód i mój wywód dają taki sam sposób działania procesora. Ja po prostu nie napisałem co się będzie działo z PC i może to wprowadziło w błąd.

    0
  • #15 20 Lut 2010 00:42
    194876
    Użytkownik usunął konto  
  • Pomocny post
    #16 20 Lut 2010 09:16
    tmf
    Moderator Mikrokontrolery Projektowanie

    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.

    0
  • #17 20 Lut 2010 22:03
    194876
    Użytkownik usunął konto  
  • #18 23 Lut 2010 15:26
    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.

    0
  • #19 23 Lut 2010 15:38
    atom1477
    Poziom 43  

    Na pewno nie jest tak w AVR.

    Dodano po 1 [minuty]:

    Na pewno. Na 1000%. Gdyby tak było to procesor nie działał by na niskich częstotliwościach a jak wiadomo AVRy i na 0.00001Hz działają.

    0
  • #20 24 Lut 2010 12:20
    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.

    0
  • #21 24 Lut 2010 13:20
    94075
    Użytkownik usunął konto  
  • #22 27 Lut 2010 12:35
    194876
    Użytkownik usunął konto  
  • #23 27 Lut 2010 14:14
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Jeez... już się ktoś wypowiedział mówiąc o "pipeliningu" - jak długo będziesz się upierał, że tak nie jest?

    4\/3!!

    0
  • #24 27 Lut 2010 14:54
    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.

    0
  • #25 27 Lut 2010 15:07
    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.

    0
  • #26 27 Lut 2010 15:48
    194876
    Użytkownik usunął konto  
  • #27 27 Lut 2010 15:56
    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.

    0
  • #28 27 Lut 2010 16:03
    194876
    Użytkownik usunął konto  
  • #29 27 Lut 2010 18:55
    tmf
    Moderator Mikrokontrolery Projektowanie

    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.

    0