Pytanie:
Jaki jest proces przejścia od kodu maszynowego do elektrycznego sterowania poszczególnymi tranzystorami?
master_of_privates
2019-11-03 04:00:16 UTC
view on stackexchange narkive permalink

Dla kogoś, kto pisze oprogramowanie, ale nie ma doświadczenia w inżynierii komputerowej, dziesiątki warstw abstrakcji zawsze mnie wprawiały w zdumienie.

Wiem, że cały kod źródłowy na najbardziej podstawowym poziomie jest podzielony na 1 i 0.Wiem również, że wszystkie procesory na ich najbardziej podstawowym poziomie są rozbite na miliardy tranzystorów, a następnie bramy logiczne & ALU.

Ale na tym kończy się moja luka w wiedzy:

1 i 0 -> ????-> Tranzystory & Bramki logiczne & ALU istnieją

Wszystkie holistyczne odpowiedzi wypełniające tę lukę będą mile widziane, zwłaszcza jeśli możesz opisać proces decydowania, które tranzystory / jednostki są wybrane do wykonania określonej pracy.

P.S.Odpowiedź nie powinna być rozprawą, bo zdaję sobie sprawę, że może to trwać wiecznie.Tylko zwięzłe wyjaśnienie / przegląd ze słowami kluczowymi.

Ta rozmowa została [przeniesiona do czatu] (https://chat.stackexchange.com/rooms/100679/discussion-on-question-by-master-of-privates-what-is-the-process-of-going-od-m).Celem komentarzy jest zażądanie wyjaśnień lub wskazanie błędów, aby można było poprawić pytanie.Nie nadają się do dłuższej dyskusji ani nie są miejscem do pisania odpowiedzi.Wszelkie wyciągnięte wnioski należy zamieścić z powrotem w pytaniu i / lub dowolnej odpowiedzi (odpowiedzi).
Dziewięć odpowiedzi:
wbeaty
2019-11-03 04:46:36 UTC
view on stackexchange narkive permalink

Ach, brakuje Ci koncepcji STATE MACHINE. To tam możemy „napisać kod” złożony z chipów sprzętowych TTL: selektorów danych, 4-bitowych liczników, grup równoległych flipflopów. (Ale to wszystko są skomplikowane części, podczas gdy idea „maszyn stanowych” jest dość prosta).

„Maszyna stanu” jest również powszechnie nazywana „mikrokodem”. Nazywany także „plastrem bitowym” lub „mikrosekwenserem”. Jest również oznaczony jako dekoder instrukcji wewnątrz układu procesora. (Tak więc to „malutka osoba” w układzie procesora czyta kody operacyjne i faktycznie wykonuje wymienione czynności).

We wszystkich wielu wprowadzających / popularnych wyjaśnieniach dotyczących komputerów, uczą nas wszystkiego o bramkach logicznych io pełnowymiarowych procesorach wbudowanych, ale nigdy o warstwie abstrakcji, która jest umieszczona niewidocznie między nimi. Nie próbują wyjaśniać tego malutkiego mężczyzny.

Najprostszą maszyną stanu jest układ ROM z liniami adresowymi podłączonymi do wielobitowego cyfrowego licznika w górę. Następnie bajty wyjściowe ROM są traktowane jako pojedyncze przewody lub linie sterujące. (To jest jak automatyczny licznik czasu pralki, przechodzący kolejno między N różnymi ustawieniami). Gdy adres binarny zlicza się w górę, osiem przewodów słowa wyjściowego (lub szesnaście, 24, 32 itd.) Mogą tworzyć dowolny wzór chcemy. Po prostu napisz żądany wzór w ROM.

To jest bardzo podobne do mechanicznej pozytywki. Albo kontroler wzorców żarówek na szyldach reklamowych z lat pięćdziesiątych: wiązka obrotowych krzywek tarczowych z przełącznikami skrzydełkowymi na krawędziach. Wytnij kilka wzgórz i dolin na krawędziach dysków bakelitowych, a będziesz mógł tworzyć dowolne zsynchronizowane wzory światła.

Ale prawdziwa siła tego pomysłu pojawi się tylko wtedy, gdy podłączymy nasz licznik binarny do trzech lub czterech linii wejściowych adresu ROM. Następnie użyj pozostałych dodatkowych linii adresowych ROM jako danych wejściowych! Na przykład, jeśli ROM ma 8 linii addr, możemy połączyć nasz 3-bitowy licznik w górę z trzema liniami. W ten sposób licznik utworzy sekwencyjną sekwencję ośmiu wzorów bitowych na wyjściu ROM. Następnie ROM przechowuje trzydzieści dwie różne wersje tych plików, wybrane przez pozostałe pięć wierszy adresu.

MIKROPROCESOR 6502, ZNALEZIONY W APPLE-II I INNYCH
enter image description here

Następnie użyj pięciu wejść adresu ROM ... ABY WYBRAĆ OPCJĘ URZĄDZENIA-JĘZYKA! Różne bity umieszczone na tych pięciu dodatkowych liniach adresu będą wyzwalać różne sekwencje 8-pulsowe zapisane w pamięci ROM. Każda z 32 możliwych instrukcji kodu operacji będzie składać się z 8 kroków (lub mniej). Na koniec użyj wszystkich bitów wyjściowych ROM jako linii sterujących.

Ta linia wyjściowa tutaj, gdy jest wysoka, kieruje razem dwa rejestry do sumatora w celu dodania dwóch liczb. Drugi polega na zwiększaniu impulsu głównego rejestru adresowego procesora w celu przechodzenia przez kod maszynowy przechowywany w pamięci RAM. Ten drugi przewód blokuje wyjście sumatora, więc można go zrzucić do jednego z rejestrów procesora podczas wykonywania instrukcji ADD. Inny zrzuci jakiś rejestr do głównego rejestru adresowego w celu wykonania instrukcji JMP.

Innymi słowy, sam procesor jest wykonany z oprogramowania. Ale jest to wzór bitowy przechowywany na stałe w kilku słowach pamięci ROM. Zmień wzorce bitowe, a zmienisz to, co robią kody operacyjne. Maszyna stanów to miejsce, w którym najgłębszy poziom oprogramowania jest fizycznie wykonany ze sprzętu. Pomyśl o maszynie stanu jako „małym człowieku” wewnątrz komputera, który czyta każdą instrukcję kodu maszynowego i wysyła impulsy do linii sterujących, które manipulują rejestrami i wykonują małą sekwencję kroków każdego kodu operacyjnego. (A ROM mikrosekwensera to prosty mózg małego człowieka.)

Bardzo fajną animacją jest układ Visual 6502 w javascript dla przeglądarek (6502 to procesor używany w starych komputerach APPLE-II). Przykładowy obrazek powyżej.

http://www.visual6502.org/JSSim/

W rzeczywistości może wykonać program w kodzie maszynowym, podczas gdy wszystkie wewnętrzne przewodniki i bramki logiczne zmieniają kolor wewnątrz układu scalonego. Układ pokazuje wszystkie rejestry, liczniki adresów pamięci, sumator, shifter itp. Ale ma też masywną, losowo wyglądającą szachownicę wzdłuż górnej krawędzi. To jest bitslice, ROM, trwały wzorzec dla jego rozkazów, wszystkie stworzone przez działającą maszynę stanu.


Steampunk: jeśli zamierzasz zbudować myślący silnik Babbage, będziesz chciał, aby obracający się cylinder pozytywki obracał się z prędkością około 20 000 obr./min, a małe kołki na cylindrze powinny być wykonane ze stopu wolframu i irydu , ponieważ ten cylinder zawiera rozkazy, w postaci wzorów małych wypukłości, a jego ogromna prędkość obrotowa określa szybkość procesora. (Może użyć małych srebrnych kropek na szklanym cylindrze i niektórych z tych nowopowstałych fotokomórek selenowych, zamiast małych przełączników w kształcie liści, aby odczytać wzór cylindra. Steam-punk optyczny komputer !!! Telewizor mechaniczny 15 kHz ze skanowaniem liniowym wykonywanym przez obrotowe, ośmiokątne lustro kwarcowe, lewitowane powietrzem i obracające się z prędkością około 100 000 obr./min. Skorzystaj z jednego z nich i oceń moc swojego komputera na podstawie mocy zasilacza sprężarki powietrza.

Albo tak: komputery to oprogramowanie aplikacji, które jest zrobione z języka wysokiego poziomu, który składa się z kodu interpretera, który składa się z asemblera, który składa się z rozkazów kodu maszynowego ...-sekwencje sprzętowe ROM maszyny, które składają się z rejestrów i selektorów danych oraz liczników i przerzutników, które są wykonane z bramek logicznych, które są zbudowane z pojedynczych tranzystorów, które są wykonane z zanieczyszczonego krzemu, który jest zbudowany z atomów Si obardzo mało fosforu, boru.KTÓRE składają się z jąder i elektronów, które składają się z protonów i neutronów, które są zbudowane z kwarków poruszających się po wrzącym morzu na poziomie Fermiego.

Lub tak: pośrodku komputera znajduje się mechaniczne pokrętło licznika czasu prania.Ale obraca się z częstotliwością ponad GHz.

FSM i mikrokod to dwie różne rzeczy.Mikrokod nie jest już używany w nowoczesnych procesorach, z wyjątkiem mechanizmu rezerwowego w niektórych urządzeniach CISC.Nowoczesne procesory wykorzystują bezpośrednie sterowanie sprzętowe, czyli FSM, ze względu na wiele zalet.
@user110971 Jak to się dzieje, jeśli aktualizacje mikrokodu są często publikowane dla nowoczesnych procesorów, takich jak procesory Intel x86 / 64?Szczególnie po fiasku Spectre.
„… które są zbudowane z kwarków unoszących się na wrzącym morzu poziomu Fermiego”. To była prosta poezja.Piękny.Dobra robota.
@Coldblackice Powinienem był uważniej dobierać słowa.Proste instrukcje, takie jak mult i mov, są implementowane przy użyciu sterowania sprzętowego.Istnieją pewne złożone instrukcje, takie jak fsin (sinus zmiennoprzecinkowy), które prawdopodobnie są zaimplementowane w mikrokodzie.Mówię prawdopodobnie dlatego, że Intel nie jest do końca otwarty na temat ich architektury.Nie jesteś również pewien, czy fsin będzie używany przez kompilatory.W rzeczywistości na nowoczesnym procesorze realizacja sin przy użyciu wspomnianych prostych instrukcji wydaje się być szybsza niż fsin.Ponadto kompilator spróbuje określić maksymalny zakres procesorów.
@user110971 Ach, rozumiem.Ciekawe informacje, dzięki za wyjaśnienie.
@user110971 - Mikrokod jest zasadniczo programowalnym FSM.Pomysł pochodzi prosto od samego Babbage'a, który wynalazł sekwencer
Kolejny chwytliwy przykład pamięci ROM próbkowanej przez powtarzający się licznik ciągły, z kilkoma zatrzaskami w celu dalszej kontroli linii wyjściowych: https://www.youtube.com/watch?v=IvUU8joBb1Q (tak, jestem w 100% przekonany, że to jestodpowiedni film;))
user110971
2019-11-03 04:34:23 UTC
view on stackexchange narkive permalink

Procesor jest w rzeczywistości maszyną skończoną (FSM) do implementacji instrukcji kodu maszynowego. Czyta instrukcje z pamięci i używa wymaganego sprzętu, takiego jak ALU, do ich realizacji.

Oto ścieżka danych architektury MIPS.

MIPS

źródło

Masz jednostkę sterującą, która implementuje wspomniany moduł FSM i jest odpowiedzialna za zapewnienie, że dane są kierowane do odpowiednich obwodów logicznych. Licznik programów (PC) wskazuje następną instrukcję do pobrania. Po pobraniu instrukcji komputer jest zwiększany tak, aby wskazywał na następną instrukcję, chyba że istnieje instrukcja rozgałęziająca, która zastępuje komputer. Instrukcja jest następnie implementowana przez jednostkę sterującą.

Jako przykład rozważ instrukcję dodawania 37 do wartości przechowywanej w komórce pamięci 74. Wartości te są podane w kodzie instrukcji instrukcji. Po pierwsze, jednostka sterująca pobiera dane pod adresem 74. Po drugie, wspomniane dane są dostarczane do jednego z wejść jednostki ALU. Po trzecie, 37 jest doprowadzane do drugiego wejścia jednostki ALU. Po czwarte, operacja dodawania jest wybrana dla ALU. Na koniec wynik ALU jest zapisywany z powrotem na adres 74.

To jest prawdziwa odpowiedź, imo, dla zwykłych komputerów.Zasadniczo procesor i GPU.
Poleciłbym również OP (lub innym) spróbować zrobić jakieś rzeczywiste kodowanie w asemblerze.Wykorzystanie rejestrów i etykiet oraz poleceń skoku (JMP) da lepsze wyobrażenie o procesorze.Napisanie kodu modułu cieniującego GPU da lepsze wyobrażenie o działaniu GPU.
vicatcu
2019-11-03 04:12:03 UTC
view on stackexchange narkive permalink

Tranzystory służą do budowy bramek logicznych.Bramki służą do budowy układów logicznych i pamięci.Współczesny procesor jest, mówiąc ogólnie, zbudowany jako dwie części (1) ścieżka danych, która wykonuje obliczenia matematyczne, ładuje i przechowuje wartości w pamięci (również zbudowanej z tranzystorów) oraz (2) obwody sterujące, które konfigurują tę ścieżkę danych na podstawie instrukcji maszynowych (któreto 1 i 0, do których PO nawiązuje w pytaniu).To wypełnia lukę w wiedzy bez konieczności ukończenia kursu z architektury komputerów.

Anders Petersson
2019-11-03 04:30:10 UTC
view on stackexchange narkive permalink

Tak, kod maszynowy to 0 i 1. Droga prowadząca do sygnałów elektrycznych jest niewielka; każde 0 może oznaczać 0 V, a 1 może wynosić 1,8 V (lub odwrotnie!). Są tak podobne, że nie jest potrzebne żadne „tłumaczenie”.

W architekturze 32-bitowej szyna instrukcji ma szerokość 32 bity; innymi słowy, istnieją 32 oddzielne linie, każda z jednym z tych poziomów napięcia. Magia pochodzi z zegara. Za każdym razem, gdy zegar zmienia linię, aktywuje to podstawowe obwody, takie jak zatrzaski ( https://en.wikipedia.org/wiki/Flip-flop_(electronics)), które działają na poziomach sygnału obecnych na autobus. Działanie tranzystorów zajmie trochę czasu, a sygnał potrzebuje czasu na propagację w skali nanosekundy. Zegar musi działać wystarczająco wolno, aby wszystkie sygnały ustabilizowały się na nowej wartości przed ponownym odwróceniem.

Tranzystory służą do budowania elementów logicznych, takich jak bramki NOR ( https://en.wikipedia.org/wiki/NOR_gate), sumatory ( https: //en.wikipedia .org / wiki / Adder_ (elektronika)) itp., które tworzą sekwencję pobierania i wykonywania w procesorze https://en.wikipedia.org/wiki/Instruction_cycle

Od tego momentu abstrakcja jest kontynuowana przez zawiłości nowoczesnych cyfrowych układów scalonych w kierunku oprogramowania. To niesamowite osiągnięcie.

Aaron D. Marasco
2019-11-03 05:16:31 UTC
view on stackexchange narkive permalink

Oto coś, czego inne odpowiedzi jeszcze nie poruszyły ... jest też coś, co nazywa się syntezą, która jest jednym ze sposobów kodowania rzeczywistych tranzystorów i ich fizycznych układów.Projekt piszesz w języku opisu sprzętu (zwykle VHDL lub Verilog).Następnie albo skonfigurujesz programowalną przez użytkownika macierz bramek (FPGA), albo masz rzeczywisty sprzęt zbudowany, w którym mapują twój kod na tranzystory, zwany układem scalonym specyficznym dla aplikacji (ASIC).W ten sposób powstają same procesory i procesory graficzne.

To nie jest dokładnie to, o co prosiłeś, ale może Cię zainteresować!

(Uwaga, dla pedantyki istnieją inne sposoby konfiguracji krzemu, np. schematyczne przechwytywanie, ale to nie odpowiada na pytanie „kod do tranzystorów”.

Jasen
2019-11-03 10:43:13 UTC
view on stackexchange narkive permalink

kod źródłowy jest tłumaczony na kod maszynowy za pomocą kompilatora lub asemblera (lub jakiejś kombinacji)

ten kod maszynowy to inny wzór jedynek i zer

W procesorze, dekoder instancji kieruje kod maszynowy do działań podejmowanych przez rejestry ALU, wejścia / wyjścia itp. Dekoder instancji to zazwyczaj zbiór bramek.

Kevin Keane
2019-11-04 03:32:43 UTC
view on stackexchange narkive permalink

Jak powiedzieli inni, kluczem jest prawdopodobnie zrozumienie, czym jest bramka logiczna i jak tranzystory są używane do jej budowy. Bramki logiczne to podstawowe elementy składowe wszystkiego, co cyfrowe. Bramka logiczna po prostu przyjmuje jedną, dwie lub czasami więcej binarnych wartości wejściowych i generuje dane wyjściowe zgodnie z predefiniowaną regułą (zwaną tabelą prawdy). Najpopularniejszy nazywa się NAND (lub nie i) i używam go jako przykładu. Reguła AND polega na tym, że przyjmuje oba wejścia i wytwarza 1 wyjście tylko wtedy, gdy oba wejścia 1 ORAZ wejście 2 mają wartość 1. NAND odwraca to: wytwarza 0 tylko wtedy, gdy oba wejścia są równe 1. Wspólnym używanym chipem jest nazywa się 7400. W rzeczywistości nadal można go kupić dzisiaj, tylko w nieznacznie zmodyfikowanej formie od tego, co było używane w Apple II.

NAND operation

Wyrażone jako tabela prawdy:

  0 NAND 0 = 1
0 NAND 1 = 1
1 NAND 0 = 1
1 NAND 1 = 0
 

Wikipedia zawiera również schemat do kilku wersji tego, jak jest implementowany na poziomie tranzystora. https://en.wikipedia.org/wiki/NAND_gate

Jest wiele innych typów bramek z różnymi tabelami prawdy.

Następną rzeczą jest to, jak przejść z tego do komputera. W tym celu może pomóc zignorowanie dzisiejszych procesorów z miliardami tranzystorów i przyjrzenie się znacznie prostszym starszym komputerom, takim jak Apple II. Ponieważ ten komputer ma teraz ponad 40 lat, wiele z tych starych informacji jest dostępnych bezpłatnie - na przykład tutaj: https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Books /W.%20Gayler%20-%20The%20Apple%20II%20Circuit%20Description.pdf

Apple II (i oryginalny IBM PC) zostały w rzeczywistości zbudowane z większości pojedynczych bramek (z wyjątkiem samego procesora). Było też kilka chipów timera (Apple słynie z timera 555 do wszelkiego rodzaju fascynujących rzeczy). 555 nie jest bramką logiczną, ale ma podobnie prostą konstrukcję.

I oczywiście była pamięć i kilka innych przedmiotów specjalnych.

Dzięki tym informacjom możesz faktycznie śledzić sygnały elektryczne, gdy przemieszczają się one przez komputer (mentalnie lub za pomocą czegoś takiego jak oscyloskop lub analizator stanów logicznych).

To pozostawia sam procesor w postaci czarnej skrzynki. Na szczęście 6502 (używany w Apple II, a także Commodore, Amidze i innych komputerach z tamtej epoki) jest znowu bardzo prosty. Ktoś zadał sobie trud zbudowania jednego z pojedynczych tranzystorów (i 7000 razy większych od układu scalonego): https://monster6502.com/ Według tej strony, 6502 zawiera tylko około 4200 tranzystorów . Dzięki tej replice możesz na poziomie tranzystora dokładnie śledzić, co się dzieje, gdy próbujesz wykonać instrukcję języka maszynowego, taką jak „ASL” (przesunięcie arytmetyczne w lewo).

Inną witryną, na którą możesz przyjrzeć się, jest wirtualny 6502. Jednak nie całkiem schodzi do poziomu tranzystora. Nadal musisz zrozumieć, że rejestry składają się z bramek (prawdopodobnie przerzutników z około 6 tranzystorami na bit) i że jednostka arytmetyczno-logiczna (ALU) również składa się z bramek.

hotpaw2
2019-11-03 13:52:03 UTC
view on stackexchange narkive permalink

W przypadku instrukcji z pojedynczym cyklem są to w zasadzie tabele przeglądowe, od kodu maszynowego instrukcji jako danych wejściowych, po dane wyjściowe tabeli wyszukiwania, które są wszystkimi włączeniami (itp.) potrzebnymi do wyboru i konfiguracji różnych fragmentów logiki (rejestrów, selektorów, jednostek, bufory itp.) wymagane do wykonania zadania przypisanego instrukcji.W przypadku instrukcji wielocyklowych jedno z wyjść tabeli przeglądowej jest kolejnym stanem, w którym maszyna stanów przechodzi przez wymagane kroki.W przypadku implementacji potokowych: połączenie tych dwóch.

W celu optymalizacji tabela przeglądowa jest zredukowana do mniejszego funkcjonalnie równoważnego stosu bramek logicznych, często nazywanych dekoderem instrukcji (lub mikrozkazów).

1 i 0 są już wyprowadzane z pamięci (lub kontrolera pamięci lub podsystemu) i / lub rejestrów, jako poziomy wysokiego i niskiego napięcia odpowiednie do sterowania wejściami do wielu bramek logicznych tranzystora, takich jak dekoder instrukcji.

fraxinus
2019-11-04 02:55:51 UTC
view on stackexchange narkive permalink

Krótka odpowiedź oprócz mbeaty i innych:

tak naprawdę NIE ma innej warstwy abstrakcji. 1 i 0 to same otwarte lub zamknięte tranzystory oraz wysokie / niskie napięcia gdzieś w komputerze.

W każdym cyklu zegara (samo przejście tranzystora między otwartym a zamkniętym) następna komórka pamięci (8 lub 16 lub 32 tranzystory w pamięci RAM) jest podłączana (przez kilka kolejnych tranzystorów) do tranzystorów w CPU, które „dekodują”instrukcja - przełącz więcej tranzystorów w taki sposób, aby przekształcić wejście instrukcji w wynik (oczywiście uproszczone).

Nie oznacza to, że dodatkowa warstwa abstrakcji lub dwie nie są przydatne dla zrozumienia.Wiele nowoczesnych procesorów zawiera mikrokod i z pewnością poprawna jest interpretacja wypełniania buforów mikrokodu na poziomie tranzystora.Jednak pomocne jest również rozważenie mikrokodu jako dodatkowej formy instrukcji pod montażem, z pewnym abstrakcyjnym obwodem wykonującym dekodowanie mikrokodu.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...