TCiPSL_EiT_1_2024.pdf
Document Details

Uploaded by QuaintOak
Full Transcript
Program wykładu – Technika cyfrowa i programowanie struktur logicznych - 30h: 1. Wprowadzenie do układów cyfrowych – historia, systemy liczbowe, kody cyfrowe. 2. Elementy i układy logiczne - klasyfikacja, struktury ogólne. 3. Bloki funkcjonalne - konwertery kodów, bloki komutacyjne, rejestry, liczni...
Program wykładu – Technika cyfrowa i programowanie struktur logicznych - 30h: 1. Wprowadzenie do układów cyfrowych – historia, systemy liczbowe, kody cyfrowe. 2. Elementy i układy logiczne - klasyfikacja, struktury ogólne. 3. Bloki funkcjonalne - konwertery kodów, bloki komutacyjne, rejestry, liczniki, sumatory, pamięci. 4. Parametry i standardy sygnałów cyfrowych. 5. Programowalne strukturalnie układy cyfrowe PLD/FPGA – wybrane elementy architektury. 6. Propagacja sygnału zegarowego w FPGA i synteza częstotliwości. 7. Elementy leksykalne VHDL: struktura kodu, obiekty i typy danych, instrukcje, podprogramy i biblioteki. 8. Sposób opisu układu cyfrowego w strukturze programowalnej: schemat, VHDL, struktury hierarchiczne. 9. Techniki syntezy kombinacyjnych i sekwencyjnych synchronicznych układów cyfrowych. 10. Przetwarzanie współbieżne i sekwencyjne oraz FSM w VHDL. 11. Zaliczenie - testy wyboru – 100 zadań z odpowiedziami do wyboru – stacjonarnie. Literatura: Barski M., Jędruch W.: Układy cyfrowe – podstawy projektowania i opisu w języku VHDL, PG, 2007. Skahill K.: Język VHDL Projektowanie programowalnych układów logicznych, WNT; W-wa, 2001. Duec R.: Digital Design with CPLD Applications and VHDL, Amazon, 2020. Kalisz J.: Język VHDL w praktyce, WKiŁ, 2006. ( Udostępnione materiały i opracowania można wykorzystywać w celu edukacyjnym w ramach przedmiotu, inne użycie lub kolportowanie jest objęte ochroną praw niematerialnych i prawnych. Prowadzący wykład nie wyraża zgody na jego rejestrację zgodnie z Zarządzeniem nr 1222 Rektora Politechniki Białostockiej z 25 listopada 2020 r. ) I. Zasady zaliczania i kryteria oceny wykładu Warunkiem uzyskania zaliczenia wykładu jest uzyskanie ponad 50% odpowiedzi pozytywnych z testu końcowego – lub 10 nieobowiązkowych testów/zadań składowych po kolejnych wykładach. · Student uzyskujący ocenę 3,0: - wymienia elementy architektury układów cyfrowych i struktur programowalnych, - charakteryzuje podstawowe struktury kodu HDL opisującego układ cyfrowy, - opisuje specyfikę układów PLD/FPGA. · Student uzyskujący ocenę 4,0 – oprócz efektów kształcenia na ocenę 3.0, dodatkowo: - charakteryzuje wybrane składniki architektury ukladów cyfrowych i struktur programowalnych, - opisuje i klasyfikuje instrukcje kodu HDL, - wymienia etapy procesu projektowania w strukturach programowalnych. · Student uzyskujący ocenę 5.0 – oprócz efektów kształcenia na ocenę 4.0, dodatkowo: - wymienia parametry eksploatacyjne układów programowalnych i cyfrowych, - wyjaśnia różne techniki definiowania układów w strukturach programowalnych, - wymienia cechy systemów CAD PLD. Student uzyskujący ocenę 3,5 realizuje zakres wymagany 3,0 jednak mniejszy od wymagań na ocenę 4,0. Student uzyskujący ocenę 4,5 realizuje zakres wymagany 4,0 jednak mniejszy od wymagań na ocenę 5,0. Skala ocen: 91-100pkt. 5,0; 81-90pkt. 4,5; 71-80pkt. 4,0; 61-70pkt 3,5; 51-60pkt. 3,0 poniżej 51pkt. 2,0 II. Zasady zaliczania i kryteria oceny laboratorium Ocena wypadkowa jest średnią ocen poszczególnych ćwiczeń, jest ona wyliczana w skali od 0 do 100%. Każdy zespół laboratoryjny przygotowuje jedno sprawozdanie z ćwiczenia, w formie pliku.pdf. Na ocenę ćwiczenia składają się oceny cząstkowe: 1. Test wstępny bieżącego ćwiczenia – w skali od 0 do 10%, 9 testów oprócz 1-go ćwiczenia; 2. Kompletność sprawozdania, wrażenie estetyczne, opisy realizowanych zadań - w skali od 0 do 20%; 3. Opis przebiegu badań układów oraz interpretacji wyników badań - w skali od 0 do 40%; 4. Wnioski końcowe - w skali od 0 do 10%; 5. Kontynuacja ćwiczenia w formie pracy własnej - w skali od 0 do 20%. Opis przebiegu badań, zależnie od ich charakteru, powinien/może zawierać: schematy, kody, potwierdzenie kompilacji, wyniki symulacji i/lub opis działania/badań zaprogramowanego modułu lub zdjęcia jego pracy dla kilku charakterystycznych przypadków. Każde zrealizowane zadanie powinno w sprawozdaniu zawierać zrzut ekranu kompilacji. Wszystkie uzyskane wyniki powinny być opisane a ich wartości zinterpretowane. Interpretacja wyników polega na ich słownym opisie, uzasadnieniu wartości. Interpretacją kodu mogą być komentarze umieszczone w liniach instrukcji. Wnioski końcowe to zalecane pół strony tekstu pisanego czcionką 12 pkt. z odstępem pojedyńczym. Powinny one zawierać tylko uwagi merytoryczne związane ze zrealizowanymi zadaniami. W przypadku stwierdzenia plagiatu sprawozdania lub jego części, ocena z ćwiczenia będzie dla wszystkich stron plagiatu podzielona przez liczbę współuczestników/zespołów. Końcowa ocena, umieszczana w protokole przedmiotu, jest przekształceniem oceny wypadkowej wg skali: 0 do 50% oceny wypadkowej oznacza ocenę końcową 2.0, zakres od 51 do 100% jest dzielony proporcjonalnie pomiędzy oceny od 3.0 do 5.0. Sprawozdania z ćwiczeń powinny być dostarczane z maksimum 2 tygodniowym opóźnieniem – nie dotyczy to 2 ostatnich zajęć. Możliwa jest poprawa oceny końcowej o 0,5 pkt. w wyniku samodzielnej realizacji dodatkowego zadania na koniec semestru. KONSULTACJE: w formie stacjonarnej w pokoju WE-329 lub w laboratorium WE-244 w środy od godziny 8.15 lub we środy w godzinach: od 17.40. Początki techniki cyfrowej Układ cyfrowy jest układem elektronicznym przekształcającym sygnały zmieniające się w sposób skokowy, czyli zbiór wartości jest skończony - najczęściej dwuelementowy. Odróżnia to układy cyfrowe od układów analogowych, w których sygnały wejściowe i wyjściowe mogą zmieniać się w sposób ciągły - np. amplitudy napięcia czy natężenia prądu. Początki techniki cyfrowej - 3000: Symbol chińskiego cesarza Crazy-Hi Magic: ośmiokąt z trygramem - Pierwsze 8 cyfr w postaci binarnej -1700: starożytny Egipt: (RIND papirus - mnożenie binarne) Początki techniki cyfrowej Pamięć zapasowa -500/-1100 : pojawienie się na Bliskim Wschodzie pierwszego „narzędzia” obliczeniowego: liczydła 1801: Jacquard : krosna na karty perforowane - język binarny - nagrany program Początki techniki cyfrowej George BOOLE (Podstawy teorii układów logicznych) „An Investigation of the Laws of Thought”, Dover Publications, Inc., 1854. Samouk prowadzony przez De Morgana Początki techniki cyfrowej – potem wkroczyła technologia, opracowanie tranzystora Bardeen, Schockley, Brattain Wynalazek 47 / Patent w 48 Produkcja komercyjna 1954 Nagroda Nobla w dziedzinie fizyki w 1956 roku Początki techniki cyfrowej – potem wkroczyła technologia, pamięci, IC 1958 opracowanie układu sacalonego (Texas / Kilby) 58 elementy, technologia germanowa Opracowanie RAM w latach 50 Początki techniki cyfrowej – potem wkroczyła technologia i dalej... - 1961 FET « industriel » - 1962 : SUHL/9000/TTL (Texas) - 1968 : SRAM - 1970 : DRAM 1Kbit (INTEL) - 1971 : Procesor 4004 INTEL (2250 tranzystorów bipolarnych, 108 KHz, 4bits) - 1972 : PROM à fusibles - 1973 : Internet (25 machines) - 1975 : PLD Signetics - 1984 : CD-ROM Początki techniki cyfrowej – obecnie mamy - FPGA Początki techniki cyfrowej – obecnie mamy - System-on-Chip - SoC Początki techniki cyfrowej – obecnie mamy - System-in-Package - SiP I. Reprezentacja danych w systemach cyfrowych Bit jest najbardziej elementarną jednostką informacji w systemach cyfrowych: – oznacza on stan włączenia (on) lub wyłączenia (off) w układach cyfrowych, – alternatywnie nazywa się: – high/on wysoki poziom napięcia, low/off niski poziom, – wartości bitów zapisujemy jako: 1 = high/on, 0 = low/off – a w VHDL odpowiednio '1' i '0'. Bajt (byte) jest zbiorem 8 bitów: – jest on najmniejszą jednostką informacji przetwarzaną w systemach cyfrowych co jest efektem zaszłości historycznych – pierwsze procesory były 8-bitowe, – jest powszechną jednostką pojemności danych cyfrowych – mówi się 1 kilobajt (1 kB) a nie 8 tysięcy bitów (8 kb), – sposób zapisu wartości w bajtach składa się z bitów, zapis jest łańcuchowy a znaczenie bitów i hierarchiczne: 10110011 lub w VHDL "10110011", – w łańcuchu danych bit położony najbardziej na lewo jest bitem najbardziej znaczącym (MSB - Most Significant Bit) – najbardziej na prawo jest bitem najmniej znaczącym (LSB – Least/Last? Significant Bit). I. Reprezentacja danych w systemach cyfrowych Bit fizycznie/technicznie może oznaczać: -- poziom napięcia w układzie/na przewodzie/ścieżce, -- parametry sygnału radiowego w telekomunikacji, -- parametry wiązki laserowej w otwartej przestrzeni, I. Reprezentacja danych w systemach cyfrowych – pojęcia podstawowe Słowo (word) jest dłuższym ciągiem danych niż bajt - najczęściej słowo jest wielokrotnością bajtu: – długości słów są wyrażane w liczbie bitów – czyli 16 lub 32 lub 64 bity – co oznacza 2 lub 4 lub 8 bajtów, – czasami wyróżnia się najmłodszy i najstarszy bajt w słowie, – najczęściej słowo określa długość danych zapisywanych w pamięci (RAM 32- bitowa) lub szerokość magistrali danych (procesor 64-bitowy), – przykłady zapisu słów: 0110010111110000 lub w VHDL "0110010111110000". Półbajt (nibble) jest rzadko stosowaną jednostką zawierającą 4 bity, czasami nazywany bitami maskującymi: – wewnątrz bajtu można mówić o starszym półbajcie i młodszym, – jednostka jest wykorzystywana w operacjach z pamięciami – np. do maskowania części szyny adresowej lub szyny danych, – przykładowy sposób zapisu: 1010 lub w VHDL "1010". II. Pozycyjne systemy przedstawiania informacji w systemach cyfrowych Powszechnie posługujemy się systemem dziesiętnym – w którym dowolną wartość wyrażamy za pomocą 10 cyfr: 0, 1, 2, 3, 4, 5, 6, 7, 8 i 9. Czyli wartość całkowitą 947 możemy zapisać jako: 9 setek + 4 dziesiątki + 7 jednostek – zatem w zapisie matematycznym mamy: 9 100 + 4 10 + 7 1 = 9 102 + 4 101 + 7 100 Podobnie możemy zapisać wartość ułamkową 5836.47 jako: 5 tysięcy + 8 setek + 3 dziesiątki + 6 jednostek + 4 dziesiąte + 7 setnych: 5 1000 + 8 100 + 3 10 + 6 1. 4 0.1 + 7 0.01 = 5 103 + 8 102 + 3 101 6 x 100 + 4 10-1 + 7 10-2 Zatem używamy systemu o podstawie 10 stosującego cyfry: 0, 1, 2, 3, 4, 5, 6, 7, 8 i 9. Żeby wyrazić dowolną liczbę w tym systemie: na poszczególnych pozycjach wpisujemy cyfry odpowiednich potęg podstawy – zaczynając od kropki dziesiętnej w lewo dla części całkowitej i/lub w prawo dla części ułamkowej liczby. Pozycyjne systemy przedstawiania informacji - naturalny system dwójkowy/binarny NKB Podobnie jak w systemie dziesiętnym, ta sama zasada obowiązuje w systemach cyfrowych – w tym w najpopularniejszym Naturalnym Systemie Dwójkowym lub Naturalnym Kodzie Binarnym (skróty NSD / NKB). Przy czym w tym przypadku – jest to system o podstawie 2 w którym używamy cyfr: 0 i 1. Przykładowo wartość 11001 w naturalnym systemie dwójkowym możemy wyrazić jako: 1 24 + 1 23 + 0 22 + 0 21 + 1 20 = 16 + 8 + 0 + 0 + 1 = 25 (dziesiętnie) Podobnie możemy wyrazić wartość ułamkową 10101.101 : 1 24 + 0 23 + 1 22 + 0 21 + 1 20. 1 2-1 + 0 2-2 + 1 2-3 = 16 + 0 + 4 + 0 + 1. 1/2 + 0 + 1/8 = 21.625 (dziesiętnie) Opanowanie istoty zapisu i konwersji danych pomiędzy różnymi systemami – jest warunkiem zrozumienia działania układów cyfrowych. Dla rozstrzygnięcia niejednoznaczności zastosowanego systemu liczbowego – z prawej strony zapisanej wartości podaje się symbol systemu zapisu – tzn. podstawę systemu: (101.01)10 - oznacza wartość dziesiętną, (101.01)2 - oznacza wartość dwójkową Pozycyjne systemy przedstawiania... - konwersja systemu dziesiętnego na NKB Uogólniając na możliwe przypadki – konwersji dziesiętnych liczb rzeczywistych na wartości naturalnego systemu dwójkowego przeprowadzamy w dwóch etapach: - oddzielnie dokonujemy konwersji części całkowitej, - oddzielnie dokonujemy konwersji części ułamkowej, na końcu łączymy wyniki konwersji. Przykład – liczbę dziesiętną 615.3125 zapisać w systemie dwójkowym: - dokonujemy konwersji części całkowitej: 615 = 1001100111, - dokonujemy konwersji części ułamkowej: 0.3125 = 0.0101, - łączymy zapis: (615.3125)10 = (1001100111.0101)2 Wygodną, mechaniczną i łatwą w użyciu metodą konwersji liczb między systemem dziesiętnym a binarnym – jest sekwencyjne dzielenie części całkowitej przekształcanej wartości przez podstawę docelowego systemu, oraz mnożenie sekwencyjne części ułamkowej przez podstawę nowego systemu. Oczywiście dostępne są zasoby techniczne (komputerów czy kalkulatorów) dokonujące automatycznej konwersji danych pomiędzy różnymi systemami zapisu. Pozycyjne systemy przedstawiania... - konwersja liczb dziesiętnych na NKB Przykład: chcemy przedstawić wartość dziesiętną 515.8125 w naturalnym kodzie binarnym. Zaczynamy od konwersji części całkowitej : Konwersja 515 do systemu NKB – na początku bierzemy wartość poddawaną konwersji (515), – dzielimy tę wartość przez podstawę nowego systemu (2), – zapisujemy iloraz (257), – zapisujemy resztę z dzielenia (1) Pozycyjne systemy przedstawiania. - konwersja liczb dziesiętnych na NKB Przykład c.d.: konwersja części całkowitej 515.8125 na NKB. Konwersja 515 do systemu NKB – otrzymany iloraz (257) ponownie dzielimy przez podstawę (2), – zapisujemy nowy iloraz (128), – zapisujemy nową resztę z dzielenia (1) Pozycyjne systemy przedstawiania... - konwersja liczb dziesiętnych na NKB Przykład c.d.: konwersja części całkowitej 515.8125 na NKB. Konwersja 515 do systemu NKB – kontynuujemy podział przez 2 aż iloraz wyniesie zero, – zapisujemy wynik od dołu do góry zaczynając od ostatniego niezerowego ilorazu i wpisując kolejne reszty, – otrzymujemy wartość binarną:1000000011. Pozycyjne systemy przedstawiania. - konwersja liczb dziesiętnych na NKB Przykład c.d.: konwersja części ułamkowej wartości dziesiętnej 515.8125 na NKB. Konwersji dokonujemy mnożąc część ułamkową przez podstawę (2) oraz odrzucając części całkowite: – mnożymy przez 2 wyjściową część ułamkową (0.8125), – odrzucamy powstałą część całkowitą (1), – pozostałą część ułamkową iloczynu (0.6250) poddajemy dalszemu mnożeniu. Pozycyjne systemy przedstawiania... - konwersja liczb dziesiętnych na NKB Przykład c.d.: konwersja części ułamkowej wartości dziesiętnej 515.8125 na NKB. Konwersji 0.8125 na NKB... – odrzucając pojawiające się wartości całkowite, kontynuujemy mnożenie każdej części ułamkowej przez podstawę. Pozycyjne systemy przedstawiania... - konwersja liczb dziesiętnych na NKB Przykład c.d.: konwersja części ułamkowej wartości dziesiętnej 515.8125 na NKB. Konwersji 0.8125 na NKB... – kończymy gdy iloczyn jest zerowy, – Nasz wynik, czytając od góry do dołu (od prawej do lewej), wynosi: 0.1101 – opisana metoda działa dla każdej podstawy – tzn. systemów: trójkowego, ósemkowego, itp. Pozycyjne systemy przedstawiania... - konwersja liczb dziesiętnych na NKB Przykład c.d.: konwersja dziesiętnej liczby 515.8125 na NKB – weryfikacja wyniku. (1000000011.1101)2 = = (129+028+027+026+025+024+023+022+121+120 ). (12-1+12-2+02-3+12-4) = = 1512+0256+0128+064+032+016+08+04+12+11.11/2+11/4+01/8+11/16 = = (512 + 2 + 1). (0.5 + 0.25 + 0.0625) = = (515.8125)10 Pozycyjne systemy przedstawiania informacji - system heksadecymalny/szesnastkowy Naturalny system dwójkowy jest systemem podstawowym w układach cyfrowych. Aczkolwiek, trudno jest odczytać długie ciągi liczb binarnych gdyż nawet niewielka liczba dziesiętna staje się bardzo długą liczbą binarną: 110101000110112 = 1359510 Aby zapewnić zwartość i łatwość odczytu, wartości binarne są często wyrażane przy użyciu systemu szesnastkowego o podstawie 16 – czyli kodu heksadecymalnego. W tym systemie występuje 16 cyfr odpowiadających wartościom systemu dziesiętnego i 4-bitowego NKB w sposób następujący: 016 = 010 = 00002 , 116 = 110 = 00012 , 216 = 210 = 00102 , 316 = 310 = 00112 , 416 = 410 = 01002 , 516 = 510 = 01012 , 616 = 610 = 01102 , 716 = 710 = 01112 , 816 = 810 = 10002 , 916 = 910 = 10012 , A16 = 1010 = 10102 , B16 = 1110 = 10112 , C16 = 1210 = 11002 , D16 = 1310 = 11012 , E16 = 1410 = 11012 , F16 = 1510 = 11112 , Pozycyjne systemy przedstawiania informacji - konwersja NKB kod heksadecymalny Konwersja z NKB na kod szesnastkowy / heksadecymaly polega na: pogrupowaniu liczby NKB w ciągi 4 bitowe zaczynając od LSB (prawej strony), zastąpieniu każdego ciągu odpowiadającą mu cyfrą heksadecymalną. zatem liczbie dziesiętnej 1359510 zapisanej kodem binarnym 00110101000110112 odpowiada liczba szesnastkowa 351B16. 116 = 110 = 00012 , 316 = 310 = 00112 , 516 = 510 = 01012 , B16 = 1110 = 10112 , Konwersja odwrotna – z kodu heksadecymalnego do kodu binarnego, polega na zastąpieniu każdej cyfry szesnastkowej jej 4-bitową reprezentacją w kodzie NKB. W przedstawiony sposób można zapisywać liczby rzeczywiste, dokonując oddzielnie konwersji części całkowitej i ułamkowej. Pozycyjne systemy przedstawiania informacji - kod Graya Kod Graya, stosowany w odniesieniu do liczb całkowitych, należy do kodów bezpiecznych, odpornych na zakłócenia. W tym kodzie, przy przechodzeniu do sąsiedniej wartości większej lub mniejszej – zmiana następuje tylko na jednej pozycji. Poniżej przedstawiono porównanie 4-bitowego kodu Graya z NKB i zapisem dziesiętnym. Pozycyjne systemy przedstawiania informacji - konwersja NKB kod Graya Konwersja wartości pomiędzy kodami Graya i NKB wykorzystuje jednobitową operację logiczną sumy modulo dwa. Tablicę działania tej funkcji dla jednobitowych danych wejściowych a i b przedstawia poniższa tabela: Funkcja przyjmuje wartość ‘1’ dla nieparzystej liczby "jedynek” na wejściu. Kod Graya miał duże znaczenie w syntezie układów cyfrowych metodą tradycyjną. Ma on zastosowanie w układach sterowania, ze względu na odporność na zakłócenia, np. do kontroli kąta obrotu wału. - w postaci tzw. tarczy kodowej. Pozycyjne systemy przedstawiania informacji - konwersja NKB kod Graya Konwersję wartości w NKB do wartości zapisanej w kodzie Graya przeprowadzamy w następujący sposób: - najmłodszy bit wynikowy g(0) wyznaczamy jako sumę modulo 2 bitów b(0) i b(1) liczby NKB; - kolejny bit wynikowy g(1) wyznaczamy jako sumę modulo 2 bitów b(1) i b(2) liczby NKB; - kolejny bit wynikowy g(2) wyznaczamy jako sumę modulo 2 bitów b(2) i b(3) liczby NKB; - czynność powtarzamy dla kolejnych bitów: g(3), g(4),..., g(7); - najstarszy bit wynikowy g(8) wyznaczamy jako sumę modulo 2 najstarszego bitu NKB b(8) oraz wartości 0. Pozycyjne systemy przedstawiania informacji - konwersja NKB kod Graya Konwersję wartości w kodzie Graya do wartości zapisanej w NKB przeprowadzamy w następujący sposób: - najstarszy bit wynikowy b(7) jest najstarszym bitem kodu Graya g(7); - kolejny bit wynikowy b(6) wyznaczamy jako sumę modulo 2 bitu b(7) i g(6); - kolejny bit wynikowy b(5) wyznaczamy jako sumę modulo 2 bitów b(6) i g(5); - czynność powtarzamy dla kolejnych bitów: b(4), b(3),..., b(0). Pozycyjne systemy przedstawiania informacji - kody dwójkowo–dziesiętne - kod BCD Kody dwójkowo – dziesiętne powstają z systemu dziesiętnego w wyniku zastąpienia każdej cyfry dziesiętnej jej 4-bitowym odpowiednikiem w danym kodzie. Konwersja kodu dwójkowo-dziesiętnego na system dziesiętny polega na wydzieleniu 4- bitowych ciągów w zapisie źródłowym i zastąpieniu ich odpowiednimi cyframi dziesiętnymi. Popularnym przedstawicielem tej klasy kodów jest kod BCB (Binary Coded Decimal). Przykład1: liczbę dziesiętną (2517)10 zastąpić kodem BCD: (2517)10 = 2 5 1 7 (0010 0101 0001 0111) = (0010010100010111)BCD Przykład2: Liczbę (10010111010100110001)BCD przekształcić w zapis dziesiętny: (1001 0111 0101 0011 0001)BCD = 9 7 5 3 1 = (97531)10 Pozycyjne systemy przedstawiania informacji - kody dwójkowo–dziesiętne - inne Istnieje szereg innych kodów dwójkowo – dziesiętnych, znajdują one głównie zastosowanie w przekształcaniu informacji z postaci znakowej na informacyjną. Przykładowe z nich przedstawiono w poniższej tabeli. Pozycyjne systemy przedstawiania informacji - kod alfanumeryczne – kod ASCII Systemy cyfrowe operują na danych binarnych, człowiek historycznie przyzwyczaił się do systemu dziesiętnego. Zatem, żeby ułatwić komunikację z urządzeniem cyfrowym (komputerem) opracowano tzw. kody znakowe. Kody te w sposób binarny przedstawiają: cyfry, litery i inne symbole oraz specjalne znaki sterujące. Jednym z takich kodów jest kod ASCII (American Standard Code for Information Interchange), znany również jako ISO-7. Jest to 7 bitowy zapis liter alfabetu łacińskiego oraz znaków specjalnych, jest on uzupełniany bit parzystości na najstarszej pozycji – lub ta pozycja jest używana do wskazywania drugiej strony kodowej, która zawiera specyficzne znaki językowe. Znalazł on między innymi zastosowanie w kodowaniu klawiszy klawiatury komputerowej. Wybrane przykłady kodu ASCI kodu: - klawisz Backspace (BS) => 0000 1000, - klawisz Escape => 0001 1011, - klawisz Spacja => 0010 0000, - klawisz ‘#’ => 0010 0011, - klawisz ‘6’ => 0011 0110, - klawisz ‘K’ => 0100 1011, - klawisz ‘m’ => 0110 1101, - klawisz ‘+’ => 0010 1011, itd. Pozycyjne systemy przedstawiania informacji - tablica kodów ASCII Kody transmisyjne Współcześnie informacje cyfrowe przesyła się nie w sposób równoległy lecz szeregowy. Oznacza to, że np. 8 bitowa wartość binarna jest przekształcana w sygnał szeregowy i wysyłana bit po bicie, rozpoczynając od najstarszego bitu. W trakcie szeregowej transmisji danych stosuje się specjalne kody znaków, bardziej odporne na zakłócenia i przekłamania. Przykładem takiego kodu jest kod NRZ (non-return-to-zero). W kodzie tym każdej zmianie na sąsiednich pozycjach wartości z ‘0’ na ‘1’ lub z ‘1’ na ‘0’ - odpowiada zmiana poziomu sygnału elektrycznego na przeciwny. Np. szeregowa transmisja słowa OK (w kodzie ASCII z bitem parzystości) wyglądałaby następująco: 0100 1111 (O) 0100 1011 (K) Kody transmisyjne W systemach technicznych nie jest możliwe uzyskanie 100% jakości transmisji bez przekłamań. Wraz ze wzrostem szybkości transmisji prawdopodobieństwo wystąpienia przekłamań rośnie geometrycznie. Stąd zagadnienie detekcji i korekcji błędów jest krytyczne dla jakości transmisji lub przechowywania danych. W tym celu w przypadku krótkich ramek transmisyjnych, na końcu dodawane są bity kontrolne, np. bity parzystości. Mogą one zabezpieczać przed błędami danych wejściowych. Podczas transmisji dużych bloków danych – w trakcie transmisji stosuje się sprawdzanie sumy kontrolnej (CRC) pozwala wykrywać błędy transmisji dużych bloków danych. Bity i sumy kontrolne należą do tzw. systemowej detekcji błędów. W przypadku wykrycia błędów transmisyjnych, system detekcji może zażądać powtórzenia transmisji. Nie można takiej metody zastosować w stosunku do pamięci masowych i systemów przechowywania danych. Z tego względu stosuje się systemy korekcji błędów, w tym specjalne kody Hamminga i Reed-Solomana. Kod Reed-Solomana jest użyteczny podczas korekcji błędów polegających na uszkodzeniu sąsiadujących bitów. Ten rodzaj kodu jest stosowany podczas zapisu na płytach CD ze względu na ryzyko zarysowania nośnika. Kod Hamminga jest tworzony przez dodanie bitów nadmiarowych (redundancji) lub bitów parzystości do słowa danych. Algorytmy tworzenia kodów Hamminga można znaleźć w literaturze, szczegóły dotyczą kodowania informacji nie wchodzą w zakres przedmiotu. III. Systemy zapisu liczb ujemnych Dotychczasowe nasze rozważania koncentrowały się na zapisie liczb dodatnich w systemach dwójkowym lub szesnastkowym. W systemach cyfrowych operuje się zarówno na wartościach dodatnich jak i ujemnych - czyli liczbach ze znakiem. W tym celu stosuje specjalne mechanizmy a długości przetwarzanych słów często uzupełnia się do długości jednego bajtu lub jego wielokrotności. Z samego zapisu binarnego nie wynika znak liczby binarnej, zatem użytkownik musi wiedzieć w jakim systemie zapisu liczb ze znakiem operuje. Istnieją 3 systemy wyrażania liczb ze znakiem ze znakiem: - system znak moduł – Signed Magnitude; - system znak uzupełnienia do jedności (kod U1) – One's Complement, - system znak uzupełnienia do dwóch (kod U2) - Two's Complement. System NKB jest elastyczny co do ilości bitów w zapisie liczby, jednak systemy kodowania liczb ze znakiem często wymuszają formaty 8-bitowe, 16-bitowe, 32-bitowe itd. Wynika to faktu, że najczęściej najstarszy bit niesie informację o znaku liczby, zaś pozostałe bity odpowiednio przedstawioną wartość liczby binarnej. Systemy zapisu liczb ujemnych – zapis znak moduł - ZM W systemie zapisu znak moduł liczb binarnych, najstarszy bit określa znak całej liczby: - po bicie znaku występuje wartość bezwzględna liczby w NKB, - jeżeli bit znaku wynosi ‘0’ oznacza to liczbę dodatnią, - jeżeli bit znaku przyjmuje wartość ‘1’ mamy do czynienia z liczbą ujemną, - liczby dodatnie posiadają identyczną interpretację jak w NKB. Np. poniższe wartości w systemie znak moduł są zapisywane jako: - "00000011" = (+3)10, - "10000011" = (-3)10. Jest to zrozumiały dla człowieka system lecz wymaga złożonych rozwiązań sprzętowych w obliczeniach komputerowych. Z tego względu w obliczeniach komputerowych stosuje się zapisy komplementarne, tzn. uzupełnienie do jedności i uzupełnienie do dwóch. Systemy komplementarne zapisu liczb ujemnych - znak uzupełnienie do jedności – U1 W systemie zapisu znak uzupełnienie do jedności, zapis liczb dodatnich jest identyczny jak w systemie znak moduł. W przypadku liczb ujemnych – negujemy wszystkie bity komplementarnej liczby dodatniej zapisanej w systemie znak moduł, łącznie z bitem znaku. Np. chcemy przedstawić liczbę (-6)10 w postaci czterobitowej liczby binarnej systemu U1: - komplementarną liczbą dodatnią jest (+6)10 czyli (0110)2 , - w liczbie komplementarnej bitem znaku jest wartość 0 na najstarszej pozycji, - po zanegowaniu tej liczby otrzymujemy oczekiwaną wartość (1001) U1. Istnieją inne algorytmy konwersji ale nie będą rozpatrywane. Systemy komplementarne zapisu liczb ujemnych - znak uzupełnienie do dwóch – U2 W systemie zapisu znak uzupełnienie do dwóch, zapis liczb dodatnich jest identyczny jak w systemie znak moduł. W przypadku liczb ujemnych jest dopełnieniem do 2n n-bitowego zapisu dodatniej wartości w systemie ZM – jeden z algorytmów konwersji jest następujący: - wyznaczamy binarną wartość 2n – n jest liczbą bitów wartości dodatniej tej samej liczby, - wyznaczamy dodatnią wartość przekształcanej liczby w systemie ZM, - od wyznaczonej wartości 2n odejmujemy wartość dodatnią tej samej liczby w systemie ZM, - powstała różnica jest wartością ujemną konwertowanej liczby w systemie U2. Np. chcemy przedstawić liczbę (-5)10 w postaci liczby binarnej systemu U2: - wartość ujemna (-5)10 w systemie ZM wynosi 1101ZM, - wartość dodatnia (+5)10 w systemie ZM wynosi 0101ZM , - liczba dodatnia w ZM posiada 4 bity – zatem n = 4, - 2n = 24 = 1610 = 100002, - odejmujemy: 100002 – 0101ZM = 1011U2. IV. Pozycyjne systemy - operacje arytmetyczne na liczbach dwójkowych – zapis NKB W systemie NKB dodawanie wykonujemy w podobny sposób jak w systemie dziesiętnym: - zapisujemy obie liczby w taki sposób aby bity o tych samych wagach znajdowały się na identycznych pozycjach, - dodajemy cyfry parami począwszy od najmniej znaczącej pozycji, - pojawiające się przeniesienia sumujemy przy dodawaniu następnej pary cyfr. W systemie NKB odejmowanie wykonujemy w jak w systemie dziesiętnym: - zapisujemy obie liczby w taki sposób aby bity o tych samych wagach znajdowały się na identycznych pozycjach, - odejmujemy cyfry parami począwszy od najmniej znaczącej pozycji, - zaciągnięte pożyczki uwzględniamy przy odejmowaniu następnej pary cyfr. Pozycyjne systemy - operacje arytmetyczne na liczbach dwójkowych – zapis NKB W systemie NKB mnożenie wykonujemy w podobny sposób jak w systemie dziesiętnym: - zapisujemy jedną liczbę pod drugą pomijając kropki dziesiętne, - mnożymy jedną liczbę przez kolejne bity drugiej, - sumujemy wyniki pośrednie, - ustalamy położenie kropki dziesiętnej. Warto zauważyć, że w szczególnym przypadku, mnożenie liczb binarnych przez potęgi wartości 2 – tzn. mnożenie przez 2 lub 4 lub 8 itd., polega na przesuwaniu mnożonej liczby o 1 lub 2 lub 3 itd. pozycje w lewo. Pozycyjne systemy - operacje arytmetyczne na liczbach dwójkowych – zapis NKB W systemie NKB dzielenie wykonujemy w prostszy sposób niż w systemie dziesiętnym: - podobnie jak w systemie dziesiętnym zaczynamy od lewej strony, - sprawdzamy czy dzielnik mieści się w odpowiednim ciągu dzielnej, - jeżeli mieści się jako najstarszy bit ilorazu wpisujemy 1 jeżeli nie 0, - do powstałej reszty dopisujemy kolejną cyfrę dzielnej, - cykl powtarzamy do uzyskania zerowej reszty lub zakładanej dokładności (okresu reszty). Pozycyjne systemy - operacje arytmetyczne na liczbach dwójkowych – system U2 Ze względu na znaczenie omówiony zostaną tylko operacje arytmetyczne tylko na danych w systemie U2. Opis operacji arytmetycznych na danych w zapisie ZM i U1 można znaleźć z przykładami w przesłanej literaturze. Operacje dodawania i odejmowania przeprowadza się na wszystkich bitach danych łącznie z bitem znaku – wynik otrzymuje się w zapisie U2. Jeżeli w wyniku operacji przed bitem znaku pojawi się bit przeniesienia – należy go zignorować. Każde odejmowanie można sprowadzić do dodawania liczby ze znakiem przeciwnym – zatem, praktycznie wystarczy stosowanie tylko operacji dodawania. Manualne operacje mnożenia i dzielenia na danych U2 są skomplikowane, ich opis można znaleźć w literaturze, najczęściej takie operacje są realizowane w mikroprocesorach lub specjalizowanych układach cyfrowych – dlatego nie są omawiane na tym wykładzie. V. Wybrane elementy algebry Boolea Algebra Boolea jest matematycznym systemem operującym na zmiennych przyjmujących dwie wartości: true lub false, on lub off, ‘1’ lub ‘0’, high lub low. Wyrażenia algebry Boolea powstają poprzez użycie operatorów boolowskich do zmiennych logicznych, operatorami są: AND, OR i NOT: - operator AND czasami jest nazywany iloczynem logicznym - po prawej stronie przedstawiono tzw. tablicę prawdy tej funkcji – czyli opis jej wyniku dla wszystkich kombinacji wejść. Warto zauważyć, że funkcja przyjmuje wartość ‘1’ jedynie wtedy, gdy wszystkie operandy/wejścia przyjmują wartość ‘1’; - operator OR bywa nazywany sumą logiczną – funkcja przyjmuje wartość ‘1’ gdy chociaż jedno wejście/operand jest w stanie wysokim; - jednowejściowy operator NOT zamienia na przeciwny sygnał podawany na wejście (neguje). Jest to operator o najwyższym priorytecie, następnym jest AND, zaś OR posiada najniższy priorytet. W celu uniknięcia niejednoznaczności priorytetów, zalecane jest stosowanie nawiasów. Wybrane elementy algebry Boolea – pojęcie funkcji boolowskiej Funkcja boolowska jest wyrażeniem, które zawiera posiada: - co najmniej jedną zmienną logiczną (A, B,...), - co najmniej jeden operator boolowski (NOT, AND,...), - co najmniej jedno wejście przyjmujące wartości 0 lub 1, - wytwarza ona sygnał wyjściowy przyjmujący wartości 0 lub 1. Wynik wyjściowy przyjmuje również wartość ze zbioru {1,0}. Jest ona alternatywną formą opisu układu kombinacyjnego w stosunku do tablicy prawdy, np.: W celu odtworzenia tablicy prawdy z zapisu funkcyjnego, wprowadzono dodatkowe kolumny zawierające wyniki cząstkowe. W układach cyfrowych obowiązuje konwencja - oznacza sygnał prosty (poziom wysoki), wejścia sterujące tak oznaczone reagują na wartość ‘1’, - oznacza sygnał zanegowany w stosunku do x, wejścia sterujące tak oznaczone reagują na poziom sygnału (‘0’). Wybrane elementy algebry Boolea – aksjomaty i ważniejsze tożsamości W upraszczaniu funkcji boolowskich, przydatne są przekształcenia tożsamościowe - podstawowe - - arytmetyczne (przemienności, łączności i rozdzielczości) - prawa pochłaniania, De Morgana i podwójnej negacji Wybrane elementy algebry Boolea – aksjomaty i ważniejsze tożsamości Przykład zastosowania aksjomatów i tożsamości algebry Boolea dotyczy poniższej funkcji: stosując poniższy ciąg przekształceń - funkcję uproszczono do: F(X,Y,Z) = XZ Wybrane elementy algebry Boolea – tablica prawdy – Truth Table Tablica prawdy jest sformalizowanym opisem funkcjonowania układu cyfrowego, konkretnie układu kombinacyjnego. Ta forma stanowi dane wejściowe do projektowania układu cyfrowego. Tablica prawdy zawiera wykaz wszystkich możliwych wartości sygnałów wejściowych oraz odpowiadających im sygnałów wyjściowych. Przykład: mamy system automatycznej klasyfikacji jakości wyrobów (piwa). Na stanowisku diagnostycznym mierzone są 3 parametry jakości – nazwijmy je: A, B, C (% alkoholu w piwie, klarowność trunku, objętość) Jeżeli dany parametr spełnia wymagania jakościowe to przyjmuje wartość ‘1’ – w przeciwnym przypadku wartość ‘0’. Wyrób jest zaliczany jako bardzo dobry – jeżeli spełnia wszystkie parametry, jeżeli spełnia 2 parametry – jest dobry,1 parametr – jest przeciętny, jest wadliwy gdy nie spełnia żadnego. Układ cyfrowy nie rozumie języka naturalnego: w tym słów: bardzo dobry, dobry, przeciętny lub wadliwy. Stąd trzeba te terminy zakodować najmniejszą liczbą bitów np.: bardzo dobry = „11” (Okocim), dobry = „10” (Łomża), przeciętny „01” (Tyskie) i wadliwy = „00” (Kozel). Zatem nasz system posiada trzy wejścia: A, B i C oraz dwubitowe wyjście Y1 i Y2 – określające jakość. Tablica prawdy naszego układu jest następująca: Wybrane elementy algebry Boolea – postacie kanoniczne funkcji boolowskich Istnieją dwie kanoniczne postacie zapisu funkcji boolowskich: - kanoniczna postać sumacyjna – wyraża się ona w formie sum iloczynów operandów: - kanoniczna postać iloczynowa – będąca iloczynem sum operandów: - obie postacie są sobie równoważne, - oznacza to, że układy zaprojektowane na podstawie postaci sumacyjnej i iloczynowej będą funkcjonowały identycznie, - postacie kanoniczne tworzymy bezpośrednio z tabeli prawdy opisującej układ. Wybrane elementy algebry... – tworzenie funkcji w kanonicznej postaci sumacyjnej Utwórzmy kanoniczną funkcję sumacyjną dla wyjścia Y1, układu opisanego poniższą tabelą prawdy: - uwzględniamy tylko te przypadki gdy funkcja na wyjściu Y1 przyjmuje wartość 1, - dla uwzględnianych przypadków tworzymy iloczyn wejść, jeżeli argument (A, B, C) przyjmuje wartość 0 – w funkcji wynikowej zapisujemy go w postaci zanegowanej (np. ), - jeżeli dla rozpatrywanego przypadku, argument funkcji przyjmuje wartość 1 – zapisujemy go w postaci prostej (np. B), - tworzymy iloczyny składowe uwzględniając wszystkie argumenty (A, B, C) - postać końcową funkcji przedstawiamy jako sumę iloczynów składowych. lub w postaci uproszczonej w której nawiasie podawana jest wartość argumentów wyrażona dziesiętnie: Wybrane elementy algebry... – tworzenie funkcji w kanonicznej postaci sumacyjnej Historia układów cyfrowych – od bramki do FPGA Wybrane elementy algebry... – tworzenie funkcji w kanonicznej postaci iloczynowej Utwórzmy kanoniczną funkcję iloczynową dla wyjścia Y0, układu opisanego poniższą tabelą prawdy: - uwzględniamy tylko te przypadki gdy funkcja na wyjściu Y1 przyjmuje wartość 0, - dla uwzględnianych przypadków, jeżeli argument (A, B, C) przyjmuje wartość 0 – w funkcji wynikowej zapisujemy go w postaci prostej (np. A ), - jeżeli dla rozpatrywanego przypadku, argument funkcji przyjmuje wartość 1 – zapisujemy go w postaci zanegowanej (np. ), - tworzymy sumy składowe uwzględniając wszystkie argumenty (A, B, C) - postać końcową funkcji przedstawiamy jako iloczyn opracowanych sum składowych. lub w postaci uproszczonej w której nawiasie podawana jest wartość argumentów wyrażona dziesiętnie: Egzamin zerowy nr 2/10