Skip to content
 

gEDA: Hierarchický návrh

Málokedy sa nám náš návrh zmestí do jednej schémy. Jedným z riešení je hierarchický návrh, ktorý nám umožní rozdelenie schémy na viac nezávislých, logicky prepojených blokov.

Rozdelenie schémy

V tomto prípade sa nejedná o skutočný hierarchický návrh.

Schému rozdelíme na jednotlivé logické funkčné bloky. Jednotlivé funkčné bloky sa umiestnia do samostatných súborov. Prepojenie signálov sa zrealizuje pomocou pomenovaných sietí – pomocou atribútov net alebo netname (viac informácií nájdeme v článku gEDA: Ako pospájať symboly). Pozrime sa na jednoduchý príklad: zapojenie obsahujúce stabilizovaný zdroj, tlačítko a LED budenú tranzistorom:

Modul napájania (m-pwr.sch) Modul tlačítka (m-btn.sch) Modul LED (m-led.sch)

Napájanie je medzi schémami prepojené pomocou atribútu net schovaného v symboloch napájania a zeme, zvyšok pomocou sietí pomenovaných atribútom netname.

Referencie môžeme očíslovať ľubovoľným z nástrojom a ľubovoľne – musíme len dbať na jednoznačné pomenovanie v rámci celého projektu, nielen v rámci jednej schémy. Pri spracovaní sa netlister chová tak, ako by všetky súbory so schémami tvorili jednu veľkú schému. To ostatne platí aj pri pomenovaných sietiach – duplicitné mená by spôsobili nežiadúce prepojenia.

Pri spracovaní netlisterom musíme vymenovať všetky súbory schémy. Napríklad:

gnetlist -g geda m-pwr.sch m-btn.sch m-led.sch

Výstup, ktorý získame:

START nets

NET1 : D201 1, Q201 3
NET3 : R203 2, Q201 1, R202 2
NET2 : D201 2, R201 1
CTL : R202 1, S101 1, R101 2
Vcc : R201 2, S101 2, C302 1, U301 3
GND : Q201 2, R203 1, R101 1, CONN301 2, C302 2, C301 1, U301 2
NET4 : CONN301 1, C301 2, U301 1

END nets

Hierarchický návrh

Pri jednoduchom hierarchickom návrhu predpokladáme, že sa jednotlivé funkčné bloky neopakujú. To zjednodušuje situáciu s duplicitnými referenciami a menami sietí.

Ako prvý krok musíme nastaviť niekoľko parametrov. V adresári projektu vytvoríme súbor gafrc s obsahom:

(component-library "." "Subschemes")
(source-library  ".")

a súbor gnetlistrc s obsahom:

(hierarchy-netattrib-mangle "disabled")
(hierarchy-netname-mangle "disabled")
(hierarchy-uref-mangle "disabled")

Prvý riadok (parameter component-library) v súbore gafrc pridáva náš pracovný adresár do zoznamu knižníc. Tento parameter je potrebný, aby sme našli symboly, ktoré vytvoríme pre funkčné bloky. Druhý riadok (parameter source-library) určuje, v ktorom adresári sa budú nachádzať schémy popisujúce funkčné bloky.

Tri riadky v súbore gnetlistrc určujú, ako sa majú modifikovať referenčné označenia súčiastok a mená sietí v podschémach. My zatiaľ túto možnosť nepotrebujeme využiť, takže akékoľvek modifikácie zakážeme (implicitne sú niektoré z nich povolené).

Hierarchický návrh začneme návrhom symbolov pre funkčné bloky. Takýto symbol je obvykle obdĺžnik s niekoľkými pinmi. Pri návrhu symbolu je dobré dodržať pravidlá publikované v článku gEDA: Tvorba symbolov pre gEDA Symbol pre funkčný blok musí obsahovať nasledovné atribúty:

  • refdes – referenčné označenie, najčastejšie v tvare S?
  • source – názov súboru so schémou. Konvencia je, že súbor so schémou má rovnaké meno ako symbol, líši sa iba koncovkou. Tento atribút obsahuje iba meno súboru so schémou, neobsahuje cestu. Cesta, kde sa súbory so schémou hľadajú je špecifikovaná konfiguračným parametrom source-library
  • device – atribút má hodnotu none (devíce=none)

Druhým krokom je návrh obsahu funkčného bloku – schéma. Najdôležitejším bodom pri návrhu schémy je zabezpečenie prepojenia s pinmi príslušného symbolu bloku.

Väzba medzi symbolom a schémou je definovaná pomocou atribútu source. Tento atribút definuje súbor, obsahujúci schému. Prepojenie s pinmi symbolu bloku realizujeme nasledovne:

  • ku všetkým signálom, ktoré majú byť vyvedené na piny symbolu bloku pripojíme symbol terminálu – takýto symbol musí obsahovať práve jeden pin a nesmie to byť iba grafický symbol
  • k symbolu terminálu pripojíme referenčné označenie (atribút refdes) s rovnakým názvom ako má pin v symbole bloku (atribút pinlabel)

Jednoducho povedané, pomenovaný pin v symbole bloku sa prepojí s terminálom v schéme bloku s referenčným označením zhodným s menom pinu.

V žiadnom prípade sa nepokúšajme prepájať piny symbolu bloku s nejakou reálnou súčiastkou. Pri spracovaní bude táto súčiastka odstránená. Preto vždy treba použiť symbol terminálu.

Treba si uvedomiť, že pomenované siete (či už atribútom net alebo atribútom netname) zabezpečujú prepojenie sietí aj v prípade hierarchického návrhu. Preto treba dávať pozor na duplicitu. Na druhej strane táto vlastnosť nám umožní prepojiť napájanie v blokoch bez potreby vyviesť ho na piny symbolu.

Prepracujme náš príklad s LED a tlačítkom do hierarchickej podoby. Na obrázku vidíme schému skladajúcu sa z blokov. Atribút source je pre názornosť viditeľný, v reálnom živote môže byť schovaný. Napájanie je vyvedené iba z bloku napájacieho zdroja a je pripojené na siete Vcc a GND. V ostatných blokoch je napájanie pripojené prostredníctvom pomenovaných sietí (atribútom net).

A čo sa skrýva v jednotlivých blokoch:

Modul napájania (s-pwr.sch) Modul tlačítka (s-btn.sch) Modul LED (s-led.sch)

Pri spracovaní netlisterom stačí uviesť súbor s hlavnou schémou. Schémy funkčných blokov sa načítajú automaticky. Napríklad:

gnetlist -g geda leds1.sch

Výstup, ktorý získame:

START nets

TOP2 : C301 2, U301 1, CONN1 1
NET1 : D201 1, Q201 3
NET3 : R203 2, Q201 1, R202 2
NET2 : D201 2, R201 1
Vcc : C302 1, U301 3, R201 2, S101 2
GND : C302 2, C301 1, U301 2, CONN1 2, R203 1, Q201 2, R101 1
TOP1 : R202 1, S101 1, R101 2

END nets

Hierarchický návrh môže byť viacstupňový. Takisto môžeme kombinovať obidva vymenované prístupy – rozdelené schémy a hierarchický návrh. gEDA je v tomto pomerne flexibilný systém.

Hierarchický návrh s opakovanými blokmi

Pokiaľ chceme niektorý funkčný blok opakovať, narazíme na jeden problém – vo výslednom návrhu sa nám budú opakovať referenčné označenia súčiastok prípadne názvy sietí. To by malo samozrejme katastrofálne následky – opakované funkčné bloky by boli nežiadúcim spôsobom navzájom poprepájané.

Našťastie gEDA ponúka jednoduchú metódu ako tieto konflikty vyrešiť. Netlister pri spracovaní dokáže modifikovať referenčné označenia a názvy sietí tak, že tieto označenia skombinuje s referenčným označením bloku. Takže ak máme opakovaný funkčný blok obsahujúci odpor R1, výsledné referenčné označenia budú napríklad S1/R1 a S2/R1.

Vráťme sa ku konfiguračnému súboru gnetlistrc. Aby sme povolili modifikáciu referenčných označení a názvov sietí, trochu ho upravíme:

(hierarchy-netattrib-mangle "disabled")
(hierarchy-netname-mangle "enabled")
(hierarchy-uref-mangle "enabled")

Prvý parameter – hierarchy-netattrib-mangle – určuje, či sa má modifikovať názov sietí definovaných pomocou atribútu net. Obvykle sa tieto siete ponechávajú bez zmeny – to nám umožňuje rozvádzať napájanie a zem aj do schém funkčných blokov pomocou pomenovaných sietí.

Druhý parameter – hierarchy-netname-mangle – určuje či sa má modifikovať názov sietí definovaných pomocou atribútu netname. Premenovanie týchto sietí sa musí povoliť, inak sa nám navzájom poprepájajú opakované funkčné bloky.

Posledný parameter – hierarchy-uref-mangle – určuje, či sa premenúvajú referenčné označenia súčiastok. Premenovávanie referenčných označení sa takisto musí povoliť, inak dostaneme viac súčiastok s rovnakým referenčným označením, čo spôsobí nepredvídateľne poprepájanie signálov v rámci opakovaných funkčných blokov.

Rozšírme náš predošlý príklad o ďalšiu LED s tlačítkom:

a spracujme ho pomocou netlistera:

gnetlist -g geda leds2.sch

Výstup, ktorý získame, obsahuje modifikované referenčné označenia a názvy sietí (definované atribútom netname), zatiaľ čo napájanie (definované atribútom net) ostalo bez zmeny:

START nets

S5/NET1 : S5/D201 1, S5/Q201 3
S5/NET3 : S5/R203 2, S5/Q201 1, S5/R202 2
S5/NET2 : S5/D201 2, S5/R201 1
TOP3 : S5/R202 1, S4/S101 1, S4/R101 2
TOP2 : S3/C301 2, S3/U301 1, CONN1 1
S2/NET1 : S2/D201 1, S2/Q201 3
S2/NET3 : S2/R203 2, S2/Q201 1, S2/R202 2
S2/NET2 : S2/D201 2, S2/R201 1
Vcc : S5/R201 2, S4/S101 2, S3/C302 1, S3/U301 3, S2/R201 2, S1/S101 2
GND : S5/R203 1, S5/Q201 2, S4/R101 1, S3/C302 2, S3/C301 1, S3/U301 2, CONN1 2, S2/R203 1, S2/Q201 2, S1/R101 1
TOP1 : S2/R202 1, S1/S101 1, S1/R101 2

END nets

Na záver si pozrime ďalšie parametre, ktorými môžeme ovplyvniť spracovanie hierarchického návrhu. Všetky parametre sa musia nachádzať v súbore gnetlistrc.

(hierarchy-traversal "enabled")
(hierarchy-uref-separator "/")
(hierarchy-netname-separator "/")
(hierarchy-netattrib-separator "/")
(hierarchy-uref-order "append")
(hierarchy-netname-order "append")
(hierarchy-netattrib-order "append")

Parameter hierarchy-traversal určuje, či sa má hierarchická štruktúra spracovávať. Nastavením na hodnotu disabled sa spracovanie hierarchie zakáže – čo bude výsledkom, netuším.

Parametre hierarchy-uref-separator, hierarchy-netname-separator a hierarchy-netattrib-separator definujú oddeľovač, ktorým bude oddelené referenčné označenie alebo meno siete (definované atributmi netname respektíve net) od názvu bloku.

Posledná skupina parametrov – hierarchy-uref-order, hierarchy-netname-order a hierarchy-netattrib-order – určuje, či referenčné označenie alebo meno siete (definované atribútom netname respektíve net) bude pripojené za názov bloku (napr. S1/R1) alebo pred názov bloku (R1/S1). Preddefinovanné je pripojenie za názov bloku (parameter má hodnotu append). Nastavením parametra na hodnotu prepend dosiahneme pripájanie pred názov bloku.

V prílohe sa nachádzajú všetky tri príklady, použité v tomto článku.

 

Print Friendly, PDF & Email
2 716 zobrazení