Czym dokładnie jest mikrokod i czym różni się od oprogramowania układowego?

50

Jeśli chodzi o terminologię, czym dokładnie jest „mikrokod”, a jeśli można go zaktualizować, czym różni się od oprogramowania układowego?

To pytanie nie jest duplikatem tego pytania (o ile mogę powiedzieć), które również zadałem na temat modyfikacji mikrokodu. Tutaj ściśle chcę wiedzieć, jak prawidłowo używać tych terminów.

Aktualizacja

Mam wybraną odpowiedź, ale nie jestem z niej szczególnie zadowolony. Podjąłem wiele odpowiedzi i uważam, że wiele z nich jest równie niezadowalających. Pozwólcie, że przedstawię wam moje dwie ramki,

  1. „Mikrokod procesora jest podobny do oprogramowania układowego procesora”. Gdy czytam to coraz bardziej, tak to rozumiem. „Mikrokod” w tym kontekście jest po prostu marketingiem nad „oprogramowaniem procesora”. Zrób ze mną ...
  2. Albo się mylę i wiem, że tak się dzieje! W takim przypadku potrzebuję dokładniejszego zrozumienia, dlaczego się mylę. W tych odpowiedziach, które czytam, aby wskazać, że się mylę, staram się je zrozumieć,
    • „Wykonanie a dane” wiele odpowiedzi używa tego paradygmatu, ale dla procesora nie ma to dla mnie większego sensu. Niektóre oprogramowanie wewnętrzne typu asert jest wykonywane, ale przez co? Jeśli chodzi o procesor, czy instrukcje programów lub dane?
    • Jeśli oprogramowanie układowe łączy oprogramowanie i sprzęt (czytaj: elektrotechnika Bogów), to w jaki sposób mikrokod również nie spełnia tego rozróżnienia.
    • „Interpretowanie” z biegiem czasu ma to coraz mniej sensu. Co to znaczy, że „instrukcje sprzętowe są interpretowane” za pomocą Microcode. Jeśli to prawda, czy coś byłoby tak wydajne, gdyby nie zostało zinterpretowane, ale wstępnie skompilowane do różnych instrukcji sprzętowych i jedynie „wykonane”? Ponadto, w jaki sposób General MIDI nie jest interpretowany w tym samym świetle? Jest to język, który jest interpretowany przez „mikrokod MIDI” i działa na sprzęcie. Lub głupie terminale, które interpretują instrukcje teleprintera do wyświetlania wizualnego?
    • Czy „mikrokod” ma zastosowanie do kodu działającego na kartach dźwiękowych i kartach graficznych (GPU) ?
Evan Carroll
źródło
Nie jestem ekspertem, ale powiedziałbym, że mikrokod to oprogramowanie procesora. Wyobrażam sobie, że wszystkie dane dotyczące sposobu wykonywania mikrokodu byłyby zastrzeżone przez intel / AMD, ale mogę zgadywać, jak to by działało. Masz prosty zestaw procesorów, podstawowe rzeczy, takie jak pobieranie z pamięci i operatory matematyczne. Następnie masz złożony zestaw instrukcji (takich jak x86 / intel). CPU pobiera instrukcję z pamięci i używa mikrokodu do konwersji złożonej instrukcji na prostszą. Jednym z przykładów może być mnożenie. Większość procesorów ma instrukcję mnożenia, ale tak naprawdę mnożenie składa się z wielu przesunięć bitów.
Programmdude
Termin Mikrokod odnosi się do faktu, że używa / stanowi podstawę wielu instrukcji „kodu” procesora. Zasadniczo informuje procesor, jak emulować instrukcje i funkcje. Stąd nazwa. Z punktu widzenia właściciela komputera jest to kolejny zestaw kodu dostarczany przez dostawcę sprzętu, więc można go podsumować jako oprogramowanie układowe.
eckes
IMO, najlepsza prosta odpowiedź brzmi: „Za każdym razem, gdy procesor wykonuje instrukcję, faktycznie wykonuje program mikrokodu”. To, co wydaje się być instrukcją pojedynczego procesora, to szczególna sekwencja instrukcji mikrokodu, „program mikrokodu”. Każda instrukcja ma swój własny program mikrokodu. Poszczególne instrukcje mikrokodu włączają / wyłączają / itd. Różne wewnętrzne bity procesora.
Ethan Reesor,

Odpowiedzi:

57

Pochodzenie słowa „firmware” stanowi punkt pośredni między sprzętem a oprogramowaniem - oprogramowaniem osadzonym na sprzęcie. Odnosi się do oprogramowania, które jest przechowywane w nieulotnej pamięci na urządzeniu sprzętowym. Przykładami są pamięć EEPROM i Flash wbudowane w urządzenia sprzętowe, gdy są one używane do przechowywania kodu uruchamianego przez samo urządzenie.

W niektórych rodzajach sprzętu coraz powszechniejsze jest przechowywanie „oprogramowania układowego” w oprogramowaniu sterownika i ładowanie go na urządzenie po uruchomieniu / inicjalizacji, zamiast pozostawiania go na stałe w urządzeniu. Na przykład obecnie nie jest wielkim problemem przechowywanie kilkuset KB kodu oprogramowania układowego w sterowniku oprogramowania załadowanego do systemu operacyjnego hosta i wysyłanie go do urządzenia w momencie inicjalizacji przez sterownik.

Jest to często określane jako „oprogramowanie układowe”, chociaż w zależności od definicji oprogramowania układowego, które akceptujesz, możesz technicznie nie uznać go za oprogramowanie układowe, ponieważ nie jest ono rezydentne na sprzęcie (jeśli odłączysz sprzęt i umieścisz go w innym systemie, nie zachowuje tej wersji „oprogramowania układowego”).

Mikrokod jest podzbiorem tego drugiego typu „oprogramowania układowego”. Mikrokod nie jest ogólnym terminem określającym całe „oprogramowanie układowe” ładowane do urządzenia podczas rozruchu. Zamiast tego jest specyficzny dla procesorów, gdzie mikrokod zasadniczo tworzy warstwę translacji między standardowymi instrukcjami procesora wyższego poziomu a operacjami niższego poziomu specyficznymi dla tego procesora. Jest ładowany do procesora podczas rozruchu przez BIOS, ale może zostać zastąpiony później na etapie rozruchu również przez system operacyjny.

Aktualizacja mikrokodu pozwala zmodyfikować zachowanie niskiego poziomu procesora, aby obejść pewne błędy, które nie zostały jeszcze odkryte, bez konieczności wymiany sprzętu procesora. Mikrokod zwykle zawiera najbardziej wydajne odwzorowanie z instrukcji wyższego poziomu na niższy poziom, aby uzyskać najlepszą prędkość i efektywność energetyczną, więc czasami, gdy zmiana mikrokodu jest konieczna do naprawienia jakiegoś błędu, może to spowodować obniżenie wydajności.

Należy pamiętać, że Meltdown (usterka wpływająca tylko na układy Intel) nie może zostać naprawiona za pomocą samych aktualizacji mikrokodu i wymaga zmian w podstawowej funkcjonalności systemu operacyjnego, co może jeszcze bardziej obniżyć wydajność. Spectre (luka wpływająca na układy Intel, AMD i ARM) może być obejście tylko z aktualizacjami mikrokodu.


Aby odpowiedzieć na niektóre szczegółowe pytania od czasu edycji:

  1. Tak, mikrokod to w zasadzie oprogramowanie układowe działające na procesorze. Specjalny termin „mikrokod” odnosi się w szczególności do oprogramowania układowego procesora, które zawiera plan tłumaczenia instrukcji języka standardowego na instrukcje procesora niskiego poziomu. Jest to więc termin bardziej szczegółowy niż oprogramowanie wewnętrzne.

    Zauważ, że jak omówiłem powyżej, nie jest przechowywany w CPU, gdy jest wyłączony, ale ładowany do niego przy każdym uruchomieniu, więc w pewnym sensie nie działa jak tradycyjne oprogramowanie układowe. Jednak wiele urządzeń robi to teraz i nadal jest nazywane „oprogramowaniem układowym”, dlatego nazywanie go oprogramowaniem układowym jest dopuszczalne.

  2. Nie sądzę, że się mylisz. Oprogramowanie układowe nie musi być pisane w określonym języku maszynowym, a jego wykonanie nie musi być uruchamiane w określony sposób. Na pewnym niskim poziomie cały kod maszynowy to „dane”, które są „odczytywane” przez procesor i interpretowane w określony sposób.

    Termin „mikrokod” jest zwykle używany tylko w przypadku głównych procesorów, a nie kart graficznych lub innego sprzętu, nawet jeśli na tych innych urządzeniach może być załadowany kod w ten sam sposób.

thomasrutter
źródło
1
Twoje drugie zdanie jest nieprawidłowe; oprogramowanie układowe obejmuje oprogramowanie przechowywane w pamięci ROM. Dawno, dawno temu większość oprogramowania znajdowała się w pamięci ROM, zanim alternatywy stały się dostępne.
Harry Johnston,
1
Oczywiście „mikrokod” jest specyficzny dla procesora. Pytanie jest inne niż szczegółowe, czy robi to inaczej. Usuwając zakres („CPU”), otrzymujesz prawie bezpośredni cytat „warstwy tłumaczenia między instrukcjami wyższego poziomu a operacjami niższego poziomu”. To właściwie tylko definicja oprogramowania układowego. Czy nie to robi całe oprogramowanie układowe? To dużo słów, ale myślę, że najbardziej opisowy i zwięzły opis to powyższe: „Mikrokod procesora jest podobny do oprogramowania układowego procesora”.
Evan Carroll
@Evan, większość urządzeń otrzymuje instrukcje pośrednio, wysłane z kodu działającego na CPU. Tylko procesor bezpośrednio przetwarza kod dostarczony przez użytkownika. Weź również pod uwagę, że większość urządzeń zawiera wbudowany procesor, który uruchamia oprogramowanie wewnętrzne, i że procesor może mieć własny mikrokod. To rozróżnienie może mieć znaczenie tylko dla projektantów sprzętu i programistów jądra, ale nie jest to arbitralne.
Harry Johnston,
„większość urządzeń zawiera wbudowany procesor, który uruchamia oprogramowanie wewnętrzne, a procesor ten może mieć własny mikrokod”. Więc kod przetwarzający strumień midi na karcie dźwiękowej jest również „mikrokodem”? Czy kod rysujący / renderujący wyświetla znaki na głupim terminalu?
Evan Carroll
Nie. Kod, który działa na karcie dźwiękowej w celu przetworzenia strumienia MIDI, jest zwykłym oprogramowaniem układowym. Kod przetwarzający kod działający na karcie dźwiękowej w celu przetworzenia strumienia MIDI byłby mikrokodem. (W praktyce nie jestem pewien, czy wbudowany procesor na czymś tak prostym jak karta dźwiękowa będzie potrzebował mikrokodu, ale to nie ma znaczenia.) Kluczową rzeczą jest to, że strumień MIDI lub znaki są wysyłane do głupi terminal, nie są kodem. To tylko dane.
Harry Johnston,
23

https://wiki.debian.org/Microcode

Mikrokod CPU

Mikrokod procesora jest podobny do oprogramowania układowego procesora. Jądro jest w stanie zaktualizować oprogramowanie procesora bez konieczności aktualizacji przez aktualizację BIOS. Aktualizacja mikrokodu jest przechowywana w pamięci ulotnej, dlatego BIOS / UEFI lub jądro aktualizuje mikrokod podczas każdego rozruchu.

Procesory Intel i AMD mogą wymagać aktualizacji mikrokodu, aby działać poprawnie. Te aktualizacje usuwają błędy / błędy, które mogą powodować cokolwiek, od nieprawidłowego przetwarzania, po uszkodzenie kodu i danych oraz zawieszanie się systemu.

BIOS (lub UEFI) aktualizuje mikrokod procesora podczas rozruchu, jednak przez większość czasu albo sprzedawca płyty głównej nie wydaje częstych aktualizacji BIOS / UEFI, albo użytkownik nie instaluje takich aktualizacji. Z tych powodów procesor systemowy prawdopodobnie będzie działał z przestarzałym mikrokodem na wielu systemach.

Przykłady:

https://www.win-raid.com/t3355f47-Intel-AMD-amp-VIA-CPU-Microcode-Repositories.html

juliański
źródło
9
To nie jest takie proste: Mikrokod to „technika, która narzuca interpreter między sprzętem a poziomem architektonicznym komputera”. Jako taki, mikrokod jest warstwą instrukcji na poziomie sprzętowym, które implementują instrukcje kodu maszynowego wyższego poziomu lub wewnętrzne sekwencjonowanie maszyny stanów w wielu elementach przetwarzania cyfrowego. Źródło: en.wikipedia.org/wiki/Microcode
17
Więc czekaj ... „łódź” ​​jest tylko szczególnym rodzajem „pojazdu”? Co za bezużyteczne słowo! :-)
Harry Johnston
4
@HarryJohnston Cóż, uważam za użyteczne odróżnienie „łodzi” od innych typów pojazdów w określonych kontekstach ... a „mikrokod” jest bardzo specyficznym rodzajem „czegoś” obecnego w wielu współczesnych procesorach… ( dlatego pożądane jest określenie terminu).
Radovan Garabík
4
@ RadovanGarabík: Właśnie o to chodzi Harry'emu z sarkazmem.
Peter Cordes
4
Nie rozumiem Jeśli „Jądro jest w stanie zaktualizować oprogramowanie układowe procesora bez konieczności aktualizacji przez aktualizację systemu BIOS”, dlaczego fakt, że „producent płyty głównej nie będzie wydawał częstych aktualizacji systemu BIOS / UEFI” oznacza, że ​​„procesor systemowy jest prawdopodobnie będzie działał z przestarzałym mikrokodem na wielu systemach ”? Dlaczego jądro nie po prostu łata mikrokodu? Po co polegać na systemie BIOS, jeśli system BIOS nigdy nie jest aktualizowany, a dostępna jest częściej aktualizowana alternatywa?
Ajedi32
6

Cóż, „aktualizacje mikrokodu” Intela są w rzeczywistości aktualizacjami „oprogramowania układowego” w tym sensie, że aktualizują znacznie więcej niż tylko jednostkę translacyjną mikrokodu procesora.

Te aktualizacje pakietu ujednoliconego procesora, które nazywamy „aktualizacjami mikrokodu” dla Intela, aktualizują również inne mikrokontrolery na matrycy (takie jak PMU i rdzeń zarządzania energią), a także kilka tabel parametrów dla różnych podsystemów na matrycy. Są raczej złożone.

Informacje te są dostępne w kilku patentach Intel związanych z aktualizacjami mikrokodu i mikrokodu.


źródło
4

Myślę, że termin „mikrokod” odnosi się przede wszystkim do tego, co robi kod (wykonuje instrukcje niskiego poziomu przy użyciu instrukcji nawet niższego poziomu), podczas gdy termin „oprogramowanie układowe” odnosi się przede wszystkim do tego, jak jest przechowywany i zarządzany (mniej łatwo aktualizowany niż oprogramowanie , łatwiejsze do aktualizacji niż sprzęt). W tym sensie przypomina to raczej rozróżnienie między „aplikacją” a „plikiem JAR” - ten sam program może być jednocześnie, ale patrzysz na to z dwóch różnych perspektyw.

Nawiasem mówiąc, idea mikrokodu wraca do Maurice'a Wilkesa w 1951 roku, dekady zanim procesory komputerowe zostały osadzone w krzemie.

Michael Kay
źródło
3

Oprogramowanie układowe zwykle odnosi się do kodu urządzeń zawierających procesor, a nie sam procesor, np. Oprogramowanie układowe telefonu z systemem Android.

Mikrokod to warstwa translacji między złożonymi zestawami instrukcji (np. 486, 686, AMD-64 itd.) A instrukcjami niższego poziomu, dla których twórcy układów projektują krzem. Tak więc wiele instrukcji w zestawie instrukcji CPU nie jest zaimplementowanych w krzemie, lecz przetłumaczonych przez mikrokod na wiele instrukcji zaimplementowanych w krzemie.

David Waters
źródło
Ale czy nie jest tak w przypadku całego oprogramowania układowego? Instrukcje ABI, które można zaimplementować w Silicon, ale których nie można zaktualizować za pomocą oprogramowania?
Evan Carroll,
1
„Aktualizacje mikrokodu” Intela mogą zrobić znacznie więcej niż zmienić sposób dekodowania instrukcji mikrokodowanych . np. mogą wyłączyć bufor pętli (w Skylake, aby naprawić erratum SKL150), ponieważ jeśli to możliwe, procesor jest tak zaprojektowany, aby było to możliwe w przypadku wykrycia błędów sprzętowych.
Peter Cordes
3

„Mikrokod” był pierwotnym terminem i odnosił się do instrukcji, które zostały użyte do implementacji interpretera dla „publicznego” zestawu instrukcji procesora.

Ale z czasem, przy wielu różnicach w schematach wdrażania, rozróżnienie, takie jak było, stało się bardziej niejasne. Najpierw był mikrokod poziomy w stosunku do pionowego, a następnie różne schematy zapisu „mikrokodu” (w celu implementacji, powiedzmy, instrukcji I / O) w „głównym” zestawie instrukcji procesora. Następnie trzeba było rozróżnić kod, który można łatwo załadować za pomocą zwykłych operacji „uruchamiania” programu, od kodu (np. Dla BIOS-u), który został zapisany w pamięci ROM lub innej chronionej i względnie niezmiennej pamięci. W związku z tym wymyślono termin „oprogramowanie układowe” w odniesieniu do tych instrukcji, które stały się w jakiś sposób bardziej trwałe (i mniej dostępne dla modyfikacji użytkownika) w pamięci.

Ale odkąd dokonano tych pierwszych rozróżnień, wiele razy zmieniło się i skręciło, a terminy można definiować z dowolną precyzją w danym środowisku procesora i systemu operacyjnego.

Daniel R. Hicks
źródło
+1, kluczem tutaj jest to, że istnieje wiele znaczeń terminu „mikrokod” i myślę, że OP naprawdę chce wiedzieć o „aktualizacjach mikrokodu”, a nie o innych znaczeniach.
Peter Cordes,
3

[Uwaga: ta odpowiedź ma konkretnie na celu odniesienie się do ostatniej edycji i nie stanowi innego uzupełnienia kilku już opublikowanych odpowiedzi dźwiękowych.]

Tak więc, powtarzając: mikrokod (przynajmniej do pierwszego przybliżenia) jest specyficznym rodzajem oprogramowania układowego.

„Mikrokod” w tym kontekście jest po prostu marketingiem nad „oprogramowaniem procesora”.

Cóż, to nie marketing. Marketing nazwałby to XBoost Pro ™ . Jest to raczej termin inżynierski; jeśli projektujesz procesory, ważne jest dla ciebie rozróżnienie między mikrokodem a innym oprogramowaniem układowym procesora (i rodzajem oprogramowania typowym dla innych urządzeń). Jeśli nie, prawdopodobnie nie jest.

Jeśli projektujesz płyty główne lub piszesz systemy operacyjne, prawdopodobnie używasz „aktualizacji mikrokodu” jako skrótu dla bardziej nieporęcznej i mniej znanej „aktualizacji oprogramowania procesora”. Większość aktualizacji oprogramowania układowego procesora wpływa przede wszystkim na mikrokod, więc jest wystarczająco blisko tego samego. Prawdopodobnie znasz różnicę, ale nie musisz się tym przejmować .

Użytkownik końcowy nie musi wiedzieć ani dbać o różnicę, aw idealnym świecie nigdy nie usłyszałby słowa „mikrokod”.

Domyślam się, że zwrócił na ciebie uwagę w prasie na temat ostatnich luk w zabezpieczeniach dotyczących spekulacyjnego wykonywania, choć mogłeś również słyszeć to wcześniej w kontekście, który sprawił, że stało się bardziej oczywiste, że nie musisz się tym przejmować. Luki te zostały wydane wcześniej niż planowano, co mogło spowodować, że relacje prasowe będą mniej wyleczone, niż mogłoby być inaczej. Z punktu widzenia użytkownika końcowego należy zainstalować aktualizacje systemu BIOS, aktualizacje systemu operacyjnego, aw niektórych przypadkach aktualizacje aplikacji; nie musisz wiedzieć ani się tym przejmować, jeśli którykolwiek z nich zawiera nowy mikrokod.


Tak więc, nawet zdając sobie sprawę, że prawdopodobnie nie musisz wiedzieć ani się tym przejmować, nadal możesz być zainteresowany czystą ciekawością: jak możesz rozróżnić mikrokod od innego oprogramowania?

Cóż, pierwszą rzeczą, którą należy rozpoznać, jest to, że niekoniecznie istnieje jedna twarda i szybka definicja, jest to raczej sytuacja Bleggsa i Rubesa . Mimo to możemy powiedzieć o mikrokodzie:

  • Mikrokod zwykle działa wewnątrz procesora, a nie na procesorze. To widok wysokiego poziomu.

  • Architektura mikrokodu zazwyczaj wygląda zupełnie inaczej niż architektura zwykłego kodu, w tym zwykłego oprogramowania układowego. Prawdopodobnie będzie wysoce równoległy i zostanie wdrożony znacznie bliżej sprzętu. Kilka istniejących odpowiedzi (w tym twoja własna) omawia to, chociaż należy zauważyć, że szczegóły mogą się różnić w zależności od konstrukcji procesora.

  • Chociaż sprzęt jest często zaprojektowany do uruchamiania wyłącznie oprogramowania wewnętrznego dostarczonego przez producenta, nie jest to szczególnie rzadkie w przypadku korzystania z oprogramowania firm trzecich - chociaż prawdopodobnie spowoduje to unieważnienie gwarancji! Mikrokod innej firmy jest o wiele rzadszy, chociaż uważam, że w czasach starożytnych (mówię o tym, że procesor był mniej więcej wielkości chleba) niektórzy użytkownicy końcowi modyfikowali mikrokod w swoich procesorach. O ile mi wiadomo, nie jest to możliwe w przypadku procesorów używanych w komputerach PC.

  • Mikrokod zazwyczaj tłumaczy lub pomaga wdrożyć architekturę publicznego zestawu instrukcji, tj. Uruchamia kod maszynowy używany przez projektanta systemu operacyjnego i programistów aplikacji. Więcej na ten temat w następnej sekcji.


„Wykonanie a dane” wiele paradygmatów używa tego paradygmatu

Obawiam się w myląco różne sposoby, ale odniosę się do własnego komentarza. Ta sekcja służy również do rozwinięcia ostatniego punktu wypunktowania powyżej. Celem jest tutaj próba rozróżnienia zadania wykonywanego przez procesor (osiągniętego przez połączenie sprzętu i mikrokodu) od zadania wykonywanego przez typowe urządzenie (osiągniętego przez połączenie sprzętu i oprogramowania układowego). Mam zamiar wybrać dysk twardy SATA.

Dysk SATA postępuje zgodnie z instrukcjami z komputera, które są w stylu „odczytaj dane z sektora 5123” i „zapisz te dane do sektora 1 321”. Oprogramowanie układowe napędu jest odpowiedzialne za spowodowanie tego przez sprzęt i zazwyczaj jest to dość zwyczajny kod działający na jakimś wbudowanym procesorze. Instrukcje napędu przychodzą sekwencyjnie, chociaż mogą nie być przetwarzane w kolejności, w której przybywają. Te instrukcje nie są programem, są wysyłane przez program działający na głównym procesorze. W szczególności nie ma przepływu kontroli, tzn. Nie ma instrukcji, aby powiedzieć napędowi SATA, które instrukcje należy uruchomić w następnej kolejności.

Procesor odpowiada za komputer. Po zakończeniu inicjalizacji uruchamia się instrukcje („kod maszynowy”) dostarczone przez płytę główną (BIOS, inny rodzaj oprogramowania układowego), które nakazują uruchomienie kodu maszynowego dostarczonego przez system operacyjny, który nakazuje uruchomienie dostarczonego kodu maszynowego przez dostawców aplikacji. Sam procesor pobiera kod maszynowy z pamięci EEPROM (w przypadku BIOS-u) lub pamięci RAM (w przypadku systemu operacyjnego i aplikacji). W szczególności kod maszynowy ma kontrolę: kod maszynowy informuje CPU, jaki kod maszynowy ma wykonać w następnej kolejności. Możesz kilkakrotnie zapętlać ten sam kod maszynowy, możesz uruchamiać różne fragmenty kodu w zależności od danych, nad którymi pracuje kod - instrukcje w języku interfejsu urządzenia, takim jak kod SATA, mogą wykonywać ograniczony zestaw prostych zadań, ale kod maszynowy może zrobićcokolwiek . (Zobacz także Kompletność Turinga ).

Możemy przepisać ten ostatni punkt powyżej, ponieważ: mikrokod zazwyczaj implementuje język Turing Complete; zwykłe oprogramowanie układowe zwykle nie.


Co to znaczy „instrukcje sprzętowe są interpretowane” za pomocą mikrokodu.

Prawda, ale prawdopodobnie myląca; ważną kwestią jest rozróżnienie między kodem maszynowym, który ma kontrolę i Turing Complete, a instrukcjami zdefiniowanymi przez interfejs urządzenia, taki jak SATA, który nie ma i nie jest.


Czy „mikrokod” ma zastosowanie do kodu działającego na kartach dźwiękowych

Nie, karty dźwiękowe otrzymują instrukcje, a nie kod, podobnie jak dyski SATA. Instrukcje mogą wyglądać jak „zagraj ostro” lub „zinterpretuj te dane jako kształt fali i odtwórz”. Wciąż bardzo proste.

i karty graficzne (GPU)?

Staromodne karty graficzne (te bez GPU) są takie same jak dyski SATA. Instrukcje są jak „ustaw ten piksel na ten kolor” lub „napisz A w tej pozycji”.

... Procesory graficzne są skomplikowane i znajdują się gdzieś pomiędzy dwoma światami, które próbowałem opisać powyżej. Prawdopodobnie najłatwiej jest myśleć o nich jako o wyspecjalizowanym komputerze umieszczonym wewnątrz komputera głównego, który ma własne procesory. To prawda, że ​​urządzenia takie jak dyski SATA mają również wbudowane procesory, ale różnica polega na tym, że wbudowany procesor w napędzie SATA uruchamia tylko kod dostarczony przez producenta napędu, podczas gdy procesory graficzne również obsługują kod dostarczony przez system operacyjny i / lub dostawcę aplikacji. To naprawdę osobne pytanie.


TL; DR: mikrokod to specyficzny rodzaj oprogramowania układowego, który pomaga sprzętowi wdrożyć zestaw instrukcji Turing Complete.

Harry Johnston
źródło
1

Mikrokod ( „magazyn kontrolny” ) to dane, które mają znajdować się w pamięci ulotnej lub nieulotnej - ogólnie raczej niewielkiej, ale bardzo szerokiej pamięci, której sygnały wyjściowe danych są podłączone do wejść sygnałów sterujących równoległych sprzętowych jednostek funkcjonalnych, logiki sterowania losowego itp. Wejściowe adresy pamięci mikrokodu są dostarczane przez maszynę stanu, która przechodzi przez słowo pamięci („instrukcja mikroprogramu”), aby skutecznie sekwencjonować sygnały sterujące jednego lub wielu bloków sprzętowych. Ten sprzęt multipleksuje czasowo i umożliwia realizację złożonych operacji przy znacznie mniejszej losowej logice.

We współczesnych mikroprocesorach może istnieć hierarchia jednostek mikrokodu / sekwencjonowania niezbędnych do wyodrębnienia fizycznej mikroarchitektury krzemu do bardziej ogólnej rodziny architektury ze wspólnym interfejsem „kodu maszynowego”. Na przykład może istnieć kilka warstw mikrokodu / sekwencjonowania w celu implementacji dekoderów instrukcji i jednostek zmiennoprzecinkowych.

Firmware w tradycyjnym znaczeniu to dowolne oprogramowanie / dane rezydujące w nieulotnej pamięci, które powinno się rzadko lub nigdy nie zmieniać. Kontrastuje to bezpośrednio z oprogramowaniem przechowywanym lub raczej zapisywanym i uruchamianym z pamięci systemowej, która ciągle się zmienia. Mikrokod odnosi się konkretnie do danych reprezentujących mikroprogram do kontroli sekwencji sprzętu.

Mikrokod może być zaimplementowany w oprogramowaniu / oprogramowanie może zawierać mikrokod, ale nie są takie same.


źródło
1
Współczesne procesory x86 są znacznie bardziej okablowane niż to opisujesz; wygląda na to, że opisujesz nie-potokowy 386, a nie Haswell / Skylake. „Aktualizacje mikrokodu” Intela mogą zrobić znacznie więcej niż zmienić sposób dekodowania instrukcji mikrokodowanych . np. mogą wyłączyć bufor pętli (w Skylake, aby naprawić erratum SKL150), ponieważ jeśli to możliwe, procesor jest tak zaprojektowany, aby było to możliwe w przypadku wykrycia błędów sprzętowych.
Peter Cordes
@PeterCordes 1) Architektura x86 jest nieistotna dla przedstawienia koncepcji mikrokodu 2) gdybyś zrozumiał moją odpowiedź, zgodzilibyśmy się, że sekwencjonuje ona sygnały sterujące, jak mówisz
1
Nie, ups Intel nie są tak naprawdę sygnałami kontrolnymi. Nie programują bezpośrednio jednostek logicznych, jak w klasycznym potoku MIPS. Ups są odczytywane przez harmonogram poza kolejnością, aby dowiedzieć się, które Ups są zależne od danych, a które inne Ups. Jest to zupełnie inny model wewnętrzny niż coś takiego jak 6502, w którym wiele kroków wykonania pojedynczej instrukcji jest odczytywanych z dekodowanej pamięci ROM. Opisujesz jedno historyczne znaczenie terminu mikrokod, ale nie o to chodzi w „aktualizacjach mikrokodu” dla współczesnych procesorów.
Peter Cordes
Gdzie wspomniałem (lub pytanie w tej sprawie) o mikroprocesorach Intel lub x86 (które NIE są tym samym co „mikroprogram” w sklepie kontrolnym)? Ponadto dosłownie wszystko dostarczane ze sklepu kontrolnego jest sygnałem kontrolnym, niezależnie od tego, czy sygnał jest sekwencyjny, statyczny, logiczny czy przewodowy. To, co opisuję, to dosłowna definicja mikrokodu, także „aktualizacji mikrokodu”. Nie rozumiesz aspektu sekwencjonowania mojej odpowiedzi, ponieważ wiele wspomnianych sygnałów w Haswell będzie statycznych. Dla przypomnienia , wiele z nich jest sekwencjonowanych, sekwencjonowanie absolutnie nie wyklucza się wzajemnie dla potoków lub OoOE.
1
Więc poprawnie odpowiadasz na pytanie „co to jest instrukcja mikrokodowana” , ale „aktualizacja mikrokodu” dla procesora nie ma tego samego technicznego znaczenia słowa „mikrokod”. Jest to ważna kwestia, którą należy wyraźnie zaznaczyć, ponieważ myślę, że jest to przyczyną zamieszania PO.
Peter Cordes
0

Oprogramowanie układowe to kod wykonywalny umieszczony w pamięci ROM lub innej nieulotnej pamięci.

Pierwotnym i głównym celem oprogramowania układowego jest jego obecność podczas uruchamiania procesora, więc ma on kod do uruchomienia w celu uruchomienia lub uruchomienia dowolnego systemu, w którym procesor jest częścią. W przypadku komputerów PC oprogramowanie układowe służy również do świadczenia usług działającemu systemowi operacyjnemu, a także przechowuje kod dla wbudowanych kontrolerów kontrolujących wentylatory, moc i kilka innych rzeczy, a także kod dla ME / PSP działającego w tle .

Urządzenia peryferyjne, które pobierają oprogramowanie układowe, takie jak dyski twarde, urządzenia USB itp., Mają wbudowany procesor.


Mikrokod nie jest kodem wykonywalnym, ale kodem używanym przez wewnętrzne urządzenia urządzenia.

Jest ładowany do procesorów Intel lub AMD z instrukcją WRMSR. Ładowanie oprogramowania układowego do urządzenia wymaga zaprogramowania pamięci ROM lub nośnika flash albo polegania na małym programie ładującym, który jest obecny w urządzeniu, aby zaakceptować oprogramowanie układowe.

Aktualizacje oprogramowania układowego i mikrokodu należą do podobnej kategorii - rzeczy, które musisz zrobić, aby sprzęt działał i mogą wymagać aktualizacji od czasu do czasu - ale są to bardzo różne rzeczy.

Złożone instrukcje w wielu procesorach nie są bezpośrednio okablowane sprzętowo, lecz „wykonywane” przez mniejszą jednostkę podobną do CPU w głównym procesorze. Mikrokod kontroluje te operacje. Dotyczy to przynajmniej Motoroli 68000, która miała mikrokod zawierający „MicroROM”.

Nikt inny niż procesory Intel lub AMD nie wie, co tak naprawdę kontroluje lub robi mikrokod, ponieważ nie ujawniają one szczegółów. Są próby włamania się. Odniesienia .

W praktyce aktualizacje mikrokodu są zasadniczo używane do wyłączania instrukcji, które powodują problemy w znanych modelach / krokach procesorów, a najnowsze procesory Intel często wymagają co najmniej jednej aktualizacji mikrokodu, zanim będą działały niezawodnie.


Pewne spojrzenie na to, co mikrokod procesora mógłby faktycznie zrobić / faktycznie można uzyskać, można przeczytać, czytając o ROM z dekodowaniem PLA 6502 - 6502 to stary 8-bitowy procesor, a jego instrukcje były sekwencjonowane / kontrolowane przez wewnętrzny PLA. PLA w zasadzie powiedziałby, które części układu były zaangażowane na każdym etapie każdej instrukcji (instrukcje 6502 wahają się od 2 do 7 cykli). Jest to znacznie wcześniej niż buforowanie, architektura superskalarna, przewidywanie gałęzi itp. Nie jestem pewien, czy mikrokod w nowoczesnych procesorach kontroluje coś takiego jak PLA.

LawrenceC
źródło
1
„Aktualizacje mikrokodu” Intela mogą zrobić znacznie więcej niż zmienić sposób dekodowania instrukcji mikrokodowanych . np. mogą wyłączyć bufor pętli (w Skylake, aby naprawić erratum SKL150), ponieważ jeśli to możliwe, procesor jest tak zaprojektowany, aby było to możliwe w przypadku wykrycia błędów sprzętowych.
Peter Cordes
1
Interesujący punkt na temat PLA 6502, ale procesory potokowe muszą być bardziej sztywno podłączone. Klasyczne MIPS wykorzystywały różne pola słowa instrukcji do bezpośredniego sterowania logiką wewnętrzną w sposób nieco podobny do tego, ale oczywiście procesor potokowy ma wiele instrukcji w locie, potencjalnie jedną dla każdego etapu potoku, jeśli nie ma przeciągnięć. (Lub w przypadku superskalarnego, 2 lub więcej na każdym etapie potoku, a dla poza kolejnością jest to jeszcze bardziej skomplikowane.) Wiele wewnętrznych elementów współczesnych procesorów jest na stałe podłączonych, ale z pokrętłami, które mogą modyfikować aktualizacje mikrokodu.
Peter Cordes,
0

Terminologia

Odpowiem na to sam, używając tylko kontekstu użycia w tym pliku pdf .

  • Oprogramowanie układowe - mikrokod jest aktualizowany ścieżką zapewnianą przez oprogramowanie układowe procesora.

    „Zwykle łatka mikrokodu jest przesyłana do procesora przez oprogramowanie płyty głównej (np. BIOS lub UEFI) lub system operacyjny podczas procesu wczesnego rozruchu.”

  • Mikrokod - to same dane używane przez „jednostkę instrukcji dekodowania (IDU)”. IDU może być na stałe lub mikrokodowane . Mikrokodowane w tym kontekście oznacza po prostu zaprogramowane. TAKŻE oznacza „wiele mikrokodów”. IDU

    IDU odgrywa centralną rolę w jednostce sterującej i generuje sygnały sterujące na podstawie zawartości rejestru instrukcji.

  • Makropolecenie Jedna instrukcja wysłana do IDU w celu zdekodowania może zwrócić dowolną liczbę Mikroinstrukcji .

  • Mikro-instrukcja jedno wstępnie obliczone „słowo kontrolne”, cały stan i instrukcje do wykonania dla jednego cyklu zegarowego. Wysłane do procesora w celu wygenerowania sygnałów sterujących .

W tym kontekście zaktualizujesz mikrokod za pomocą oprogramowania układowego. Wysyłasz makropolecenia do IDU mikrokodowanego w celu przetworzenia makropolecenia w „mikroinstrukcję” do wykonania na CPU, która zamienia je w sygnały sterujące.

Moje czytanie tego

Mikrokod to dane , ale aktualizacja mikrokodu odbywa się za pomocą oprogramowania układowego. I myląco, ponieważ mówisz o tym, co zasadniczo stanowi wewnętrzną tabelę odnośników, z pewnością jest to również oprogramowanie wewnętrzne , ponieważ jest zasadniczo przechowywane na chipie i wykorzystywane w przepływie wykonania chipa. Myślę, że można argumentować, że ogólny MIDI, sprzętowy PostScript i sygnały sterujące dla głupich terminali są również interpretowane w tym samym sensie, sprzętowo, i że coś bierze instrukcję i ostatecznie generuje „sygnały sterujące” w pewnym procesie interpretacji .

Wydaje się, że mamy specjalne nazwy dla tych procesów i komponentów w CPU: „IDU” na CPU i nazwę konkretnej tabeli wejściowej, którą stosuje IDU, która przechowuje wszystkie „mikroinstrukcje”: „mikrokod”. Informacje o tym procesie są zastrzeżone i zamknięte. Zakładam, że jest to analogiczne do każdej innej technologii od modemów (z ATDT i tym podobnymi w modemie Hayesa), po karty MIDI, ale nie nazywamy konkretnej tabeli odnośników „mikrokodem”, a zamiast tego używamy terminu „oprogramowanie układowe” proces flashowania i cały ładunek przechowywany na chipie.

Evan Carroll
źródło
2
Linux (i Windows) może całkowicie zaktualizować mikrokod procesora niezależnie od oprogramowania płyty głównej, o którym mówisz. Płyta firmware nie zawierają najnowszą mikrokodu procesora i mechanizmu jej stosowania przed dowolny kod jest ładowany z dysku, ale jeśli nie zaktualizowaniu firmware mobo na chwilę, nadal można mieć najnowszą mikrokodu procesora jedynie przez aktualizację oprogramowania. Robisz zdecydowanie zbyt dużą korzyść z połączenia oprogramowania wewnętrznego mobo z mikrokodem procesora. Przydatne jest, aby oprogramowanie układowe aktualizowało mikrokod przy każdym uruchomieniu, ale nie jest konieczne (z wyjątkiem czasami stabilności).
Peter Cordes
2
Ponadto nie wszystkie instrukcje makr x86 są dekodowane poprzez wyszukiwanie ich w pamięci ROM sekwencera mikrokodu. W procesorach Intela instrukcje dekodujące do 4 lub mniej uopsów (mikrooperacji) są zakodowane na stałe w dekoderach. Większość instrukcji nie jest „mikrokodowana” w tym znaczeniu tego słowa. Podział liczb całkowitych jest ( divi idiv), ale nawet podział FP jest jednokrotny (ponieważ jest bardziej krytyczny pod względem wydajności, wieloetapowa logika iteracyjna jest wykonywana w jednostce podziału zamiast z rozszerzaniem mikrokodowanym).
Peter Cordes
@PeterCordes jesteś facetem, który napisze tę odpowiedź. Zmodyfikuj dowolną z moich odpowiedzi, aby były bardziej technicznie poprawne. Masz blanszę z kart. Chociaż spróbuję wprowadzić te zmiany dziś wieczorem, jeśli nie masz czasu.
Evan Carroll
Jeśli się do tego zabiorę, skończę pisać odpowiedź, którą zacząłem. Na razie odpowiedź Harry'ego Johnstona jest prawdopodobnie najlepszą jak dotąd odpowiedzią na to, co myślę, że naprawdę chcesz wiedzieć (co naprawdę aktualizuje „aktualizacja mikrokodu”, co nie jest tym samym, co robi „mikrokod procesora”, ponieważ jest to zbyt uproszczona nazwa, co jest powszechne w przypadku rzeczy technicznych, które wymagają jednowyrazowej nazwy, którą ogół społeczeństwa może śledzić.)
Peter Cordes
0

Wziąłem kurs z podstaw projektowania ISA, głównie z badania i projektowania procesora RISC wzorowanego na koncepcjach MIPS. Oto, co zapamiętałem

Według mojego zrozumienia, podstawowe bloki procesora, takie jak rejestry, ALU, multipleksery i moduły pamięci wymagają pewnych sygnałów, aby mogły wykonywać swoją pracę. Nazwałbyś te sygnały „sygnałami”, ponieważ są to sygnały wymagane do obsługi tych bloków. Procesory to w istocie spaghetti blok ALU, modułów pamięci, rejestrów i innego sprzętu. Oznacza to, że każdy procesor musi zapewnić określoną sekwencję sygnałów sterujących, aby wykonać swoją pracę (mam na myśli podstawowe instrukcje, takie jak ANDI, ORI, JMP, BNE, BEQ itp.). Miałem mieszane uczucia na ten temat, kiedy musiałem sam potwierdzić sygnały (dosłownie przeglądając wszystkie instrukcje MIPS) podczas testowania i debugowania zestawu instrukcji, ponieważ tempo programu nauczania nie nauczyło mnie niczego o jednostkach sterujących w tym czasie.

Z drugiej strony, język asemblera sprowadza się do opcodów i ich operandów w słowie instrukcji (w zasadzie szerokość szyny danych). Jeśli chodzi o MIPS, pierwsze 6 bitów słowa instrukcji to kod operacji. Sama kontrola matematyczna nie pozwala na „potwierdzenie” ALU, rejestru, pamięci, multiplekserów… w zasadzie reszty sprzętu za pomocą samych 6 bitów.

Nie, chyba że masz ... DEKODER INSTRUKCYJNY. Dekoder instrukcji w zasadzie pobiera kod operacji i generuje WSZYSTKIE sygnały „asercji” wymagane do obsługi sprzętu. Jednak dekodery instrukcji różnią się implementacją między architekturami, aw niektórych przypadkach są programowalne. Mikrokod wpływa na programowalną sekcję dekodera instrukcji.

Doszedłem do wniosku, że oprogramowanie układowe to ogólny termin na wszelkie informacje osadzone w sprzęcie. W niektórych przypadkach odnosi się to również do mikrokodu, ponieważ jego strumień bitów może być kodowany i przechowywany w sprzęcie, takim jak EEPROM i pamięć flash. Najczęściej jest to jednak skompilowany kod, asm, a nawet strumienie bitów VHDL / Verilog używane w układach FPGA. Mikrokod wydaje mi się semantyką stosowaną do określania „sygnałów asercji” w wybranym procesorze.

Jackson Young
źródło
-2

Mikrokod to oprogramowanie wbudowane w procesor poniżej poziomu asm.

użytkownik259412
źródło