ask


Endianess.

Wyróżniamy dwa typy uporządkowania bajtów: big-endian i little-endian. Z nazwy łatwo wywnioskować, że pojęcia big-endian/little-endian tyczą się kolejności bajtów, a nie bitów, co jest częstą pomyłką. Można ją zapisać w pamięci w dwojaki sposób: albo mniej znaczący bajt (bajt, nie bit!) będzie pod niższym adresem, a bardziej znaczący pod wyższym albo na odwrót. Pierwszy przypadek występuje w systemach little-endian (mniej znaczący pierwszy), a drugi w systemach big-endian (bardziej znaczący pierwszy).

0x7f010203

big-endian little-endian

0x01 graphic

Kod naturalny binarny (NKB) to inaczej KOD BINARNY (kod dwójkowy, kod dwuwartościowy) w którym stosuje się sygnały elementarne przyjmujące jedną z dwu możliwych wartości (0 lub 1). W dowolnym systemie pozycyjnym każda pozycja przyjmuje określoną wagę, gdzie P oznacza podstawę, ai kolejne cyfry liczby. Jeśli P=2 to mamy do czynienia z kodem dwójkowym (NKB).

Kod uzupełnień do dwóch (w skrócie U2) jest obecnie najpopularniejszym sposobem zapisu liczb całkowitych na bitach, który uwzględnia także znak liczby. Jego popularność wynika z faktu, że operacje dodawania i odejmowania są w nim wykonywane tak samo jak dla liczb binarnych bez znaku. Z tego też powodu oszczędza się na kodach rozkazów procesora.Zaletą tego kodu jest również istnienie tylko jednego zera. Przedział kodowanych liczb nie będzie zatem symetryczny. W U2 na n bitach da się zapisać liczby z zakresu: Dla 8 bitów (bajtu) są to liczby od -128 do 127. Zalety:

- można dodawać i odejmować liczby za pomocą jednej operacji dodawania

- łatwy sposób dekodowania liczby ujemnej.

Qn - W technice DSP sygnały często opisuje się za pomocą liczb z zakresu <-1,1>.Sposób ten oznacza się często znakiem Q i liczbą, która określa liczbę bitów przeznaczoną na zapis wartości występującej po przecinku. Np. Q15 oznacza, że 1 bit przeznaczony jest na określenie znaku liczby oraz 15 bitów określa wartość po przecinku. W tym formacie nie ma możliwości przedstawienia liczby całkowitej. Przecinek jest zawsze w tym samym miejscu. Dla 8 bitów: Liczby z zakresu: -0,9921875 +0,9921875 Przerwa pomiędzy liczbami: 0,0078125

FP - Floating Point

Liczba zmiennoprzecinkowa jest komputerową reprezentacją liczb rzeczywistych zapisanych w postaci wykładniczej. Ze względu na wygodę operowania na takich liczbach przyjmuje się ograniczony zakres na mantysę i wykładnik Wartość liczby zmiennoprzecinkowej jest obliczana wg wzoru:

0x01 graphic

gdzie: S (ang. sign) - znak liczby, 1 lub -1 M (ang. mantissa) - znormalizowana mantysa, liczba ułamkowa B (ang. base) - podstawa systemu liczbowego (2 dla systemów komputerowych) E (ang. exponent) - wykładnik, liczba całkowita Mantysa jest znormalizowana, tj. należy do przedziału [1,B) (przedział prawostronnie otwarty!). Jeżeli M jest stałe, a E zmienia się, wówczas przesunięciu ulega przecinek - stąd właśnie pochodzi nazwa tej reprezentacji.

Zalety przetwarzania liczb z zakresu (-1,1)

W technice DSP sygnały często opisuje się za pomocą liczb z zakresu <-1,1>. Zaletą tej konwencji jest to, że w wyniku operacji mnożenia nigdy nie dojdzie do przepełnienia (chyba, że przy operacji dodawania, ale ten wyjątek jest zazwyczaj zabezpieczony).

Skalowanie - polega właśnie na konwersji liczb do przedziału <-1,1>, tak, aby ułatwić operacje na tych liczbach.

Arytmetyka stałoprzecinkowa

Kody stałopozycyjne mają ustalone miejsce rozdziału części całkowitej i ułamkowej, czyli miejsce przecinka, co oznacza, że dokładność reprezentacji jest stała.

Dodawanie liczb stałopozycyjnych.

Operację dodawania realizuje się od najmniej znaczących bitów składników sumy:

Zmiennoprzecinkowy format IEEE754

A) FORMATY:

Standard IEEE 754 definiuje dwa rodzaje liczb zmiennoprzecinkowych: 32-bitowe (single precision) oraz 64-bitowe (double precision). Kod binarny liczby zmiennoprzecinkowej podzielony jest na trzy pola zawierające komponenty zapisu zmiennoprzecinkowego:Bit znaku Pierwszy bit w zapisie liczby zwany jest bitem znaku. Stan 0 oznacza liczbę dodatnią, stan 1 liczbę ujemną. Aby zatem zmienić znak liczby zmiennoprzecinkowej na przeciwny, wystarczy dokonać negacji tego bitu. Bity kodu wykładnika Liczby zmiennoprzecinkowe IEEE 754 zapisują cechę w kodzie z nadmiarem. W pojedynczej precyzji cecha posiada 8 bitów, a nadmiar wynosi 127. Zatem w polu cechy można zapisać wartości od -128 do 127. W podwójnej precyzji cecha zbudowana jest z 11 bitów, nadmiar wynosi 1023. Bity ułamkowe mantysy

W pojedynczej precyzji mantysa posiada 23 bity, a w podwójnej precyzji 52 bity. Wzrost liczby bitów mantys liczb zmiennoprzecinkowych wpływa na ich precyzję, czyli dokładność odwzorowywania liczb rzeczywistych. (z wyjątkiem wartości zdenormalizowanej, która jest przypadkiem szczególnym liczby zmiennoprzecinkowej IEEE 754), to jej wartość liczbowa zawiera się pomiędzy 1 a 2. Wynika stąd, iż pierwszy bit całkowity mantysy zawsze wynosi 1

Operacja

Wynik

n / ±∞

0

±∞ • ±∞

±∞

±wartość niezerowa / 0

±∞

∞ + ∞

±0 / ±0

NaN

∞ - ∞

NaN

±∞ / ±∞

NaN

±∞ • 0

NaN

LICZBY ZDENORMALIZOWANE (-1)^s*0,f*2^(-126)

Wartości zdenormalizowane pozwalają przedstawiać bardzo małe liczby zmiennoprzecinkowe, które bez tej opcji zostałyby zaokrąglone do 0. Zwiększa to precyzję wykonywanych operacji zmiennoprzecinkowych i jest cechą bardzo pożądaną. Liczbę zero można traktować jak liczbę zdenormalizowaną, w której mantysa wynosi 0.

WYJĄTKI: - nadmiar (dodatni (2-2^(-23))2^(127), ujemny -(2-2^(-23))2^(127), - niedomiar(dodatni 2^(-126), ujemny -2^(-126)) - dzielenie przez 0 - niepoprawność działania (invalid operation) - niedokładność (inexact)

Rejestr stanu - wykorzystujemy przy mnożeniu bądź dodawaniu dużych liczb, których wynik jest przepełnieniem

INF

Standard IEEE 754 pozwala reprezentować dodatnią i ujemną nieskończoność. Pole znaku określa, z którą nieskończonością mamy do czynienia - dodatnią czy ujemną. Cecha posiada wszystkie bity ustawione na 1 (maksymalna wartość cechy), a bity mantysy są wyzerowane.Wartość typu nieskończoność jest bardzo pożądana w systemie zmiennoprzecinkowym, ponieważ pozwala ona prowadzić obliczenia po wystąpieniu nadmiaru.

NaN

Standard IEEE 754 definiuje dwie specjalne wartości, które nie reprezentują liczb. Stąd nazywane są w literaturze terminem NaN (Not a Number - Nie Liczba). Nieliczby mogą być dwojakiego rodzaju - tzw. ciche - QNaN (ang. Quiet NaN) lub sygnalizacyjne SNaN (ang. Signaling NaN). W obu przypadkach cecha zawiera same 1, a pole mantysy zawiera bity 1. Jeśli najstarszy bit ułamkowy mantysy jest ustawiony na 1, to kod reprezentuje cichą nieliczbę - QNaN.

cicha
QNaN

pole
znaku

pole
cechy

pole
mantysy

0/1

1...1

1X...X

Jeśli najstarszy bit mantysy ustawiony jest na 0, kod reprezentuje głośną nieliczbę:

sygnalizacyjna
SNaN

pole
znaku

pole
cechy

pole
mantysy

0/1

1...1

0X...X

Nieliczby mają wiele zastosowań. Ciche nieliczby przechodzą przez działania arytmetyczne. Najczęściej oznaczają one wartość niezdefiniowaną. Sygnalizacyjne nieliczby powodują powstanie wyjątków w operacjach arytmetycznych. Najczęściej oznaczają one wartość niedozwoloną. Typowym zastosowaniem sygnalizacyjna nieliczb jest wstępna inicjalizacja zmiennych. Jeśli programista nie wprowadzi do zmiennej wartości, czyli nie zainicjuje jej, to będzie ona zawierała wartość SNaN. Próba użycia takiej zmiennej w jakimkolwiek wyrażeniu arytmetycznym spowoduje wygenerowanie wyjątku i przerwanie obliczeń.

C) ZAKRES LICZB

Gdy znamy budowę liczby zmiennoprzecinkowej w standardzie IEEE 754, z obliczeniem zakresu możliwych do zapisania w nim liczb nie będzie żadnego problemu. Po prostu musimy znaleźć największą cechę i największą mantysę i podstawić je do podanego wcześniej wzoru.

Zakres liczb zmiennoprzecinkowych IEEE 754 w pojedynczej precyzji

Z(IEEE 754) = - 3,4 • 1038 ... 3,4 • 1038

Zakres liczb zmiennoprzecinkowych IEEE 754 w podwójnej precyzji

Z(IEEE 754) = - 1,8 • 10308 ... 1,8 • 10308

GĘSTOŚĆ -odległość między liczbami jest dostosowywana do wielkości liczby. Im większa liczba tym większa odległość (mniejsza gestość)

Dla e=1 (e-wykładnik) mamy 2^(1-127)=2^(-126) a więc gęstość =2^(-13)*2^(-126)

D) PORÓWNANIE ZAKRESÓW

Q15 -1 .. 0,999969 QN (0x01 graphic
)

NB 0 ... 216-1

U2 -215 .. 215-1

E) ZAOKRĄGLENIA:

- w górę +nieskończoność

- w dół -nieskończoność

- przez obcięcie

- losowe

- zaokrąglenie do parzystej

- zaokrąglenie do nieparzystej

Ogólna struktura procesora DSP.

Do dyspozycji mamy: 8 jednostek funkcyjnych (.L1, .L2, .S1, .S2, .M1, .M2, .D1, and .D2), 2 ścieżki danych adresowych (DA1 and DA2) Pamięć (ścieżki odczytu i zapisu) 2 ścieżki do zapisu danych (ST1 and ST2) 2 ścieżki do odczytu danych (LD1 and LD2)

2 wielofunkcyjne rejestry A i B (16 rejestrów 32bitowych) 2 rejestry danych ścieżek krzyżowych (1X and 2X) - używane są w momencie, gdy działamy na danych znajdujących się w różnych rejestrach np. dana1 w A, dana2 w B. Mamy 8 bloków funkcyjnych jest podzielonych na dwie grupy po 4 bloki. Każdy blok funkcyjny z jednej grupy jest prawie identyczny z odpowiednia jednostka, która znajduje się w drugiej grupie. Każda z jednostek funkcyjnych wykonuje odpowiednie instrukcje asemblera np. ADD jednostka .D1, a MPY już jednostka .M1.

Tryby adresowania: natychmiastowy, rejestrowy, bezpośredni, pośredni, stosowy, indeksowy, bazowy

Dane natychmiastowe:

Dane ładujemy bezpośrednio z programu do rejestru

MKV .S1 12345, A1 ;załadowanie 16bitowej liczby do rejestru A1

Adresowanie pośrednie:

Pod etykieta .data umieszczamy deklaracje liczb (liczba1 .int 123)

W programie do rejestrów ładujemy adres pod którym znajduje się nasz liczba1

MVKL .S1 80000000h,A1 ;0000 w dolne 2 bajty rejestru A1

MVKH .S1 80000000h,A1 ;8000 w górne 2 bajty rejestru A1

Użyte zostały dwie instrukcje ponieważ jednocześnie można przesyłać tylko 16 bitów, natomiast adres jest 32bitowy

LDW .D1 *A1,A2 ;do rejestru A2 ładujemy liczbę, która znajduje się pod adresem zapisanym w rejestrze A2

Wybieramy 80000000, dlatego że od tego adresu zaczyna się nasz program

Modyfikacja adresów w przypadku adresowania pośredniego:

Z inkrementacja:

*++A0,A2 (najpierw przechodzimy do kolejnego adresu, zapisujemy go w A0, do A2 wrzucamy liczbę spod adresu, który znajduje się w A0)

*A0++,A2 (najpierw wrzucamy liczbę spod adresu znajdującego się w A0 do rejestru A2, a później przechodzimy do kolejnego adresu i zapisujemy go w A0)

Z dekrementacja (tak jak wyżej tylko, że idziemy w stronę poprzednich adresów „-„)

*++A0[2],A3: tak, jak wyżej tylko, ze o 2 adresy w górę)

Bez zmiany adresu bazowego *+A1[1],A2 (pobieramy dane z adresu, który znajduje się o 1 miejsce dalej od tego, który jest w rejestrze A1, nie modyfikujemy adresu w A1)

STW - rejestr -> pamięć

LDW - pamięć -> rejestr

LDB - bajt (adresy zmieniają się: 80000000, 80000001…) co 1 bajty

LDH - half (adresy zmieniają się: 80000000,80000002…) co 2 bajty

LDW - word (adresy zmieniają się: 80000000,80000004…) co 4 bajty

Adresowanie indeksowe- dodawane jest przesunięcie zawarte w rejestrze indeksowym (baza w instrukcji)

Adresowanie bazowe- dodawane jest przesunięcie zawarte w instrukcji (baza w rejestrze)

Adresowanie kołowe:

Na początku wybieramy, jakiej długości chcemy mieć wektor kołowy np. 4 słowa.

Wybieramy początek pamięci, w której będzie nasz wektor np. 80000100h - wprowadzamy zmiany w pliku CMD. Liczby są wpisywane w kolejne komórki pamięci wewnątrz wektora, a gdy dojdziemy do końca adres automatycznie wróci na początek. Bufor kołowy ustawia się za pomocą rejestru kontrolnego AMR. Można użyć automatycznego adresowania dla rejestrów A4-A7 oraz B4-B7. Albo wybrać np. B5. Możliwe są różne tryby pracy adresowania, standardowo włączona jest praca liniowa (po resecie) lub adresowanie kołowe przy użyciu pola BK0 lub BK1. W tym celu należy do B5 wpisać odpowiednie bity (dla BK0 - 01). Następnie w polu BK0 ustalamy długość naszego wektora. Oblicza się ją przy pomocy wzoru: długość w bajtach=2^(N+1). N oznacza liczbę wpisaną do pola BK0. W naszym przypadku bufom ma mieć długość 16 bajtów (4 liczby 32bitowe). Wpisujemy wiec 3 do pola BK0.

Przerwania

System przerwań umożliwia zawieszenie wykonywania bieżącego programu i skok do wykonania specjalnego podprogramu - procedury obsługi przerwania, na skutek pojawienia się sygnału zgłoszenia przerwania.

System przerwań umożliwia natychmiastową reakcję przez procesor na przypadkowe zdarzenia zewnętrzne (np. żądanie obsługi urządzenia zewnętrznego) lub w niektórych procesach wewnętrzne (np. wystąpienie błędu).

Obsługa przerwania

  1. Ustawienia odpowiedniego bitu w IRF

  2. 2. Procesor sprawdza GIE i NMIE (bity maskowania globalnego i niemaskowal.)

  3. odmaskowuje konkretne przerwania w IER

  4. procesor pobiera adres od obsługi przerwania z istp i zapisuje adres przerwania do NRP i IRP, procesor wpisuje 0 do GIE (automatycznie globalnie maskuje) lub wpisuje do NMIE jeśli niemaskowalne

  5. skok do procedury przerwania (realizacja procedury przerwania)

  6. powrót z IRP wpis 1 do GIE, lub powrót z NRP wpis 1 do NMIE (w IRP jest adres powrotu)

  7. skok do kolejnej instrukcji, która była niezrealizowana

Hierarchiczność , rodzaje przerwań, konfiguracja i wywołanie przerwań:

Reset jest przerwaniem o największym priorytecie, jest używany aby zatrzymać procesor i wrócić do stanu ustalonego. Program przestaje być wykonywany i wszystkie rejestru wracają do stanu domyślnego.

NMI (nonmaskable interrupt - jak sama nazwa mówi jest niemaskowalny) jest drugim co do priorytetu przerwaniem. Używany jest do krytycznych zjawisk (np. nieoczekiwany brak zasilania). Po resecie jest wyzerowany. 1- 0-

Przerwania maskowalne

Źródłem przerwań od int4 do int15 może być dowolne przerwanie np. od Timera lub od portu szeregowego (MUXH, MUXL) Aby ten rodzaj przerwania zaistniał trzeba ustawić bit global interruption enable (GIE) w rejestrze stanu CSR (control status register) na 1. Następnie trzeba ustawić rejestr IER (interruption enable register) to znaczy wpisać w bit NMI -> 1 a także wpisać jedynkę do bitu odpowiadającemu interesującemu nas przerwaniu. Teraz zostaje tylko ustawienie odpowiedniego na ISR (interrupt set register). Rejestr IFR (interrupt flag register) jest rejestrem tylko do odczytu i jest automat. uzupełniany przez procesor po uaktywnieniu przerwania w IER.

Wektor obsługi przerwań
Kiedy procesor zaczyna przetwarzać przerwanie odwołuje się do wektora przerwań. Wektor przerwań jest tablicą znajdującą się w pamięci programu zawierającą procedury przeznaczone do obsługi przerwań. Zawiera on 16 kolejnych pakietów(ISFP interrupt service fetch packet ) z których każdy posiada 8 instrukcji.

Techniki zwiększania szybkości przetwarzania procesorów.

a)ZWIĘKSZENIE SZYBKOŚCI PRZETWARZANIA W PROCESORZE

-zwiększenie częstotliwości taktowania -pr. potokowa -pr. równoległa -obl. wektorowe -optymalizacja kodu -RISC- podstawowe krótki instrukcje-wielopotokowość

b)zwiększanie szybkości wymiany danych z procesorem

-pomięć podręczna -architektura Harvardzka -zwiększona częstotliwość taktowania magistrali. Zwiększenie długości słowa (VLIW słowo ma od 256 do 1024 bitów)

c) układy wieloprocesorowe

Przetwarzanie potokowe
Potok wykonawczy, to porostu ścieżka przetwarzania instrukcji wewnątrz procesora, dzieląca proces ich wykonania na oddzielne, logiczne etapy. Każdy etap wykonywany niezależnie na określonym stopniu potoku, najczęściej w jednym takcie zegara procesora. Instrukcje po pobraniu z pamięci jedna po drugiej przemieszczają się w potoku wykonawczym, przechodząc przez jego kolejne stopnie.

Uproszczony schemat potokowości:1. Pobranie instrukcji z pamięci - ang. instruction fetch (IF) 2. Zdekodowanie instrukcji - ang. instruction decode (ID) 3. Wykonanie instrukcji - ang. execute (EX) 4. Dostęp do pamięci - ang. memory access (MEM) 5. Zapisanie wyników działania instrukcji - ang. store; write back (WB)

Przetwarzanie równoległe.

Jeżeli procesor wyposażony jest w kilka jednostek obliczeniowych to zwiększa to możliwe do osiągnięcia szybkości przetwarzania tego procesora. W takim przypadku jednocześnie może być wykonywanych równolegle tyle operacji, ile jednostek obliczeniowych posiada procesor.

W TMS320C6711 mamy 8 jednostek, czyli jednocześnie może być wykonywanych do 8 instrukcji.

Pamięć podręczna.

Cache (pamięć podręczna) to mechanizm, w którym ostatnio pobierane dane dostępne ze źródła o wysokiej latencji i niższej przepustowości są przechowywane w pamięci o lepszych parametrach.

Systemy te są tak wydajne dzięki lokalności odwołań - jeśli nastąpiło odwołanie do pewnych danych, jest duża szansa, że w najbliższej przyszłości będą one potrzebne ponownie. Niektóre systemy cache próbują przewidywać, które dane będą potrzebne i pobierają je wyprzedzając żądania. Np. cache procesora pobiera dane w pakietach po kilkadziesiąt czy też więcej bajtów, cache dysku zaś nawet do kolejnych kilkuset kilobajtów czytanego właśnie pliku.

Lokalność odwołań:

-sekwencyjna- kopiujemy większy blok pamięci, programy wykonywane sekwencyjnie

-czasowa- jeżeli pobraliśmy dane to za jakiś czas odwołamy się do nich

-przestrzenna- jeżeli pobraliśmy skądś dane to odwołamy się do nich

Parametry pamięci podręcznej:

-pojemność -czas dostępu -topologia(konwencjonalna, pośrednicząca, dwuszynowa) -odwzorowania pamięci(asocjacyjne, bezpośredni, asocjacyjno-zespołowe) -algorytmy wymiany linii(LFUm LRU, FIFO, swobodny)-sposoby zapisu(jednoczesny, opóźniony)

Architektura VLIW

Pojedyncze rozkazy posiadają w sobie już zdekodowane (lub wstępnie zdekodowane) sygnały sterujące, dane oraz, co najważniejsze, "instrukcje" dedykowane dla konkretnych jednostek wykonawczych mikroprocesora. Tak stworzona pojedyncza instrukcja procesora VLIW ma wielkość rzędu setek bitów - 256 lub więcej.

Obecnie procesory VLIW są oparte na architekturze RISC, zazwyczaj z czterema do ośmioma jednostkami obliczeniowymi. Po normalnej kompilacji programu, kompilator VLIW porządkuje kod na ścieżki które po prostu nie posiadają jakichkolwiek zależności. Następnie są one dzielone na cztery lub więcej (jeden dla każdej jednostki obliczeniowej CPU) i pakowane razem w większe instrukcje z dodatkową informacją odnoście jednostki na której ma być wykonywana. Rezultatem tego jest pojedynczy wielki op-code

Praca wieloprocesorowa.

Jest to wykonywanie kilku czynności (zadań) w tym samym czasie przez różne procesory Procesory pracują równolegle w ścisłym powiązaniu ze sobą.

idea i zastosowanie układów czasowych w DSP

32-bitowy , ogólnego przeznaczenia timer w DSP może być użyty do:

->mierzenia czasu trwania pewnego zdarzenia ->licznik zdarzeń ->generator impulsów ->źródło przerwań w CPU ->synchronizacja zdarzeń w DMA

W procesorze DSP są dwa takie układy czasowe : Timer0 i Timer1 , każdy z nich może działać niezależnie od siebie. Praca tych układów jest konfigurowana za pomocą osobnych specjalnych rejestrów konfiguracyjnych (CTL PRD CNT) które są dostępne dla programisty w pamięci pod ściśle określonymi adresami ( dla każdego z timerów są oddzielne rejestry konfiguracyjne CTL PRD CNT)

Taktowanie zegara CPU/4

Programowanie Timera

1.Wstrzymać timer (HLD=0)

2.wpis wartości docelowej licznika do PRD

3.wpis do rejestru konfiguracyjnego CLT (GO=0, HLD=0)

4.ponowny wpis do rejestru konfiguracyjnego CLT (GO=1, HLD=1)

Port szeregowy (mamy kompander, kompresjae ekspreję)

Komunikacja między dwoma mikroprocesorami może być wykonana poprzez port szeregowy. Jeden mikroprocesor pracuje jako MASTER natomiast drugi jako SLAVE.

Jeżeli jakieś dane chcemy wysłać poprzez port szeregowy to dane te należy zapisać do rejestru DXR znajdującego się pod adresem 0190 0004 a więc za pomocą komendy STW zawartość określonego rejestru w którym znajdują się dane należy zapisać pod adresem 0190 0004. Dane te zostaną następnie wysłane na nogę procesora (DX) . W kolejnym kroku MASTER wysyła ramkę synchronizacji świadczącą o rozpoczęcie nadawania. Po otrzymaniu ramki synchronizacji przez SLAV'a następuje wysłanie danych. Dane docierają na nogę mikroprocesora (DR) skąd zostają przesłana do rejestru DRR. W momencie gdy mamy już gotowe słowo które możemy odczytać w rejestrze SPCR ustawiany jest bit RRDY. Moza tak skonfigurować program aby bit RRDY był jednocześnie przerwaniem. Dane możemy pobrać z rejestru DRR korzystając z komendy Ldw, wówczas należy pobrać dane spod adresu 0190 0000 i zapisać w dowolnie wybranym rejestrze.

Sytuacje wyjątkowe oraz błędy transmisji które mogą zakłócić komunikacje między mikroprocesorami sygnalizowane są poprzez ustawienie określonych bitów w rejestrze SPCR.

Przepełnienie odbiornika jest sygnalizowane ustawieniem rejestru RFULL, jeśli przychodzi słowo i jest skompletowane w RSR i przesłane do RBR, ale nie zostanie odczytane w bloku DRR, a następnie w tym czasie przychodzą kolejne dwa słowa, które również nie zostają odczytane to mamy przepełnienie i generowany jest błąd (dane konwertowane są w RSR i to co nadpiszemy to utracimy bezpowrotnie). Zapobieganie : synchronizacja DRR - przerwania ; kontrola bitu stanu .

nadpisywanie danych nadajnika : - dane są wpisywane do DXR i w sytuacji gdy dana nie została jeszcze wysłana dalej a przychodzą następne to mamy nadpisywanie i błędy. Zapobieganie : ustawienie przerwań od XINT.

Nadajnik jest pusty- (DXR)-brak podanych danych , poprzednie słowo wysyłane jeszcze raz

Nadejście nieoczekiwanego sygnału synchronizacji -w przypadku pojawienia się sygnału synchronizacji, gdy nie przesłaliśmy jeszcze całego słowa mamy dwie możliwości : ignorujemy nieoczekiwany sygnał ramki lub rozpoczynamy kompletowanie nowego słowa.

Wielokanałowy port szeregowy.

Mikroprocesory można łączyć wykorzystując ich porty szeregowe, tworząc wielokanałowy port szeregowy. Wszystkie mikroprocesory nie mogą jednak komunikować się w tym samym czasie dlatego też przydziela się określone przedziały czasowe w których para rejestrów może nadawać i odbierać. Kolejne próbki odbieramy z częstotliwości próbkowania

Konsolidator (linker)-łączenie segmentów, wyznaczanie adresów poszczególnych segmentów.

Przetwarzanie SIMD - idea polega na tym, że w jednym 32 bitowym słowie mamy dwie dane 16 bitowe. Jedną instrukcją dwie pary danych dodać i mamy wynik 2x16 bitów. Nic nie stoi na przeszkodzie aby były to dwie liczby 4+16 bitów. Można dodawać nie tylko w pionie ale i w poziomie ( czyli obie połowy słowa 32 bitowego )

Szum kwantyzacji (SPOWODOWANE FILTRAMI CYFROWYMI), zwany także błędem kwantyzacji jest zniekształceniem sygnału powstającym w procesie kwantyzacji.

Szum kwantyzacji powstaje w przetwornikach analogowo-cyfrowych oraz w przetwornikach CCD cyfrowych aparatów fotograficznych z powodu błędu zaokrąglenia. Podczas konwersji ciągłego sygnału analogowego na postać cyfrową, każda wartość jest zaokrąglana do najbliższej wartości dyskretnej. Powstający w ten sposób błąd określany jest mianem szumu kwantyzacji. Szum ten można zmniejszyć poprzez zwiększenie ilości bitów opisujących każdą próbkę. Zwiększenie liczby bitów o jeden powoduje zmniejszenie szumu kwantyzacji o 20 * log (2) = 6,02 dB.

Odejmowanie liczb stałopozycyjnych.

Operacja ta sprowadza się do dodawania liczb ujemnych:

Mnożenie liczb stałopozycyjnych.

Podobnie jak w systemie dziesiętnym tak i w systemie dwójkowym liczby mnoży się w tylu krokach z ilu bitów składają się czynniki. Jeśli mnożymy dwie liczby 8-bitowe w systemie dwójkowym, to mnożenie wykonujemy w 8 krokach a wynik może być 16-bitowy.

Dzielenie liczb stałopozycyjnych.

Dzielenie liczb dwójkowych jest działaniem trudniejszym od ich mnożenia, gdyż iloraz trzeba zapisać na skończonej liczbie bitów. Oznacza to, że wynik otrzymamy z pewną dokładnością.

Dodawanie i odejmowanie liczb w formacie Q3.

Zasady dodawania i odejmowania są identyczne jak w przypadku binarnych liczb całkowitych, co można zauważyć , przecinek stawiamy w tym samum miejscu co w liczbach dodawanych

Mnożenie liczb w formacie Q3.

Sumujemy ilość cyfr z liczb mnożonych i stawiamy przecinek w tym miejscu ~ gdzie odliczymy od lewej strony np. suma cyfr po przecinku =6 to mamy 1100,101110

Arytmetyka zmiennoprzecinkowa

Arytmetyka zmiennoprzecinkowa nie jest łączna. To znaczy: iż dla x, y i z mogą zachodzić różności:

0x01 graphic

0x01 graphic
,

ani rozdzielna czyli może zachodzić różność:

0x01 graphic

Innymi słowy kolejność wykonywania operacji wpływa na końcowy wynik.

Przy obliczeniach zmiennoprzecinkowych występują też inne problemy:

- zaokrąglenia

- nieprawidłowe operacje

- przepełnienie

-niedomiar

Dodawanie i odejmowanie

0x01 graphic
, 0x01 graphic
- przyjmujemy, że E1 < E2.

0x01 graphic

Jeśli liczby mają różne wykładniki, to podczas dodawania jedna z mantys musi zostać zdenormalizowana - we wzorze jest to przemnożenie M2 przez czynnik 0x01 graphic
.

Mnożenie

0x01 graphic

Dzielenie

0x01 graphic

Operacje bitowe

Operacje te mogą być wykonywane na grupach bitów (jeśli za grupę możemy uważać zbiór 8 bitów w rejestrze) oraz na pojedynczych bitach. Operatory operacji bitowych pozwalają na przestawianie pojedynczych bitów zmiennych.

- AND iloraz logiczny

- OR różnica logiczna

- XOR alternatywa wykluczająca

- NOT negacja

- SHL przesunięcie logiczne w lewo

- SHR przesunięcie logiczne w prawo

Więcej o timerach

CTL- 32-bitowy rejestr określający tryb pracy układu . Ustawiane są w nim następujące bity:

-HLD=> zezwolenie na zliczanie

-GO =>zeruje licznik i uruchamia zliczanie

-INVINP=> negacja przychodzących impulsów z zewnętrznej końcówki TINP pin

-INVOUT=> negacja wychodzących impulsów z timera na końcówkę TOUT pin

-FUNC=> określa funkcje kocówki wyjściowej zewnętrznej „TOUT pin”: albo wyjście dla danych albo wyjście dla Timera

-DATIN=> bit tylko do odczytu wskazuje stan końcówki wejściowej „TINP pin”

-DATOUT=>bit który można wysać do końcówki wyjściowej TOUT pin pod warunkiem ze FUNC=1

-C/P=> wybór rodzaju sygnału z wyjścia Timera: zegarowy 50% wypełnienia w przebiegu albo impulsowy(krotki czas trwania)

-PWID=>

-TSTAT=> końcówka wyprowadzająca sygnał z timera do CPU np. do zgłoszenia przerwanie i DMA bit ten tylko do odczytu

-CLKSRC=> okresla źródło zliczanych impulsów : albo (CPU clock/4) albo z zewnętrznej końcówki „ TINP pin”

PRD(timer period register)- 32-bitowy rejestr określający pojemność inkrementowanego rejestru CNT-> Wpisana wartość do PRD mówi nam po ilu zliczonych impulsach następuje wyzerowanie licznika (CNT) a tym samym wygenerowanie np. jakiegoś przerwania INT bądź impulsu

CNT(timer counter register) - 32-bitowy rejestr zliczający impulsy :z zewnętrznej końcówki

„TINP pin” albo impulsy wewnętrzne z zegara systemowego CPU clock/4. W dowolnej chwili możemy programowo zmienić jego wartość .

=>I tak w zależności od bitu rejestru CTL, dany układ czasowy może pracować albo jako licznik impulsów albo jako czasomierz .

=>po przepełnieniu licznika CNT albo po zliczeniu liczby impulsów równej wartości w PRD

układ „equals komparator” generuje impuls który odpowiednio obrobiony w „pulse generator” może zgłosić przerwanie INT… albo dać sygnał na DMA i jednocześnie może być ten sygnał wyprowadzony na końcówkę wyjściowa „TOU pin” ( pod warunkiem ze FUNC=1)

=>pulse generator formuje sygnał wyjściowy z timera :impulsowy lub zegarowy (50% wyplenienia w przebiegu czasowym )

=>w celu uruchomienia licznika-czasomierza należy w rejestrze CTL ustawić bity HLD i GO

zaś w celu wstrzymania jego pracy należy te bity wyzerować .Sam Bit HLD uruchamia i zatrzymuje zliczanie( bez zmiany zawartości rejestru CNT- w momencie zatrzymania jest on„zamrażany ) natomiast bit GO uruchamia licznik-czasomierz z jednoczesnym wyzerowanie zawartości CNT. Tak wiec aby układ mogł pracować muszą być ustawione dwa bity HLD i GO

=>Podczas pracy tego układu , rejestr CNT zlicza impulsy a z zewnętrznej końcówki albo impulsy zegarowe/4(ustawia to bit CLKSRC)

=>aby wygenerować dowolne przerwanie INT.. od Timera0 lub Timer1 należy odpowiednio skonfigurować rejestr MUX ( MUXL i MUXH) które jes dostępny dla programisty w pamięci pod ściśle określonym adresem => jest to rejestr określający źródła zgłoszeń wszystkich przerwań INT4…INT15

MUXH jest taki sam z tą roznęcą ze zawiera pola INTSEL10—INTSEL15.

Wpisana w dane pole liczba określa źródło tego przerwania ( od timer0 będzie to wartość =00001b)

Architektura RISC (Rationalized Instruction Set Computers, wcześniej skrót od Reduced Instruction Set Computers)

W związku z powyższym zaprezentowano architekturę mikroprocesorów, w której uwzględniono wyniki badań. Jej podstawowe cechy to:

Zredukowana liczba rozkazów do niezbędnego minimum. Ich liczba wynosi kilkadziesiąt, podczas gdy w procesorach CISC sięga setek. Upraszcza to znacznie dekoder rozkazów.

Redukcja trybów adresowania, dzięki czemu kody rozkazów są prostsze, bardziej zunifikowane, co dodatkowo upraszcza wspomniany wcześniej dekoder rozkazów. Ponadto wprowadzono tryb adresowania, który ogranicza ilość przesłań - większość operacji wykonuje się wg schematu: 0x01 graphic

Ograniczenie komunikacji pomiędzy pamięcią, a procesorem. Przede wszystkim do przesyłania danych pomiędzy pamięcią, a rejestrami służą dedykowane instrukcje, które zwykle nazywają się load (załaduj z pamięci), oraz store (zapisz do pamięci); pozostałe instrukcje mogą operować wyłącznie na rejestrach. Schemat działania na liczbach znajdujących się w pamięci jest następujący: załaduj daną z pamięci do rejestru, na zawartości rejestru wykonaj działanie, przepisz wynik z rejestru do pamięci.

Zwiększenie liczby rejestrów (np. 32, 192, 256, podczas gdy np. w architekturze x86 jest zaledwie 8 rejestrów), co również ma wpływ na zmniejszenie liczby odwołań do pamięci.

Dzięki przetwarzaniu potokowemu (ang. pipelining) wszystkie rozkazy wykonują się w jednym cyklu maszynowym, co pozwala na znaczne uproszczenie bloku wykonawczego, a zastosowanie superskalarności także na zrównoleglenie wykonywania rozkazów. Dodatkowo czas reakcji na przerwania jest krótszy.



Wyszukiwarka

Podobne podstrony:
ASK w2 id 70602 Nieznany (2)
li ask zz ge3 5E2JZTQ5PYH7Q3CI6HVII64U3BJBL6JHS7BPSTA
ASK w1
ASK m1
ASK 11 Autoryzacja
ASK notatki
ASK Kolokwiumnr1
sprawko 1 grafika Ask
ASK m sz przetw
ASK 11 PiotrGębala MateuszMacięga
LI ASK RT IT700
01 ASK Tematy referatów 2012
ASK 12 Parallel
sciaga-skrocona, Informatyka Stosowana, Architektura systemów komputerowych, ASK
LI ASK SA IT711
ASK w4 id 70603 Nieznany
MWP ASK
calosc ask
ASK 3
ASK 12 FTP

więcej podobnych podstron