# 5 Datová základna

Centrálním pojmem popisu je entita (1.2.2, 1.2.3). Jádro se dělí na

- část, která entity organizuje (vrchní vrstva),

- část strukturního popisu entit

- část popisu entit chováním

## 5.1.1 Vazby

Vlastnictví - vytváření a rušení
Třída V, která drží objekty jiné třídy T ve jmenném nebo číselném prostoru, tyto objekty zároveň vytváří a ruší. Jestliže vytváření má jednoznačný výsledek, identifikátor obsahuje `Create`, jestliže zahrnuje heuristiku `Synth(esize)`. Vytváření objektů je často kombinováno s hledáním do metod `FindOrCreate`. Zpětná vazba od T k U má zpravidla identifikátor `parent.` Grafické znázornění těchto vazeb je u jednotlivých skupin tříd.
Originál
Jestliže objekt třídy B reprezentuje "otisk" něčeho, co je reprezentováno objektem třídy A, pak objekt třídy A nazýváme originálem objektu třídy B.

## 5.1.2 Vrchní vrstva

Vazby
Entita a prototyp rozhraní
Entita (1.2.1) reprezentuje typ bloku. Je reprezentována třídou Entity. Je pojmenována. Informace o typu bloku jsou obsaženy

- v jedné či více architekturách (třída Architecture), které tvoří alternativní popisy vnitřku bloku a to buď chováním nebo strukturou,

- v definici rozhraní entity (třída InterfaceProto).

Architektury jsou uloženy ve jmenném prostoru entity a třída vykonává funkce z toho plynoucí. Kromě toho vytváří objekty třídy Architecture i s příslušnými objekty implementace architektury (následníci třídy ArchImpl). Třída má metody pro hledání a vytváření jednotlivých portů uvnitř rozhraní.

Prototyp portu
Prototyp portu je reprezentován třídou PortProto. Má jméno i číslo (1.2.4). Jeho další hlavní hlavní funkcí je nést otevřenou množinu binárních atributů (3.1.2.3) prototypu portu. Třída `PortProto` parametrizuje šablony `AttrIndex` a `AttrSet` a exportuje jejich typy pod jednoduššími identifikátory. Třída sama definuje dvě vlastnosti - vstup (input) a výstup (output). Pro snazší nastavení a srovnání definuje množiny, které odpovídají všem kombinacím těchto binárních atributů.

Architektura
Architektura je reprezentována třídou Architecture. Má jméno. Protože je třeba za provozu měnit typ architektury (dodatečná definice externí architektury (1.2.2) ), je použit idiom pimpl (pointer to implementation). Informace, která závisí na typu popisu, je obsažena v implementačních objektech. Interface těchto objektů tvoří abstraktní třída ArchImpl.

Třída ArchImpl parametrizuje šablony AttrIndex a AttrSet a exportuje jejich typy pod jednoduššími identifikátory. Nese otevřenou množinu binárních atributů (3.1.2.3) implementace architektury.

Knihovna
Knihovna je pojmenována a reprezentována třídou Library. Knihovna má dvěorganizační funkce:

- vlastní entity ve svém jmenném prostoru, s funkcemi, které z toho vyplývají

- poskytuje konfigurovatelnou sestavu heuristik pro funkce jako je rozpoznávání funkce podle jmen atd.

Všechny popisy entit jsou na stejné úrovni, není možno mít lokální popisy vnořené do popisu jiné entity.

Kromě základního hledání ve jmenném prostoru podle jména knihovna poskytuje možnost hledat podle chování (funkce).

Návrh
Návrh je pojmenovaná reference na entitu. Je reprezentován třídou Design.

Hub
Celá datová struktura má kořen v objektu třídy Hub. Je pravděpodobné, že objekt této třídy bude v každé aplikaci vždy jeden, ale není to nutné. Hub vlastní ve svých jmenných prostorech knihovny a návrhy a provádí funkce, které z toho vyplývají.

Určení místa v hubu
Importovaný popis obvodu popisuje (1.2.2) různé objekty, od strukturní architektury entity (např. Bench) po kompletní strukturu knihoven a návrhů (EDIF). Pro operace importu, exportu a rušení je zapotřebí ukázat na knihovnu, entitu, architekturu podle okolností. Takovým sjednoceným odkazem je objekt třídy Location, který se dá zkonstruovat z posloupnosti jmen knihovny, entity, architektury. Tato jména jsou shrnuta v objektu třídy LocationNames.

## 5.1.3 Strukturní popis

Vazby
Strukturní popis architektury se skládá z instancí entit a spojů, které propojují porty instancí mezi sebou a s prototypy portů v rozhraní popisované entity. Implementace hubu realizuje poslední vlastnost tak, že architektura má vlastní rozhraní s porty (nikoli prototypy portů), které slouží jako zástupná místa rozhraní entity.

Spoj
Spoj je pojmenovaná množina odkazů na porty, reprezentovaná třídou Net. Množina je implementována seznamem a třída exportuje jeho iterátor.

Instance a rozhraní instance
Instance má jméno, je reprezentována třidou Instance. Nese následující hlavní informace:

- číselný prostor portů instance (třída Interface)

- odkaz na aktuálně nakonfigurovanou architekturu

- jmenný prostor dvojic jméno-hodnota, které zobrazují vlastnosti z EDIFu (třída `Property`) - provizorium

Obsahuje metody pro hledání portu podle čísla a jména.

Port instance a port strukturní architektury
Oba tyto druhy portů jsou v podstatě jen odkazy na svúj prototyp a veškeré metody na něj delegují, včetně operací nad množinou binárních atributů. Liší se pouze v typu odkazu na vlastnický objekt (5.1.1) a proto jsou implementovány šablonou `Port`. Protože spoj odkazuje na objekty různých tříd, dědí všechny instance šablony třídu `Joinable`.

Vazba popisu spoje na popis entity
Algoritmy, pracující nad strukturním popisem potřebují traverzovat spoje jak směrem ze strukturního popisu entity do strukturního popisu instance (podbloku), tak zpět. Protože je nepohodlné držet u každé entity seznam jejích instancí, slouží k této traverzaci číslo portu. Traverzace pak probíhá takto:
spoj - port instance (- číslo portu instance) - instance - strukturní architektura entity - rozhraní entity - port strukturní architektury podle čísla.

## 5.1.4 Popis chování

Vazby
Kombinační obvod
Symetrický kombinační obvod s 1 výstupem - hradlo

## 5.1.5 Přehled modulů

## 5.1.6 Přehled registračních bodů a konstant