Kodowanie magistrali - Bus encoding
Kodowanie magistrali odnosi się do konwersji / zakodowania fragmentu danych do innej postaci przed uruchomieniem na magistrali . Chociaż kodowanie magistrali może służyć do różnych celów, takich jak zmniejszenie liczby pinów, kompresja danych do przesłania, redukcja przesłuchów między liniami bitowymi itp., Jest to jedna z popularnych technik stosowanych w projektowaniu systemu w celu zmniejszenia mocy dynamicznej zużywane przez magistralę systemową . Kodowanie magistrali ma na celu zmniejszenie odległości Hamminga między 2 kolejnymi wartościami na magistrali. Ponieważ aktywność jest wprost proporcjonalna do odległości Hamminga , kodowanie magistrali okazuje się skuteczne w zmniejszaniu ogólnego współczynnika aktywności, zmniejszając tym samym dynamiczne zużycie energii w systemie.
W kontekście tego artykułu system może odnosić się do wszystkiego, gdzie dane są przesyłane z jednego elementu do drugiego za pośrednictwem magistrali (tj. System na chipie (SoC), system komputerowy, system wbudowany na pokładzie itp.).
Motywacja
Zużycie energii w systemach elektronicznych jest obecnie przedmiotem obaw z następujących powodów:
- Urządzenia zasilane bateryjnie : Ze względu na wszechobecność urządzeń zasilanych bateryjnie i potrzebę maksymalizacji czasu między dwoma kolejnymi ładowaniami baterii konieczne jest, aby system zużywał jak najmniej energii (i energii).
- Ograniczenia środowiskowe : Aby chronić środowisko, musimy oszczędzać energię użytkową. Ponieważ energia zużywana przez systemy elektroniczne drastycznie rośnie, minimalizacja zużycia energii przez systemy elektroniczne ma kluczowe znaczenie dla ochrony środowiska.
- Rozpraszanie mocy : zgodnie z prawem Moore'a , urządzenia półprzewodnikowe pakują coraz więcej tranzystorów na mniejszej powierzchni. Prowadzi to do większego rozpraszania mocy na jednostkę powierzchni i sprawia, że projektowanie opakowań i systemów chłodzenia termicznego jest skomplikowane i kosztowne. Dlatego do rozwiązania tego problemu potrzebne są układy elektroniczne małej mocy.
Dynamiczna moc rozpraszana przez obwód elektroniczny jest wprost proporcjonalna do współczynnika aktywności i pojemności obciążenia, jak widać na wyjściu bramki logicznej. W przypadku magistrali pojemność obciążenia jest zwykle wysoka, ponieważ magistrala musi być podłączona do wielu modułów i trasowana dłużej, a współczynnik aktywności jest również wysoki. Ze względu na wyższą wartość pojemności obciążenia i współczynnika aktywności, w typowym systemie pobór mocy magistrali może stanowić do 50% całkowitego zużycia energii. Kodowanie magistrali ma na celu zmniejszenie tej mocy poprzez zmniejszenie aktywności (liczby przełączników) na liniach autobusowych. Podczas gdy rodzaj kodowania magistrali, który ma być użyty w konkretnym systemie, można najlepiej określić, gdy aplikacja docelowa i ograniczenia środowiskowe dotyczące systemu są znane apriori, poniżej opisano niektóre techniki kodowania magistrali, które mogą pomóc zmniejszyć moc magistrali dla większości systemów.
Dlatego kodowanie magistrali jest ważne dla każdego projektu systemu elektronicznego.
Przykłady kodowania magistrali w celu uzyskania małej mocy
Poniżej przedstawiono niektóre z implementacji wykorzystujących kodowanie magistrali w celu zmniejszenia dynamicznego zużycia energii w różnych scenariuszach:
- Kodowanie szare : linie adresowe magistrali w większości systemów komputerowych zwiększają kolejne wartości liczbowe ze względu na lokalizację przestrzenną . Jeśli używamy zwykłego kodowania binarnego dla magistrali, nie jesteśmy pewni minimalnej odległości Hamminga między 2 kolejnymi adresami. Używanie kodów Graya do kodowania linii adresowych doprowadzi do odległości Hamminga równej 1 między dowolnymi 2 kolejnymi wartościami szyny adresowej (o ile zachowana jest lokalność przestrzenna). Istnieją odmiany tego schematu zwane kodowaniem Shifted Grey, które zmniejszają narzut opóźnienia.
- Adresowanie sekwencyjne lub kody T0 : W przypadku szyny adresowej, ze względu na lokalność przestrzenną występującą w programach, większość przejść obejmuje zmianę adresu na następną kolejną wartość. Możliwym schematem kodowania jest użycie dodatkowej linii INC w magistrali wskazującej, czy bieżące przejście jest kolejnym adresem przyrostowym, czy nie. Jeśli nie jest to adres kolejny, to odbiornik może wykorzystać wartość na magistrali. Ale jeśli jest to adres kolejny, nadajnik nie musi zmieniać wartości na magistrali, ale po prostu ustawić linię INC na 1. W takim przypadku dla ciągłego schematu adresowania nie ma w ogóle przejścia na magistrali, prowadząc do współczynnik aktywności autobusu równy 0.
- Reprezentacja liczb : rozważmy przykład systemu, który pobiera jedne ze swoich danych z czujnika. W większości przypadków czujnik może mierzyć hałas i na potrzeby tego przykładu należy wziąć pod uwagę, że mierzone wartości to (0) i (-1) naprzemiennie. W przypadku 32-bitowej magistrali danych wartość 0 przekłada się na 0x00000000 (0000 0000 0000 0000 0000 0000 0000 0000), podczas gdy (-1) przekłada się na 0xFFFFFFFF (1111 1111 1111 1111 1111 1111 1111 1111) w uzupełnieniu do 2. Widzimy, że odległość Hamminga w tym przypadku wynosi 32 (ponieważ wszystkie 32-bity zmieniają swój stan). Zamiast tego, jeśli zakodujemy magistralę w celu użycia reprezentacji liczb całkowitych ze znakiem (MSB to bit znaku), możemy przedstawić 0 jako 0x00000000 (0000 0000 0000 0000 0000 0000 0000 0000) i -1 jako 0x80000001 (1000 0000 0000 0000 0000 0000 0000 0001) . W tym przypadku widzimy, że odległość Hamminga między liczbami wynosi zaledwie 2. W związku z tym, używając dopełnienia 2 do kodowania arytmetycznego ze znakiem, jesteśmy w stanie zmniejszyć aktywność z 32 do 2.
- Kodowanie inwersyjne : jest to kolejna implementacja kodowania magistrali, w której do linii magistrali dodawana jest dodatkowa linia o nazwie INV. W zależności od wartości linii INV, inne linie będą używane z inwersją lub bez niej. np. jeśli linia INV ma wartość 0, dane na magistrali są próbkowane bez zmian, ale jeśli linia INV ma wartość 1, dane na magistrali są odwracane przed jakimkolwiek przetwarzaniem na niej. Odwołując się do przykładu użytego w 3, zamiast używać reprezentacji liczby całkowitej ze znakiem, moglibyśmy nadal używać dopełnienia 2 i osiągnąć taką samą redukcję aktywności przy użyciu kodowania inwersyjnego. Tak więc 0 będzie reprezentowane jako 0x00000000 z INV = 0, a -1 będzie reprezentowane jako 0x00000000 z INV = 1. Ponieważ INV = 1, odbiornik odwróci dane przed ich zużyciem, tym samym wewnętrznie konwertuje je na 0xFFFFFFFF. W tym przypadku tylko 1 bit (bit INV) jest zmieniany przez magistralę, co prowadzi do aktywności czynnika 1. Ogólnie, w kodowaniu inwersyjnym, koder oblicza odległość Hamminga między wartością bieżącą a następną i na tej podstawie określa, czy użyć INV = 0 lub INV = 1.
- Kodowanie wartości w pamięci podręcznej : jest to inna forma kodowania magistrali, używana głównie w magistralach zewnętrznych (poza chipem). Słownik (pamięć podręczna wartości) jest utrzymywany zarówno po stronie nadawcy, jak i odbiorcy, na temat niektórych powszechnie udostępnianych wzorców danych. Zamiast za każdym razem przekazywać wzorce danych, nadawca po prostu przełącza jeden bit wskazujący, który wpis z pamięci podręcznej wartości ma być użyty po stronie odbiorcy. Tylko w przypadku wartości, których nie ma w pamięci podręcznej wartości, pełne dane są przesyłane przez magistralę. Było wiele zmodyfikowanych implementacji tej techniki z zamiarem maksymalizacji trafień w pamięci podręcznej wartości, ale idea jest taka sama.
- Zaproponowano również inne techniki, takie jak kodowanie sektorowe, odmiany kodowania inwersyjnego. Prowadzono prace nad wykorzystaniem kodowania magistrali, które zmniejszają zużycie energii w przypadku upływu, a także zmniejszają przesłuch przy minimalnym wpływie na opóźnienia ścieżek.
Inne przykłady kodowania magistrali
Wiele innych typów kodowania magistrali zostało opracowanych z różnych powodów:
- ulepszona kompatybilność elektromagnetyczna: sygnalizacja różnicowa stosowana w wielu szynach oraz bardziej ogólny kod o stałej masie używany w interfejsie szeregowym kamery MIPI C-PHY są zarówno bardziej odporne na zakłócenia zewnętrzne, jak i emitują mniej zakłóceń do innych urządzeń.
- multipleksowanie magistrali: wiele wczesnych mikroprocesorów i wiele wczesnych układów DRAM obniżyło koszty dzięki zastosowaniu multipleksowania magistrali, zamiast przypisywać pin do każdego bitu adresu i bitu danych magistrali systemowej . W jednym podejściu ponownie wykorzystuje się piny szyny adresowej w różnym czasie dla styków szyny danych, podejście stosowane przez konwencjonalne PCI . W innym podejściu ponownie wykorzystuje się te same szpilki w różnym czasie dla górnej i dolnej połowy szyny adresowej, podejście stosowane przez wiele dynamicznych układów pamięci o dostępie swobodnym , dodając 2 szpilki do szyny sterującej - adres wierszowy stroboskop ( RAS ) i stroboskop adresu kolumny ( CAS ).
Metoda realizacji
W przypadku projektów SoC schematy kodowania magistrali można najlepiej zaimplementować w RTL poprzez tworzenie instancji dedykowanych koderów i dekoderów przez magistralę. Innym sposobem, w jaki można by to zaimplementować, jest przekazanie wskazówki do narzędzia syntezy albo jako śladu symulacji, albo poprzez użycie pragmy syntezy w celu zdefiniowania wymaganego typu kodowania.
Na pokładzie mały układ scalony o niskim poborze mocy można wdrożyć między modułem głównym i podrzędnym na magistrali, aby zaimplementować funkcje kodowania i dekodowania.
Właściwości funkcji kodowania
Funkcja kodowania / dekodowania magistrali musi być bijekcją . Zasadniczo wymaga to funkcji kodowania, aby mieć następujące zachowanie:
- Wszystkie dane, które mają być uruchamiane na magistrali, muszą mieć unikalną zakodowaną wartość, a każda zakodowana wartość musi w unikalny sposób zdekodować tę samą oryginalną wartość.
- Musi istnieć możliwość zakodowania i zdekodowania wszystkich wartości, które może wygenerować źródło.
Kompromis / analiza
- Podczas gdy dodanie kodowania magistrali zmniejsza współczynnik aktywności na magistrali i prowadzi do zmniejszenia mocy dynamicznej, dodanie enkoderów i dekoderów wokół magistrali powoduje dodanie do projektu dodatkowych obwodów, które również zużywają pewną ilość energii dynamicznej. Musimy wziąć to pod uwagę podczas obliczania oszczędności energii.
- Dodatkowe obwody zwiększą również moc upływu projektu / obwodu / systemu / SoC. Jeśli podstawowy współczynnik aktywności magistrali systemowej nie jest zbyt wysoki, kodowanie magistrali może nie być bardzo realną opcją, ponieważ obniży całkowite zużycie energii z powodu większej mocy upływu.
- Jeśli taktowanie magistrali znajduje się na krytycznej ścieżce danych, dodanie dodatkowych obwodów w ścieżce pogorszy ścieżkę taktowania i może okazać się szkodliwe. Tę analizę należy przeprowadzić ostrożnie, aby określić, jakiego rodzaju kodowania szyny użyć.
Zobacz też
- Adresowanie w kodzie szarym
- Rozpraszanie mocy
- Elektronika małej mocy
- Usuwanie usterek
- Komputery zielone
Bibliografia
Dalsza lektura
- Su, Ching-Long; Tsui, Chi-Ying; Despain, Alvin M. (1994). Techniki projektowania i kompilacji architektury małej mocy dla procesorów o wysokiej wydajności (PDF) (raport). Laboratorium Zaawansowanej Architektury Komputerowej. ACAL-TR-94-01.