Pytanie:
Jak działają sygnały Active High i Active Low w systemach wbudowanych?
V V Rao
2010-10-30 12:37:01 UTC
view on stackexchange narkive permalink

To jest o tym, jak ogólnie działają mikrokontrolery.

Programowanie, które robimy, jest konwertowane przez kompilator na jedynki i zera, a ten zrozumiały dla maszyny kod jest następnie ładowany do mikrokontrolera.

Jak reaguje na to mikrokontroler ... Mam na myśli, czy te 1 i 0 są konwertowane na odpowiednie napięcie logiczne (5v i 0) przez DAC? Jeśli tak jest, w jaki sposób ten mały kawałek krzemu decyduje, co zrobić z tymi różnymi kombinacjami 5v i 0v?

Rozumiem, że każdy pojedynczy układ scalony jest zbudowany z bramek logicznych, a te bramki składają się z tranzystorów .. Więc jak te tranzystory reagują na różne kombinacje 5v i 0v?

Co sprawia, że ​​szukają tych logik .. Mam na myśli to, jak monitorują te instrukcje po włączeniu?

Więc z pewnością do MCU musi być załadowany system operacyjny, który mówi mu o przetwarzaniu i sposobie przetwarzania tych instrukcji, prawda? ..

Następna rzecz to ... rozważ licznik czasu ... jest to po prostu rejestr, który zwiększa się o jeden po każdym cyklu zegara. Czy system operacyjny nie instruuje ponownie MCU, aby zwiększał wartość po każdym zegarze? Czy mam rację? W takim razie w jakim języku jest napisany cały kod systemu operacyjnego?

Mogę po prostu kontynuować pracę nad programowaniem MCU do różnych zadań, ale dzisiaj chciałem wiedzieć, jak mój kod jest rozumiany przez tę maszynę.

Przepraszam, że moje pytanie jest długie przeczytać… pomóż mi nauczyć się tych podstawowych rzeczy…

Z góry dziękuję…

Przypuszczam, że ludzie będą mieli takie pytania na początku swojej kariery.
usunięta wiadomość była źle
Siedem odpowiedzi:
Shawn J. Goff
2010-10-30 19:07:48 UTC
view on stackexchange narkive permalink

Pobierz książkę „Kod: ukryty język sprzętu i oprogramowania komputerowego” autorstwa Charlesa Petzolda. Jest niesamowity, łatwy do przeczytania i odpowie na wiele z tych pytań.

Jeśli nie stać cię na książkę Petzolda, sprawdź „How Computers Work” autorstwa Rogera Younga. Obejmuje wiele tych samych rzeczy, a wersje HTML i PDF są bezpłatne.

Fajną książką byłaby również The Elements of Computing Systems.
JustJeff
2010-10-30 21:12:52 UTC
view on stackexchange narkive permalink

Nie ma potrzeby używania przetwornika cyfrowo-analogowego. Napięcia są używane do reprezentowania 1 i 0 zgodnie z konwencją, że wszystko poniżej 0,8 V (AKA „niskie”) to zero, a wszystko powyżej 2,4 V (AKA „wysokie”) jest równe jedynce. Tworzenie obwodów wykonujących logikę na tych reprezentatywnych napięciach jest stosunkowo proste.

Na przykład obwód może wyprowadzać coś w zakresie od 2,4 V do 5 V, aby reprezentować „1”, jeśli na którymkolwiek wejściu jest powyżej 2,4 V lub mniej niż 0,8 V w przeciwnym razie, a masz bramkę LUB. Jeśli wymaga obu wejść reprezentujących 1 do wyprowadzenia 2,4 V, masz bramkę AND. Falownik po prostu wysyła stan wysoki, gdy wejście jest niskie i odwrotnie. Możesz budować proste bramki, takie jak te, z zaledwie kilkoma tranzystorami i wykonywać kombinatoryczną logikę boolowską. Używając grup bitów do reprezentowania liczb, możesz nawet budować obwody do dodawania liczb z logiką kombinatoryczną, bez oprogramowania.

Gdy pracujesz z bramkami, możesz konstruować przerzutniki, a na ich podstawie rejestry i liczniki. Japonki pozwalają na przechowywanie 1 i 0 z jednego punktu w czasie i używanie ich później. Rejestry i liczniki to obwody, które wykonują funkcje na grupach bitów reprezentujących liczby. Rejestr przechowuje numer, dopóki nie załadujesz do niego nowego numeru. Licznik jest podobny do rejestru, ale ma inne wejście, które powoduje zwiększenie przechowywanej liczby. (Zmniejszenie też jest możliwe). To stawia Cię w królestwie automatów stanowych i logiki sekwencyjnej, jednak żadne oprogramowanie nie jest wymagane.

Systemy pamięci są sposobem na przechowywanie ogromnej liczby bitów. Na poziomie komponentów część pamięci jest zbudowana jak ogromna kolekcja przerzutników, ale częściej istnieje inna technologia (DRAM), która nie jest dokładnie przerzutnikiem, ale robi to samo.

Jako kolejny krok możesz zbudować system logiki sekwencyjnej i kombinatorycznej, który może wykonywać operacje w zależności od bitów przechowywanych w systemie pamięci, w tym zapisywać nowe wartości do tego systemu pamięci. Teraz doszedłeś do poziomu procesora, a wszystko, co robi, to tylko sprzęt wykonujący wiele prostych zadań. (niezależnie od mikroprogramowanych rdzeni). W tym miejscu poszczególne kombinacje bitów, które umieszczasz w systemie pamięci, można uznać za oprogramowanie języka maszynowego.

Teraz zrozumiałem, że tranzystory są podstawą, na której tworzone są procesory, tj. Z bramką taką jak nand, możemy tworzyć flipflopy, rejestry, liczniki, alu i wszystko to razem tworzy system obliczeniowy. Wejście tranzystorów może być wysokie lub niskie (ponad 2,4v 0r poniżej 0,8v). Moje pytanie brzmi: jakie jest urządzenie, które interpretuje 1 i 0 z kompilatora jako logikę odpowiadającą tym tranzystorom, jeśli nie jest używany DAC?
@Vicky Rao - Myślę, że wprawia Cię w zakłopotanie, że mieszasz poziomy abstrakcji. Nic nie jest potrzebne, aby przekonwertować dane wyjściowe kompilatora na poziomy logiczne tranzystorów, ponieważ 1 i 0 w oprogramowaniu oraz 1 i 0 w sprzęcie to po prostu różne widoki tej samej fizycznej rzeczywistości. To, co na jednym poziomie wygląda jak miliony tranzystorów zmieniających stan, na innym poziomie wygląda jak procesor, na którym działa oprogramowanie.
Thomas O
2010-10-30 16:19:05 UTC
view on stackexchange narkive permalink

Rozważmy NPN BJT; tranzystor. Jeden z pierwszych odkrytych.

Teraz podłączasz go tak, że kolektor jest podłączony do wejścia o zmiennej logice, a emiter jest podłączony do innego wejścia logicznego z rezystorem połączonym szeregowo. Następnie rezystor od emitera do masy.

  logika | 10k | / logika - / \ / \ / - | NPN | > + - wyjście | / \ 10k / | --- -  

Właśnie skonstruowałeś bramkę AND. Wyjście jest wysokie tylko wtedy, gdy oba wejścia są w stanie wysokim. Nie jest w żaden sposób doskonały, ponieważ zależy od danych wejściowych do kolektora i ponieważ nie jest dobrze rozłożony, ale daje wyobrażenie o tym, jak tranzystory mogą być używane do obliczania funkcji.

Następnie możesz również skonstruować bramkę NOT;

  5V | / \ 10k / + - wyjście | 10k | / logika - / \ / \ / - | NPN | > | --- -  

Dodanie tego do wyjścia właśnie zbudowanej bramki AND daje nam bramkę NAND, a być może wiesz, że z bramką NAND możesz skonstruować dowolną formę logiki. Ma również tę zaletę, że sygnał jest buforowany, co zwiększa przepustowość i zdolność łączenia w łańcuch.

Prawdziwe procesory rzadko używają BJT, ale zamiast tego logika CMOS, ale obowiązują te same zasady.

Możesz użyć FET zamiast NPN :)
Dlatego dodałem: „Prawdziwe procesory rzadko używają BJT, ale zamiast tego logika CMOS, ale obowiązują te same zasady”. n-JFET i n-MOSFET prawdopodobnie działałyby równie dobrze, jak bardziej estoryczne formy, takie jak zawory.
Możesz także użyć PNP, aby wykonać NIE w taki sam sposób jak AND z NPN
Hans
2010-10-30 16:57:44 UTC
view on stackexchange narkive permalink

Może powinieneś poszukać odniesień do systemów cyfrowych lub zajrzeć do rzeczy takich jak VHDL. MCU jest zasadniczo zaprojektowany z blokami konstrukcyjnymi, które mogą być różnymi bramkami logicznymi i (mniejszymi) blokami konstrukcyjnymi. Ostatecznie wszystko sprowadza się do bramek logicznych, które rzeczywiście składają się z tranzystorów. Typowy prosty MCU, taki jak PIC18F lub coś innego, nie obsługuje systemu operacyjnego. Program, który do niego ładujesz, to zbiór instrukcji maszynowych, które PIC wykonuje w sposób ciągły. Całe przetwarzanie odbywa się sprzętowo.

Zwykły procesor zwykle ma jednostkę ALU (oblicza wynik określonej instrukcji) i więcej bloków wokół niej, które ładują instrukcje, zarządzają stosem i zarządzają pamięcią. Procesor ma kilka rejestrów do samodzielnej pracy, głównie do ładowania danych wejściowych i przechowywania wyników. Możesz nie zobaczyć tego wiele w C lub innym języku, ale dużo w asemblerze.

ALU obsługuje instrukcje z określonymi kodami operacji i danymi wejściowymi. Na przykład typową instrukcją może być ADD 12 1, co oznacza 12 + 1 = 13. Wynik jest przechowywany w rejestrze samego procesora.

W zależności od architektury, jednostka ALU ma na przykład 8 bity szerokie. Prosty sumator 8-bitowy może składać się z 8 sumatorów 1-bitowych połączonych ze sobą (używając bloków do zbudowania większego bloku). 1-bitowy sumator można łatwo zapisać do bramek logicznych za pomocą algebry boolowskiej. Ręczne zapisywanie całego 8-bitowego dodatku tylko przy użyciu bramek logicznych byłoby szaloną pracą. To tak, jakby pisać program bez możliwości użycia jakiejkolwiek funkcji lub podprogramów.

Aby systemy cyfrowe działały poprawnie, większość bloków jest zaprojektowana w oparciu o zegar. Każdy system cyfrowy ma określony czas potrzebny do osiągnięcia stanu końcowego. Wynika to z opóźnień w przełączaniu tranzystorów i stanów wpływających na inne stany. Sygnał zegara to coś, z czym powinieneś się zapoznać, prędkość, z jaką działa procesor. Timer może być naprawdę prostym urządzeniem, które ma mały blok sumujący i zwiększa się o 1 za każdym razem, gdy pojawia się takt zegara.

Johan
2010-10-30 19:06:22 UTC
view on stackexchange narkive permalink

To duży temat i nie mogę udzielić prostej odpowiedzi, ale ...

Możesz podejść do tej odpowiedzi trochę bliżej, robiąc coś podzielonego i podbijającego, a ponieważ druga odpowiedź próbuje Aby zaatakować ten problem z punktu widzenia HW, spróbuję z perspektywy SW wysokiego poziomu.

Jeśli piszesz jakieś oprogramowanie w kodzie powiedzmy c (bardzo wysoki poziom abstrakcji), tak naprawdę nie widzisz to, co się dzieje, nie do końca rozumie wszystkie zakochane rzeczy, o które pytasz.

Ale i tak zacznijmy.

Prosty program, który po prostu zawiera zmienną.

  int main (void) {int i = 0; while (1) {i ++; }}  

Następnie musimy pobrać kod asemblera, abyśmy mogli zrozumieć, co się dzieje. Ten krok można wykonać na dowolnej platformie, z której korzystasz, ale dla uproszczenia używam gcc na komputerze (ale to nie ma znaczenia ...)

  gcc -O0 -S main.c -o main.lst  

Następnie kończymy coś takiego:

  .file "main.c" .text.globl main .type main, @functionmain: pushl% ebp movl% esp,% ebp subl $ 16,% esp movl $ 0, -4 (% ebp) .L2: addl $ 1, -4 (% ebp) jmp .L2 .size main,.-Main .ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3" .section. note.GNU-stack, "", @ progbits  

Następnie próbujesz zrozumieć każdy wiersz kodu i co on robi.

A potem zaczynasz przyglądać się jak każda instrukcja jest wdrażana ... Na przykład podrzędna

  subl $ 16,% esp  

W tym momencie jest inaczej na różnych architekturach i x86, ramię, pic jest trochę inne ... Ale ponieważ moim przykładem był x86.

I na tym poziomie, kiedy czytasz kopię, większość działań będzie wyglądać tak, jakbyś po prostu przesuwał liczby i w pewnym sensie to jest to, co dzieje się. Mamy predefiniowany program, przez który przechodzimy, ten program jest przechowywany w jakiejś pamięci flash, która jest zwykle rodzajem logiki elektronicznej, która uwięzi jeden poziom logiczny.

Jeśli widzisz coś w rodzaju „ Flip-flop” za każdym razem, oznacza to, że jesteś blisko, a wtedy potrzebujemy ich dużo. Tutaj zaczynamy znajdować jedynki i zera.

Następnie, aby wykonać jakąś akcję, dodajemy fajną logikę, która może przekształcić jedną liczbę w inną liczbę (sam procesor).

Następnie postępujemy zgodnie z programem krok po kroku i aby wiedzieć, gdzie jesteśmy, mamy licznik programów (PC). I cofnij liczby do tyłu i do czwartej i przechowuj je w innej pamięci, która jest także rodzajem siatki z przerzutnikami.

Wróćmy jednak do konkretnego przykładu, aby trochę lepiej zrozumieć procesor możemy rzucić okiem na ALU i to uproszczone zdjęcie. Gdzie widać, że kiedy przenosimy dane do tego bloku logicznego i wybieramy jakąś operację za pomocą pinów OP, otrzymamy nowy wynik na wyjściu, który z kolei możemy przenieść z powrotem w jakieś miejsce w pamięci.

I przeklinam, że twoja jednostka ALU w części procesora twojego MCU jest o wiele bardziej złożona niż ta, ale działa na tej samej podstawowej zasadzie.

W tym momencie możemy zobaczyć jakiś obwód logiczny, który „działa” po jednej stronie, a trochę pamięci po drugiej. Pamięć składa się z dwóch części, jednej przeznaczonej na program, a drugiej na dane. Ale jak właściwie to „przenosimy”, te muszą być w jakiś sposób połączone ...

I tu się łączymy te części z jakąś magistralą.

Magistrala to tylko kilka przewodów, które łączą ze sobą różne części, a następnie logika sterowania mówi pamięci, jakie dane mają wysłać na tę magistralę i jaką część procesora powinien nasłuchiwać tych danych, które zostały wysłane. Odbywa się to za pomocą kilku równoległych linii kontrolnych, które włączają / wyłączają różne części.

...


Więc jeśli weźmiesz swój wybrany MCU i przeanalizujesz bardzo mały program, i dopóki nie rozumiesz, co się dzieje, analizujesz to jeszcze dokładniej, aż uzyskasz ładną małą łamigłówkę, której można użyć do stworzenia „MCU”.

I nie zapomnij przeczytać arkusza danych dla Twojego MCU i sprawdź, z jakich części został on wykonany, np. z jaką pamięcią, aluminium, autobusami itp.

Mam nadzieję, że to trochę pomoże ???

Dobrze szczęście

Twoja strategia wyjaśniania tego przez podzielenie instrukcji sprawiła, że ​​było to naprawdę łatwe ... dzięki ...
dren.dk
2010-10-30 15:21:25 UTC
view on stackexchange narkive permalink

Tak naprawdę nie musisz wiedzieć tych rzeczy, chyba że masz zamiar samodzielnie zaprojektować procesory, ale wszystko sprowadza się do ogromnej maszyny stanów zaimplementowanej sprzętowo.

Największym problemem związanym z tego rodzaju pytaniami jest to, że odpowiedź jest ogromna i zajmuje kilka lat kursów uniwersyteckich, więc każda odpowiedź, którą tu uzyskasz, będzie tylko powierzchowna.

Jeśli naprawdę chcesz wiedzieć, co trafia do procesora, zapoznaj się z kodem źródłowym vhdl / verilog pod adresem: http://opencores.org/projects

Just learning vhdl i verilog będą same w sobie dużym zadaniem, więc czeka Cię długa lektura :)

„ogromna maszyna sceniczna” - to brzmi jak produkcja na Broadwayu.
Na szczęście odpowiedzi, których udzielili ci ludzie, nie sprawiają, że zarysowuję powierzchnię, jak wspomniałeś, zamiast tego uczyniły ją krystalicznie czystą. W każdym razie, dzięki kolego ...
endolith
2010-10-30 18:47:26 UTC
view on stackexchange narkive permalink

Chodzi mi o to, czy te 1 i 0 są konwertowane na odpowiednie napięcie logiczne (5 V i 0) przez DAC?

Nie, nie DAC. 1 i 0 nigdy tak naprawdę nie istnieją. To tylko matematyczna abstrakcja, której używamy, aby ułatwić programowanie. Rzeczywiste napięcia cyfrowe mogą wynosić 5 V, 3,3 V lub 1 V, w zależności od sprzętu. Ostatecznie komputer to tylko logika cyfrowa. Pamięć przechowuje jedynki i zera jako logikę cyfrową, cyfrowy obwód logiczny przekazuje je z pamięci do procesora, procesor to cyfrowy obwód logiczny, który może dodawać, odejmować lub porównywać liczby binarne itp.

jak działa ten mały kawałek krzemionki

Krzem a to szkło, mieszanina krzemu i tlenu. Chipy są wykonane z czystego silikonu on , z zanieczyszczeniami dodanymi w określonych miejscach, aby wytworzyć wszystkie tranzystory.

Rozumiem, że każdy pojedynczy układ scalony jest wykonany z bramek logicznych

Cyfrowe układy scalone są wykonane z bramek logicznych, a nie układów analogowych.

Jak więc te tranzystory reagują na różne kombinacje 5v i 0v?

Przeczytaj najprostszy przykład, falownik CMOS.

Wyjaśniłeś, że DAC nie jest używany, 1 i 0 są po prostu matematyczną abstrakcją, której używamy, aby ułatwić programowanie. Czy możesz dodać więcej szczegółów na ten temat w odniesieniu do „Kompilatora”? kompilator konwertuje język wysokiego poziomu na 1 i 0. Powiedziałeś, że te 1 i 0 są przechowywane w pamięci jako logika cyfrowa, cyfrowy układ logiczny przekazuje je z pamięci do procesora .. Jak nazywa się urządzenie, które wykonuje tę funkcję ? I znowu, wejście procesora będzie 5v lub 0v. Więc jakie urządzenie konwertuje 1 i 0 z pamięci (właściwie z kompilatora) na 5v i 0v?
@Vicky: Nie ma konwersji z „1” na 5 V. „1” i „0” to tylko etykiety, które podajemy wysokim i niskim napięciom, wykonując obliczenia matematyczne na liczbach binarnych. W przypadku prostej logiki niskiego poziomu, która nie działa na liczbach binarnych, częściej nazywa się je „H” (wysoki) i „L” (niski).


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 2.0, w ramach której jest rozpowszechniana.
Loading...