FUNCTIONALITY.md 7,4 КБ
Newer Older
Зунин Владимир Викторович's avatar
Зунин Владимир Викторович включено в состав коммита
1
2
3
4
5
6
7
8
# CircuitGen Graph — описание функционала

**Репозиторий:** [CircuitGen_Graph](https://hub.mos.ru/circuitgen/CircuitGen_Graph)  
**CMake-проект:** `CircuitGenGraph`  
**Роль в экосистеме CircuitGen:** базовая C++-библиотека представления цифровых схем в виде ориентированного графа и экспорта/импорта в обменные форматы.

## Назначение

9
Graph — это ядро модели данных для генерации и анализа цифровых схем. Библиотека описывает схему как **ориентированный граф** (`OrientedGraph`): вершины — элементы схемы (входы, выходы, константы, логические вентили, последовательностные ячейки, подграфы), ребра — связи между ними. На этой модели строятся генераторы из репозитория **Generator**, а также внешние инструменты оптимизации и физического синтеза из **Parameters**.
Зунин Владимир Викторович's avatar
Зунин Владимир Викторович включено в состав коммита
10
11
12
13
14
15
16

## Основные возможности

### Модель графа

- Создание и изменение графа: добавление вершин, связей, иерархических **подграфов** (`subGraph`).
- Классификация вершин по типам (`VertexTypes`): вход/выход, константа, вентиль (`Gates`), последовательностная логика, шина, подграф.
17
18
- Поддержка **комбинационной** и **последовательной** логики (триггеры, защелки; см. [Sequential.md](Sequential.md)).
- Обновление уровней (топологическая глубина), подсчет вентилей и ребер, хеширование структуры графа.
Зунин Владимир Викторович's avatar
Зунин Владимир Викторович включено в состав коммита
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
- Управление памятью и контекстом через `GraphMemory`, вспомогательные утилиты в `GraphUtils`.

### Экспорт и визуализация

- **Verilog** — генерация RTL-описания схемы и иерархических модулей (`toVerilog`).
- **DOT** — вывод для Graphviz (`toDOT`).
- **GraphML** — обмен с внешними редакторами графов (используется в связке с Generator).
- Параметры модулей Verilog для подграфов: разбор и сохранение `parameter` / `localparam` при привязке внешнего Verilog-файла к вершине подграфа.

### Импорт

- **Чтение Verilog** в граф через парсер **lorina** (`GraphReader`, подмодуль `lib/lorina`).
- Контекст разбора нескольких модулей (`Context`) для иерархических описаний.
- Подробнее: репозиторий [Lorina](https://hub.mos.ru/circuitgen/lorina), [docs/ru/FUNCTIONALITY.md](https://hub.mos.ru/circuitgen/lorina/-/blob/main/docs/ru/FUNCTIONALITY.md).

### Симуляция на уровне графа

- Таблицы истинности для логических операций (`enums.hpp`, `Gates`).
- Обновление значений на вершинах для проверки поведения комбинационных фрагментов.

### Генерация тестбенчей

- API `TestbenchGenerator` — автоматическое построение Verilog testbench для верификации схем (комбинационные и частично последовательные сценарии).
- Примеры и тесты с **Icarus Verilog** (`iverilog` / `vvp`).

### Логирование

46
- Макросы `CG_LOG_*` поверх **easylogging++** (или заглушки при отключенном логировании).
Зунин Владимир Викторович's avatar
Зунин Владимир Викторович включено в состав коммита
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
- Инициализация через `OrientedGraph::initLogging`.

## Публичный API (ключевые заголовки)

| Заголовок | Назначение |
|-----------|------------|
| `OrientedGraph.hpp` | Главный класс графа, экспорт, иерархия |
| `GraphVertex*.hpp` | Типы вершин (вход, выход, вентиль, sequential, subgraph, …) |
| `GraphReader.hpp` | Импорт Verilog |
| `TestbenchGenerator.hpp` | Генерация testbench |
| `GraphUtils.hpp`, `enums.hpp` | Утилиты, перечисления, таблицы истинности |
| `Logging.hpp` | Логирование |

## Сборка и артефакты

- CMake 3.26+, C++17, пресеты `dev`, `release-ci` и др.
- Статическая/разделяемая библиотека `CircuitGenGraph`, опционально примеры (`examples/`) и тесты (`test/`).
64
- Документация: Doxygen (HTML/PDF, ru/en). Задание CI **`docs`** публикует на общий портал Synology NAS: актуальная ветка **`versions/main/`**, снимки по тегам **`versions/<tag>/`**, слияние `manifest.json` и `versions.json` ([DEPLOY.md](DEPLOY.md)).
Зунин Владимир Викторович's avatar
Зунин Владимир Викторович включено в состав коммита
65
66
67
68
69
70
71
72
73
74
75

## Зависимости

- **lorina** ([circuitgen/lorina](https://hub.mos.ru/circuitgen/lorina), подмодуль `lib/lorina`) — разбор Verilog; Graph использует только Verilog-reader.
- **easylogging++** — журналирование.
- Для документации и CI: Doxygen, LaTeX, Ninja, clang-format, lcov и др. (см. `scripts/setup/install-deps-*.sh`).

## Связь с другими репозиториями

| Репозиторий | Связь |
|-------------|--------|
76
| **Generator** | Создает `std::shared_ptr<OrientedGraph>` разными алгоритмами; сохраняет Verilog/GraphML |
Зунин Владимир Викторович's avatar
Зунин Владимир Викторович включено в состав коммита
77
78
79
80
81
82
83
84
85
86
87
88
89
90
| **Parameters** | Принимает сгенерированный Verilog для Yosys/ABC/OpenLane |
| **CircuitGen** (главный) | Координирует общий workflow проекта |

## Кому полезен этот репозиторий

- Разработчикам генераторов схем, которым нужна единая структура данных и экспорт в Verilog.
- Исследователям, работающим с иерархическими RTL, импортом модулей и автоматической верификацией (testbench).
- Интеграторам EDA-цепочек, подключающим CircuitGen к симуляторам и синтезаторам.

## См. также

- [README.md](../../README.md) — быстрый старт  
- [BUILDING.md](BUILDING.md) — пресеты и CI parity  
- [HACKING.md](HACKING.md) — workflow разработчика  
91
92
93
94
95
96
97
- [Sequential.md](Sequential.md) — последовательностная логика
- [GraphML.md](GraphML.md) — экспорт и ограничения GraphML
- [VerilogImport.md](VerilogImport.md) — импорт Verilog
- [Subgraphs.md](Subgraphs.md) — работа с подграфами
- [TestbenchGenerator.md](TestbenchGenerator.md) — генератор testbench
- [MEMORY_MANAGEMENT.md](MEMORY_MANAGEMENT.md) — управление памятью
- English version: [FUNCTIONALITY.md](../en/FUNCTIONALITY.md)