Logické obvody #

Kombinačné obvody #

Pred kreslením logických obvodov musíme inicializovať knižnicu makier log_init. Knižnica obsahuje makrá pre kreslenie základných kombinačných a sekvenčných obvodov. Hradlá kombinačných logických obvodov môžu mať niekoľko vstupov, ich počet definujeme pomocou parametra n.

     AND_gate(3)    NAND_gate(3)    OR_gate(2)    NOR_gate(3)    NXOR_gate(2)
                            NOT_gate()                     BUFFER_gate()

Zobrazenie hradiel kombinačné logických obvodov s variabilným počtom vstupov (and, nand, or, nor, xor), Obr. 102:

_images/cm_0206k.png

Obr. 102 Hradlá kombinačných logických obvodov.#

Definície makier pre hradlá s n vstupmi:

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)

Definície makier pre hradlá s jedným vstupom (invertor, buffer):

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
    
atribúty:

    ak je definovaný parameter linespec, hradlá majú atribúty 
    ako dvojpóly (.start, .centre, .end), inak
    
    In1      - poloha vstupu
    Out      - poloha výstupu
    C        - stred hradla
    NE       - prívod napájania (VCC) 
    SE       - prívod napájania (GND)

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, ktoré sú súradnicami koncových bodov prepojenia. Zapojenie jednoduchého multiplexera je na obrázku Obr. 103:

define(`conn', `
        line from $1 left_ (($1 - $2)/2).x;
        line up_ to (Here.x, $2.y) then to $2;
    ')
    
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. 103 Zapojenie multiplexera#

Sekvenčné obvody #

Základné typy sekvenčných obvodov (D, T, RS, JK) sú definované pomocou makra FlipFlop(), Obr. 104:

    FlipFlop(D,Q1)    FlipFlop(T,Q2)    FlipFlop(RS,Q3)    FlipFlop(JK)
_images/cm_0206m.png

Obr. 104 Zobrazenie typických sekvenčných obvodov.#

Definícia makra FlipFlop() má tvar:

FlipFlop(type, label, boxspec, pinlength)

parametre:

    type      - typ obvodu D|T|RS|JK 
    label     - označenie obvodu
    boxspec   - parametre značky ako pre box 
    pinlength - dĺžka pinu

atribúty:

    podľa mena pinu .D .CK .Q .NQ .R .S .J .K .PR .CLR

Pre vytváranie vlastných značiek obvodov môžeme použiť makrá popísané v kapitole Integrované obvody alebo makro FlipFlopX(), podrobný popis je v dokumentácii. Na obrázku Obr. 105 je zobrazené použitie nového makra JK93() v zapojení zobrazujúcom vnútornú štruktúru časovača 7493:

# JK obvod v strukture citaca 7493
define(`JK93', `[
BX:box wid 1.5 ht 6*lg_pinsep;
    lg_pin(BX.nw - (0, 1*lg_pinsep), J,  PinJ,   w,  ,0);
    lg_pin(BX.nw - (0, 3*lg_pinsep), CK, PinCK, wEN,,0);
    lg_pin(BX.nw - (0, 5*lg_pinsep), K,  PinK,   w,  ,0);
    lg_pin(BX.ne - (0, 3*lg_pinsep), Q,  PinQ,   e,  ,0);
    lg_pin(BX.s ,                    R,  PinR,  sN,  ,0 )
]')
_images/cm_0206n.png

Obr. 105 Vnútorné zapojenie čitača 7493 podľa TI (TODO-ODKAZ).#

Zbernice #

Digitálne systémy vo svojej architektúre často využívajú hierarchické usporiadanie obvodov do skupín zdielajúcich spoločný komunikačný systém, zbernicu. Rozkreslenie zbernice na jednotlivé vodiče môže byť niekedy neprehľadné, tak ako to ukazuje obrázok Obr. 106.

_images/img_0206c.png

Obr. 106 Blokové zapojenie SPI zbernice v režime MDP (Multidrop).#

Použitím zberníc môžeme celé zapojenie zjednodušiť a sprehladniť, Obr. 107.

_images/img_0206d.png

Obr. 107 Zapojenie SPI rozhrania pomocou vykreslenia zbernice.#

Zbernice môžeme pripájať k obvodom pomocou konektorov definovaných makrami v súbore lib_bus.ckt. Parametrom makier je počet vodičov zbernice, pomocou ďaľších makier môžeme popisovať jednotlivé vetvy zbernice ako aj ziskať referenciu na koniec každej vetvy, Obr. 108.

_images/img_0206e.png

Obr. 108 Makrá pre kreslenie pripojenia zbernice k obvodu.#

Každý konektor zbernice má vetvy číslované od začiatku zbernice. Číslovanie vetiev je nezávislé od číslovania pinov pripojeného obvodu. Definícia makier pre pripojenie zbernice k obvodu má tvar:

bus_dl(n,d)  - makra pre pripajanie zbernice k obvodom 
bus_dr(n,d)
bus_ul(n,d)
bus_ur(n,d)

parametre:
    n        - počet vetiev
    d        - dĺžka vetvy

atribúty:
    REF     - poloha referenčného pinu č.1
    START   - začiatok zbernice
    END     - koniec zbernice
    DOC     - pozícia pre popisovanie zbernice

Pomocné makrá pre popis zbernice, polohu koncového bodu vetvy majú tvar:

bus_txl(bus, text, pin) - makrá pre popis vetvy zbernice, zarovnanie doľava
bus_txr(bus, text, pin) - zarovnanie doprava
bus_ref(bus, pin)       - poloha koncovej vetvy zbernice 
bus_conn(bus1, bus2)    - spojenie zberníc úsečkou

parametre:
    bus     - referencia na zbernicu
    text    - popis, bez úvodzoviek
    pin     - čislo pinu zbernice

Pri pripájaní zberníc k obvodu využijeme konštrukciu with … at …. Koniec prvej vetvy konektoru je prístupný pod atribútom REF, ktorý pripojíme k zvolenému pinu obvodu, Obr. 109:

IC: IC74138(); "74138" at IC.s below; 
B1: bus_dl(3) with .REF at IC.Pin3;
B2: bus_ur(3) with.END at B1.END+(0,-1)
    bus_conn(B1,B2)

    line left_ 1 from bus_ref(B2,1); tbox(A,,lg_pinsep,<>)
    line left_ 1 from bus_ref(B2,2); tbox(B,,lg_pinsep,<>)
    line left_ 1 from bus_ref(B2,3); tbox(C,,lg_pinsep,<>)
_images/img_0206f.png

Obr. 109 Pripojenie zbernice k obvodu. ``#