Jeśli 32- bitowy procesor może obsłużyć około 4 GiB pamięci RAM (tj. ) bajtów, to dlaczego mój Arduino Mega 2560 ma 8 KiB SRAM, jeśli bycie 8- bitowym procesorem pozwala mu obsłużyć tylko 256 bajtów ( )? A może źle czytam następującą stronę?2 8
arduino
microcontroller
microprocessor
sdram
ZaqueoAlejandro
źródło
źródło
Odpowiedzi:
Większość 8-bitowych procesorów ma 16-bitowe magistrale adresowe, co pozwala im adresować 64 KB, właśnie dlatego, że 256 bajtów naprawdę nie wystarczy do zrobienia bardzo dużo! Oznacza to po prostu, że muszą załadować dwa bajty zamiast jednego, za każdym razem, gdy muszą załadować adres. Nieco wolniejszy, ale tolerowany, biorąc pod uwagę ich rozmiar.
(I tak, istnieje wiele wyjątków, głównie opracowanych, gdy 64k stało się zbyt małe, ale mówimy tutaj o podstawowej idei).
źródło
Autobus adres i magistrala danych są oddzielone więc mogą one mieć różne rozmiary. Dla każdego konkretnego rozmiaru magistrali adresowej istnieje wiele technik adresowania większej ilości pamięci niż szerokość bitu rejestru
Najczęstszym sposobem jest jakoś zwiększenie szerokości magistrali adresowej
za pomocą wielu rejestrów dla adresu
X
,Y
iZ
dane do rejestrów adresowania zapewnić maksymalną 64 KB RAM. Ci z kolei mogą być połączone zRAMPX
,RAMPY
,RAMPZ
aby uzyskać dostęp do wyższych adresów pamięci RAM w jeszcze większych wersjach. Ma równieżSPH
dla wysokich bajtów wskaźnika stosu opróczSPL
wariantów z ponad 256 bajtami pamięci RAM 1H
&L
,B
&C
,D
iE
które mogą być używane razem jako 16-bitowy rejestr adresówza pomocą jednego dużego specjalnego rejestru większego niż naturalny rozmiar do adresowania
za pomocą specjalnego rejestru dla górnej części adresu . Podczas adresowania pewnej pamięci domyślnie 8 niskich bitów adresu zostanie pobranych z 8-bitowego rejestru bezpośredniego lub 8-bitowego na 8-bitowym mikrokontrolerze, podczas gdy wysokie bity zostaną zastąpione wartością drugiego rejestru adresu.
call
lubgoto
instrukcji 8 lub 9 niskich bitów adresu jest wskazywanych przez znak natychmiastowy, a pozostałe są pobierane z bieżącego licznika programu. Dlatego dostęp do czegokolwiek w pobliżu bieżącego segmentu wymaga tylko 1 instrukcji, podczas gdy dalsze adresy będą wymagały 2 instrukcji (aby ustawić wysokie bity).PC
bezwarunkowego skoku.Innym sposobem na osiągnięcie tego jest bankowość pamięci . Jest to przydatna metoda, która jest nadal stosowana w niektórych architekturach. W tym modelu pamięć jest podzielona na wiele banków . Za każdym razem możesz skontaktować się tylko z określonym bankiem. Często istnieje globalny bank lub zakres adresów, które są zawsze widoczne w dowolnym momencie, ale w przypadku innych części należy zmienić bank w razie potrzeby.
Istnieje również niezbyt popularna technika, ale można ją znaleźć w Intel 8051 . Jako mikrokontroler z 8-bitowym adresem danych może mieć maksymalnie 256 adresów. Połowa miejsca (część wysoka) jest wykorzystywana dla rejestrów funkcji specjalnych ( SFR ), ograniczając rzeczywistą pamięć RAM adresowalną tylko do 128 bajtów. Jednak nowi producenci serii 8051 znaleźli sprytny sposób na rozwiązanie tego problemu poprzez oddzielenie dostępu do pamięci . Adresowanie bezpośrednie uzyska dostęp do SFR, natomiast adresowanie pośrednie, ale rejestry będą uzyskiwać dostęp do dużej części pamięci RAM, co oznacza, że teraz masz 256 + 128 = 384 bajtów adresowalnych.
1 https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set#Memory_addressing_instructions
źródło
Prawie wszystkie 8-bitowe procesory mają pewną zdolność do utworzenia 16-bitowego adresu z części niskiego rzędu i części wysokiego rzędu. Na niektórych procesorach, w tym na oryginalnym 8080, istnieją rejestry dedykowane do utrzymywania górnej i dolnej części adresu (chociaż z punktu widzenia programisty mogą istnieć niektóre rejestry, takie jak wskaźnik stosu 8080, który nie oferuje instrukcji, aby adresować je osobno). W niektórych innych procesorach nie ma rejestrów poświęconych górnej lub dolnej połowie adresu, ale adresy są gromadzone „w locie”. Na przykład w 6502 instrukcja „LDA 1234 $, X” ładuje akumulator adresem utworzonym przez dodanie 1234 $ do 8-bitowego rejestru X [przypuśćmy, że zawiera $ F0]. Wykonanie tej instrukcji przebiegałoby w 4 lub 5 krokach:
Przeniesienie odczytanego bajtu do akumulatora nakłada się na pobranie następnej instrukcji. Ponadto w przypadku wielu operacji, jeżeli krok 3 nie wygenerował przeniesienia, krok 4 odczytałby poprawny adres, a wykonanie mogłoby przejść bezpośrednio od kroku 4 do następnej instrukcji, omijając krok 5.
Jeśli przeanalizujemy sekwencję operacji, zauważymy, że architektura little-endian ma wyraźną przewagę nad architekturą big-endian, w tym w większości przypadków (choć nie pokazana), mimo że ALU wykonuje cykl w celu wykonania dodatkowo możliwe jest odczytanie bajtu z obliczonego adresu bez czekania na wynik ALU, ponieważ zwykle pobrany bajt wysoki będzie bajtem operandu docelowego. Na maszynie typu big-endian z 8-bitowym ALU obciążenie indeksowane zajęłoby co najmniej 5 cykli (ponieważ dolna połowa adresu nie byłaby odczytana aż do kroku 3, a zatem zostałaby obliczona w kroku 4).
źródło
Linie magistrali danych (piny) i linie adresu (piny) są całkowicie oddzielne. Mówiąc najprościej, linie magistrali określają maksymalną liczbę bitów, które mogą być przesyłane pojedynczo (i przechowywane w pamięci), podczas gdy linie adresowe określają maksymalną liczbę „komórek” pamięci, które można wybrać.
Było to głównie kwestia marketingowa, że 32-bitowe procesory x86 nie były w stanie obsłużyć więcej niż 4 GB pamięci RAM. Pamiętam gdzieś, że na procesorach Pentium 4 były piny A33-34.
źródło
Często jest prawdą, że istnieje pewien związek między wielkością pamięci adresowalnej a wielkością rejestru wewnętrznego, chociaż związek ten jest różny z różnych powodów. 256 bajtów przestrzeni adresowej było uważane za zbyt małe nawet w bardzo wczesnych dniach mikroprocesorów, więc większość ośmiobitowych procesorów wytwarzała 16-bitowe (dwa bajty) adresy, które adresowały 64 kilobajty. Jednak dzięki przełączaniu banków (zasadniczo wykorzystując pewne linie we / wy do wytworzenia jeszcze większej liczby linii adresowych) możliwe było uzyskanie znacznie więcej.
W pierwszych 16 i 32-bitowych procesorach urządzenie nie zawsze miało wystarczającą liczbę pinów, aby uzyskać dostęp do całej przestrzeni, którą mogłyby adresować ich wewnętrzne rejestry adresowe. Na przykład w telefonie Motorola 68000 było tylko wystarczającej liczby pinów adresu (24), aby zaadresować 16 megabajtów pamięci RAM, chociaż wewnętrzne rejestry adresów miały szerokość 32 bitów.
źródło
Odpowiem na to pytanie specjalnie dla wspomnianych kontrolerów AVR. Podstawowa zasada obowiązuje również w przypadku wielu innych architektur 8-bitowych.
AVR to 8-bitowe rdzenie. Oznacza to, że mają 8-bitowe rejestry. Jednak 8 bitów nie wystarczy, aby uzyskać dostęp do użytecznej ilości pamięci. Dlatego rdzeń AVR może używać określonego zestawu rejestrów połączonych jako 16-bitowe rejestry wskaźników. Rejestry r30 i r31 (również aliasowane jako ZL i ZH) są tego przykładem. Razem tworzą wskaźnik Z.
W zestawie odczytanie bajtu pod adresem 0x1234 wygląda następująco:
Rodzina AVR ma 3 pary rejestrów, których można użyć do tego. Są one specjalnie zaprojektowane sprzętowo, aby umożliwić takie operacje.
Podczas programowania w języku wyższego poziomu, takim jak C, kompilator obsługuje te rzeczy.
Uwaga: Niektóre AVR obsługują nawet większe rozmiary pamięci niż 64 KB. Kontrolery te mają specjalny rejestr funkcji, w którym dodatkowe bity adresu są zapisywane przed dostępem. Adres składa się zatem z następujących bitów (MSB do LSB):
Rejestr funkcji specjalnych (zwykle 1 bajt), ZH (8 bitów), ZL (8 bitów).
źródło
8-bitowe AVR Atmela faktycznie używają 16-bitowego adresu danych. Mają wiele innych 16-bitowych rejestrów, a nawet około 16-bitowych timerów. Ponieważ jest to tylko 8-bitowy procesor, zwykle używa dwóch cykli zegara do załadowania rejestru 16-bitowego.
źródło
Wikipedia całkiem dobrze to wyjaśnia:
źródło
Pojęcie, że „szerokość bitów” procesora określa maksymalną ilość pamięci RAM, którą procesor może rozwiązać, jest jednym z najbardziej rozpowszechnionych mitów w przetwarzaniu. W rzeczywistości historia branży jest zaśmiecona procesorami, dla których ta relacja nie miała miejsca.
HP 21MX, HP 1000: 16-bitowy procesor, pamięć do 16 MB
PDP-11: 16-bitowy procesor, pamięć do 4 MB
VAX-11/780: 32-bitowy procesor, pamięć do 512 MB
itd itd.
źródło