Come funzionano i segnali Active High e Active Low nei sistemi integrati?


8

Ecco come funzionano i microcontroller in generale.

La programmazione che eseguiamo viene convertita in 1 e 0 dal compilatore e questi codici comprensibili per la macchina vengono quindi caricati nel microcontrollore.

Come risponde il microcontrollore a questo ... Voglio dire, questi 1 e 0 vengono convertiti in tensione logica corrispondente (5v e 0) da DAC? Se è così, come fa questo piccolo pezzo di silicio a decidere cosa fare con queste varie combinazioni di 5v e 0v?

Capisco che ogni singolo circuito integrato è costituito da porte logiche e queste porte sono composte da transistor. Quindi, in che modo questi transistor rispondono a varie combinazioni di 5v e 0v?

Cosa li rende alla ricerca di queste logiche ... Intendo come monitorano queste istruzioni quando sono accese?

Quindi sicuramente ci deve essere un sistema operativo caricato nel mcu che gli dice di elaborare e come elaborare queste istruzioni, no? ..

La prossima cosa è ... considera un timer .. è semplicemente un registro che si incrementa di uno dopo ogni ciclo di clock. Non è di nuovo il sistema operativo che indica al mcu di incrementare dopo ogni clock? Ho ragione? In tal caso, in quale lingua viene scritto tutto il codice per un sistema operativo?

Posso semplicemente continuare il mio lavoro con la programmazione di MCU per diversi compiti, ma oggi ero interessato a sapere come il mio codice è compreso da questa macchina.

Mi dispiace che la mia domanda sia lunga da leggere .. per favore aiutami a imparare queste cose di base ..

Grazie in anticipo..


Suppongo che le persone avranno questo tipo di domande all'inizio della loro carriera ..
VV Rao,

messaggio cancellato sentito male
Rick_2047

Risposte:


6

Non è necessario utilizzare un DAC. Le tensioni vengono utilizzate per rappresentare 1 e 0 secondo la convenzione secondo cui qualsiasi valore inferiore a 0,8 V (AKA "basso") è zero e qualsiasi valore superiore a 2,4 V (AKA "alto") è uno. È relativamente semplice costruire circuiti che eseguono la logica su queste tensioni rappresentative.

Ad esempio, un circuito può emettere qualcosa nell'intervallo da 2,4 V a 5 V per rappresentare '1' se uno degli ingressi è superiore a 2,4 V, o qualcosa di meno di 0,8 V in caso contrario, e si dispone di un gate OR. Se richiede entrambi gli ingressi che rappresentano 1 per l'uscita a 2,4 V, si dispone di una porta AND. Un inverter emette un massimo quando l'ingresso è basso e viceversa. Puoi costruire semplici cancelli come questi con pochissimi transistor ed eseguire la logica booleana combinatoria. Utilizzando gruppi di bit per rappresentare i numeri, è anche possibile creare circuiti per aggiungere numeri con logica combinatoria, senza necessità di software.

Una volta che lavori con le porte, puoi costruire infradito e, da esse, registri e contatori. I flip-flop ti consentono di memorizzare 1 e 0 da un punto nel tempo e usarli in seguito. Registri e contatori sono circuiti che eseguono funzioni su gruppi di bit che rappresentano numeri. Un registro contiene un numero fino a quando non si carica un nuovo numero al suo interno. Un contatore è come un registro, ma ha un altro input che fa aumentare il numero memorizzato. (È possibile anche il decremento). Questo ti mette nel regno delle macchine a stati e della logica sequenziale, senza bisogno di software.

I sistemi di memoria sono un modo per memorizzare un numero enorme di bit. A livello di componente, parte della memoria è costruita come un'enorme raccolta di infradito, ma più comunemente esiste un'altra tecnologia (DRAM) che, sebbene non esattamente un infradito, fa la stessa cosa.

Come ulteriore passo, è possibile costruire un sistema di logica sequenziale e combinatoria in grado di eseguire operazioni a seconda dei bit memorizzati in un sistema di memoria, inclusa la scrittura di nuovi valori su quel sistema di memoria. Ora sei arrivato al livello del processore, e tutto ciò che il processore fa, è solo l'hardware che svolge un sacco di compiti semplici. (nonostante i nuclei microprogrammati). A questo punto, le particolari combinazioni di bit inserite nel sistema di memoria possono essere considerate software di linguaggio macchina.


Ora ho capito che i transistor sono la base su cui vengono creati i processori, cioè con un gate come nand, possiamo creare infradito, registri, contatori, alluminio e tutti questi insieme fanno il sistema di elaborazione. L'ingresso dei transistor può essere alto o basso (oltre 2,4 v 0r sotto 0,8 v). La mia domanda è: qual è il dispositivo che interpreta 1 e 0 dal compilatore come logica corrispondente a questi transistor se non viene utilizzato alcun DAC?
VV Rao,

@Vicky Rao - Penso che ciò che ti confonde sia che stai mescolando i livelli di astrazione. Non è necessario nulla per convertire l'output del compilatore in livelli logici per i transistor, poiché il software 1 e 0, e l'hardware 1 e 0, sono solo viste diverse della stessa realtà fisica. Ciò che a un livello sembra milioni di transistor che cambiano stato, a un altro livello sembra un processore che esegue software.
JustJeff,


5

Considera un NPN BJT; un transistor. Uno dei primi scoperti.

Ora lo si collega in modo tale che il collettore sia collegato a un ingresso logico variabile e l'emettitore sia collegato a un altro ingresso logico, con un resistore in serie. Quindi, un resistore dall'emettitore a terra.

               logic
                 |
         10k   |/
logic --/\/\/--|  NPN
               |>
                 +-- output
                 |
                 /
                 \ 10k
                 /
                 |
                ---
                 -

Hai appena costruito un cancello AND. L'uscita è alta solo quando entrambi gli ingressi sono alti. Non è perfetto in alcun modo in quanto dipende dall'input al collector e perché non si espande bene, ma ti dà un'idea di come i transistor possono essere utilizzati per calcolare una funzione.

Quindi, puoi anche costruire un NOT gate;

                5V
                 |
                 /
                 \  10k
                 /
                 +-- output
                 |
         10k   |/
logic --/\/\/--|  NPN
               |>
                 |
                ---
                 -

Aggiungendo questo all'output del gate AND appena creato, si ottiene un gate NAND e si potrebbe sapere che con un gate NAND è possibile costruire qualsiasi forma di logica. Ha anche il vantaggio che il segnale è bufferizzato, aumentando la capacità della ventola e concatenando.

I processori reali usano raramente BJT, ma invece la logica CMOS, ma si applicano gli stessi principi.


Si potrebbe utilizzare FET invece di NPNs :)
endolith

Ecco perché ho aggiunto questo: "I processori reali usano raramente i BJT, ma invece la logica CMOS, ma si applicano gli stessi principi". Gli n-JFET e gli n-MOSFET probabilmente funzionerebbero così come le forme più estoriche come le valvole.
Thomas O

Puoi anche usare un PNP per fare un NOT allo stesso modo dell'AND con NPN
Matt Williamson,

3

Forse dovresti cercare alcuni riferimenti ai sistemi digitali o cercare cose come VHDL. Un MCU è fondamentalmente progettato con blocchi, che possono essere una varietà di porte logiche e blocchi (più piccoli). Alla fine tutto si riduce alle porte logiche che sono effettivamente composte da transistor. Un tipico MCU semplice come un PIC18F o qualcosa del genere non esegue un sistema operativo. Il programma che carichi in esso è un gruppo di istruzioni della macchina che il PIC esegue continuamente. Tutto il processo viene eseguito dall'hardware.

Un procuratore generale di solito ha un ALU (calcola il risultato di una determinata istruzione) e un numero maggiore di blocchi attorno ad esso che carica le istruzioni, gestisce lo stack e gestisce la memoria. Il proccesor ha alcuni registri per lavorare con esso stesso, principalmente per caricare input e memorizzare i risultati. Potresti non vedere molto di questo in C o in un'altra lingua ma molto nell'assembly.

L'ALU gestisce le istruzioni con determinati codici operativi e input. Ad esempio, un'istruzione tipica potrebbe essere ADD 12 1, che significa 12 + 1 = 13. Il risultato è memorizzato in un registro sul processore stesso.

A seconda dell'architettura, ALU è ad esempio larga 8 bit. Un semplice sommatore a 8 bit può essere composto da 8x 1 bit adder collegati tra loro (usando i blocchi per costruire un blocco più grande). Un sommatore a 1 bit può essere facilmente trascritto su porte logiche usando l'algebra booleana. Annotare manualmente un intero sommatore a 8 bit usando solo le porte logiche sarebbe una folle quantità di lavoro. È come scrivere un programma senza avere la possibilità di usare alcuna funzione o subroutine.

Per far funzionare correttamente i sistemi digitali, la maggior parte dei blocchi sono progettati in base al clock. Ogni sistema digitale ha un certo tempo necessario per raggiungere lo stato finale. Ciò è dovuto ai ritardi di commutazione nei transistor e negli stati che influenzano altri stati. Il segnale dell'orologio è qualcosa con cui dovresti avere familiarità, la velocità su cui corre il processore. Un timer potrebbe essere un dispositivo davvero semplice che ha un piccolo blocco sommatore e si incrementa di 1 ogni volta che ottiene un segno di spunta dell'orologio.


3

Questo è un argomento importante e non posso dare una risposta semplice ma ...

Puoi avvicinarti un po 'a questa risposta facendo un po' di divisione e conquista, e poiché l'altra risposta cerca di attaccare questo problema da un punto di vista hw proverò da una vista SW di alto livello.

Se scrivi del software in diciamo codice c (un livello molto alto di astrazione), non vedi davvero cosa sta succedendo non capisci davvero tutte le cose dell'amante di cui stai chiedendo.

Ma iniziamo comunque.

Un semplice programma che include solo una variabile.

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

Quindi dobbiamo ottenere il codice assembler in modo da poter capire cosa sta succedendo. Questo passaggio può essere fatto su qualunque piattaforma tu usi, ma per semplicità, utilizzo gcc su un pc (ma non importa ...)

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

Quindi finiamo con qualcosa del genere:

    .file   "main.c"
    .text
.globl main
    .type   main, @function
main:
    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

Quindi provi a capire ogni riga di codice e cosa fa.

E poi inizi a esaminare come vengono implementate tutte le istruzioni ... Ad esempio il subl

    subl    $16, %esp

A questo punto è diverso su architetture diverse e x86, arm, pic è un po 'diverso ... Ma dal momento che il mio esempio era x86.

E a questo livello quando leggi la copia la maggior parte delle azioni sembrerà che tu stia semplicemente spostando dei numeri, e in un certo senso è quello che sta succedendo. Abbiamo un programma predefinito che passiamo in rassegna, questo programma è archiviato in una sorta di memoria flash che di solito è una specie di logica elettronica che intercetterà un livello logico.

Se vedi una sorta di " Flip-flop " per ogni bit, allora sei un po 'vicino, e quindi abbiamo bisogno di molti di questi. Qui iniziamo a trovare i tuoi e gli zeri.

Quindi, affinché si verifichi qualche azione, aggiungiamo una logica interessante che può trasformare un numero in un altro numero (la CPU stessa).

E poi seguiamo il programma un passo alla volta e per sapere dove siamo abbiamo un contatore di programmi (PC). E sposta i numeri indietro e quarta e memorizzandoli in un'altra memoria che è anche una specie di griglia con infradito.

Ma torniamo di nuovo ad un esempio specifico, per capire un po 'meglio la CPU possiamo dare un'occhiata alla ALU e questa immagine semplificata . Dove puoi vedere che quando spostiamo i dati in questo blocco logico e selezioniamo alcune operazioni con i pin OP, otterremo un nuovo risultato in uscita. Che a nostra volta possiamo tornare in qualche posto nella memoria.

E di maledire il tuo ALU nella tua parte della CPU del tuo MCU è molto più complesso di questo, ma funziona con lo stesso principio di base.

A questo punto possiamo vedere qualche circuito logico che fa il "lavoro" da un lato e un po 'di memoria dall'altro lato. E la memoria ha due parti, una per il programma e una per i dati. Ma come possiamo realmente "spostarci", questi devono essere collegati in qualche modo ...

Ed è qui che colleghiamo quelle parti con un autobus.

Un bus è solo alcuni fili che collegano insieme le diverse parti, quindi la logica di controllo dice alla memoria quali dati inviare su questo bus e quale parte della CPU dovrebbe ascoltare questi dati che sono stati inviati. E questo viene fatto con alcune linee di controllo parallele che abiliteranno / disabiliteranno le diverse parti.

...


Quindi se prendi il tuo mcu preferito e sezionate un programma molto piccolo, e fintanto che non capite cosa sta succedendo, lo sezionate ancora di più fino a quando non avete un simpatico puzzle che può essere usato per creare un "mcu".

E non dimenticare di leggere la scheda tecnica della tua mcu e di esaminare con che tipo di parti è stata realizzata, come che tipo di memoria, alluminio, bus ecc. Ecc.

Spero che questo aiuti un po '???

In bocca al lupo


la tua strategia di spiegarlo suddividendo le istruzioni ha reso tutto molto semplice .. grazie ..
VV Rao

2

Non hai davvero bisogno di sapere queste cose a meno che tu non stia progettando tu stesso le CPU, ma tutto si riduce a un'enorme macchina a stati implementata nell'hardware.

Il problema più grande con questo tipo di domanda è che la risposta è enorme e occupa diversi anni di corsi universitari, quindi qualsiasi risposta che ottieni qui sta solo per graffiare la superficie.

Se vuoi davvero sapere cosa succede in una CPU dai un'occhiata al codice sorgente vhdl / verilog su: http://opencores.org/projects

Imparare solo VHD e Verilog sarà un grande compito da solo, quindi ti aspetta una lunga lettura :)


"enorme macchina da palcoscenico" - sembra una produzione di Broadway.
OIO

Fortunatamente, le risposte che queste persone mi hanno dato non mi fanno graffiare la superficie come hai detto, ma lo hanno reso cristallino .. Comunque, grazie amico ..
VV Rao

2

Voglio dire, questi 1 e 0 vengono convertiti in tensione logica corrispondente (5v e 0) dal DAC?

No, non un DAC. Gli 1 e gli 0 non esistono mai. Sono solo un'astrazione matematica che usiamo per facilitare la programmazione. Le tensioni digitali effettive potrebbero essere 5 V, 3,3 V o 1 V, a seconda dell'hardware. In definitiva un computer è solo una logica digitale. La memoria memorizza gli 1 e gli 0 come logica digitale, un circuito logico digitale li trasferisce dalla memoria al processore, il processore è un circuito logico digitale che può aggiungere, sottrarre o confrontare numeri binari, ecc.

come funziona questo piccolo pezzo di silice

Il silico a è un vetro, una miscela di silicio e ossigeno. Chip sono realizzati in pura silic su , con impurità aggiunte in luoghi specifici di rendere tutti i transistori.

Capisco che ogni singolo circuito integrato è costituito da porte logiche

I circuiti integrati digitali sono costituiti da porte logiche, non da circuiti integrati analogici.

Quindi, in che modo questi transistor rispondono a varie combinazioni di 5v e 0v?

Leggi l'esempio più semplice, l' inverter CMOS .


Hai spiegato che il DAC non è usato, 1 e 0 sono solo astrazioni matematiche che usiamo per facilitare la programmazione. Puoi aggiungere qualche dettaglio in più su questo con riferimento a "Compilatore"? il compilatore converte il linguaggio di alto livello in 1 e 0. Hai detto che questi 1 e 0 sono archiviati in memoria come logica digitale, un circuito logico digitale li trasferisce dalla memoria al processore. Qual è il nome del dispositivo che svolge questa funzione ? E ancora, l'ingresso del processore sarà 5v o 0v. Quindi quale dispositivo converte 1 e 0 dalla memoria (in realtà dal compilatore) in 5v e 0v?
VV Rao,

1
@Vicky: non c'è conversione da "1" a 5 V. "1" e "0" sono solo etichette che diamo ad alta e bassa tensione quando si fa matematica con numeri binari. Per una semplice logica di basso livello che non funziona su numeri binari, è più comune chiamarli "H" (alto) e "L" (basso).
endolith il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.