Logické obvody #

Kombinačné obvody #

Pred kreslením logických obvodov musíme inicializovať knižnicu makier log_init. Pretože hradlá kombinačných logických obvodov môžu mať niekoľko vstupov, makrá obsahujú parameter n, ktorým definujeme počet ich vstupov.

AND_gate (n, [N][B], [wid, [ht]])
OR_gate  (n, [N][B], [wid, [ht]])
NOR_gate (n, [N|B],, [wid, [ht]])
NAND_gate(n, [N][B], [wid, [ht]])
NXOR_gate(n, N,      [wid, [ht]])

parametre:
  
    n   - počet vstupov hradla
    N   - negované vstupy
    B   - zobrazenie hradla ako bloku podľa IEEE Standard 91-1984
    wid - šírka 
    ht  - výška
    
atribúty:

    In1 ... InN  - poloha vstupov
    Out          - poloha výstupu
    N_Out        - poloha stredu negovaneho vystupu (kružnice)

Hradlá s jedným vstupom

NOT_gate(linespec,[B][N|n],wid,height, attributes)
BUFFER_gate(linespec, [N|B], wid, ht, [N|P]*, [N|P]*, [N|P]*, attributes)

parametre:

    linespec - dĺžka a umiestnenie rezistora
    N        - negovaný vstup 
    B        - zobrazenie ako bloku podľa IEEE Standard 91-1984
    n        - (písmeno) výmena negácie z výstupu na vstupe (pri NOT)
    wid      - šírka 
    ht       - výška

Pri kreslení logických obvodov je vhodné najskôr porozkladať hradlá po ploche a potom ich postupne prepájať. Na zjednodušenie prepojenia vývodov hradiel môžeme použiť jednoduché makro conn() s dvoma parametrami - súradnicami koncových bodov prepojenia.

define(`conn', `
    line from $1 left_ (($1 - $2)/2).x;
    line up_ to (Here.x, $2.y) then to $2;
')

Zapojenie jednoduchého multiplexera

G1: AND_gate(2) at (5, 2); "\sf G1" at G1.n above;
G2: AND_gate(2) at (5, 0.5); "\sf G2" at G2.n above;
G3: OR_gate(2) at (7, (G1.c.y + G2.c.y)/2 ); "\sf G3" at G3.n above;
G4: NOT_gate() at (3.5, 2.5); "\sf G4" at G4.n above;
    conn(G3.In1, G1.Out)
    conn(G3.In2, G2.Out)
    conn(G1.In1, G4.Out)

    line from G4.In1 left_ 0.35; DT: dot; line left_ 0.5; "\sf Q" at last line.end rjust;
    line from G1.In2 to (LL.end.x, G1.In2.y); "\sf D1" at last line.end rjust; 
    line from G2.In2 to (LL.end.x, G2.In2.y); "\sf D0" at last line.end rjust;  
    line from G2.In1 to (DT.x, G2.In1.y) then to DT;
    line from G3.Out right_ 1;  "\sf Y" at last line.end ljust;
_images/cm_0206a.png

Obr. 78 Zapojenie multiplexera#

Sekvenčné obvody #