-
Notifications
You must be signed in to change notification settings - Fork 18
Кастомный контрол EntityBox
EntityBox ("ящик с сущностями") является ключевым компонентом для всех наших утилит.
Данный контрол представляет собой контейнер бесконечного размера, в котором содержатся различные "сущности" (entity).
Конкретно для целей реверса микросхем набор сущностей подобран таким образом, чтобы они соответствовали основным компонентам архитектуры микросхем:
- Провода (Wires)
- Виасы (Vias)
- Стандартные ячейки различных классов (Cells)
В дальнейшем италиком будут отмечены свойства EntityBox.
Все измерения внутри EntityBox производятся в единицах измерения - лямбда.
В цифровой электроника за 1 единицу лямбда принято считать самую мелкую деталь микросхемы, на которую способен технически процесс её изготовления (обычно это ширина затвора транзистора).
EntityBox содержит свойство Lambda, которое задает количество пикселей экрана, соответствующее 1 единице лямбда. Так как это свойство имеет тип float, можно задавать нецелое число пикселей. Хотя обычно значение Lambda = 5.0
Типы определены в EntityBox.cs (enum EntityType).
Специальные типы:
- Root: корень всех сущностей
- Directory: специальная сущность, которая является контейнером для остальных дочерних сущностей
- Beacon: маяк для быстрой навигации по слою сущностей
- Region: регион произвольной формы
Виасы:
- ViasOutput: выходной контакт
- ViasInout: двунаправленный контакт
- ViasConnect: виас соединяющий два провода
- ViasFloating: виас не соединенный ни с чем ("плавающий")
- ViasPower: соединяет с питанием (1)
- ViasGround: соединяет с землей (0)
Провода:
- WireInterconnect: обычный соединительный провод
- WirePower: провод для питания
- WireGround: провода для земли
Стандартные ячейки:
- CellNot: инвертор
- CellBuffer: усилтельный буфер
- CellMux: мультиплексор
- CellLogic: логический элемент (NAND, NOR итп)
- CellAdder: элемент ALU
- CellBusSupp: вспмогательные ячейки тип BusKeeper
- CellFlipFlop: триггеры по фронту (например DFF)
- CellLatch: триггеры по уровню ("защелки")
- CellOther: прочие ячейки
Кастомные блоки:
- UnitRegfile: регистровый файл
- UnitMemory: память или другие подобные блоки (например для хранения параметров)
- UnitCustom: прочие блоки
Все свойства собраны в EntityBox.cs
- UserData: данные произвольного содержания (int)
- Label: текстовая пометка которая отображается рядом с сущностью
- LabelAlignment: выравнивание текстовой пометки
- LambdaWidth: ширина сущности в лямбдах
- LambdaHeight: высота сущности в лямбдах
- LambdaX: координата X на плоскости сущностей
- LambdaY: координата Y на плоскости сущностей
- LambdaEndX: конечная координата X (наример для Wire) на плоскости сущностей
- LambdaEndY: конечная координата Y (наример для Wire) на плоскости сущностей
- Type: тип сущности (EntityType)
- Selected: пометка что сущность является выделенной
- Priority: приоритет сущности. Влияет на последовательность отрисовки: сущности с большим приоритетом рисуются поверх сущностей с более низким приоритетом
- PathPoints: набор координат для сущности типа Region
- Children: список дочерних сущностей
- Visible: определяет видимость сущности. Если сущность невидима, то все дочерние сущности также невидимы
- ColorOverride: используется для персонального задания цвета сущности, отличного от общего цвета для данных типов сущностей
- FontOverride: используется для персонального задания шрифта для пометки сущности (Label), отличного от общего шрифта контрола
- WidthOverride: используется для переопределения ширины сущности, отличной от настроек ширина данного типа сущностей
Вспомогательные свойства (только для чтения):
- WireLengthLambda: возвращает длину провода в лямбдах
- WireTangent: возвращает наклон провода
Вспомогательные методы:
- SetParentControl: позволяет задать родительский контрол. Используется при авто-обновлении контрола, после изменения свойств сущности
- IsWire: проверить является ли сущность одним из типов проводов (Wire)
- IsVias: проверить является ли сущность одним из типов виасов (Vias)
- IsCell: проверить является ли сущность одним из типов стандартных ячеек (Cell)
- IsRegion: проверить является ли сущность регионом
Режим работы (свойство Mode) определяет способ взаимодействия с пользователем посредством клавиатуры и мыши.
Список режимов (enum EntityMode):
- Selection: выбран слой с сущностями для их выделения и перемещения
- ImageLayer0: выбран слой картинок 0 (самый верхний слой картинок)
- ImageLayer1: выбран слой картинок 1
- ImageLayer2: выбран слой картинок 2
- ViasInput: режим добавления сущностей ViasInput
- ViasOutput: режим добавления сущностей ViasOutput
- ViasInout: режим добавления сущностей ViasInout
- ViasConnect: режим добавления сущностей ViasConnect
- ViasFloating: режим добавления сущностей ViasFloating
- ViasPower: режим добавления сущностей ViasPower
- ViasGround: режим добавления сущностей ViasGround
- WireInterconnect: режим добавления сущностей WireInterconnect
- WirePower: режим добавления сущностей WirePower
- WireGround: режим добавления сущностей WireGround
- CellNot: режим добавления сущностей CellNot
- CellBuffer: режим добавления сущностей CellBuffer
- CellMux: режим добавления сущностей CellMux
- CellLogic: режим добавления сущностей CellLogic
- CellAdder: режим добавления сущностей CellAdder
- CellBusSupp: режим добавления сущностей CellBusSupp
- CellFlipFlop: режим добавления сущностей CellFlipFlop
- CellLatch: режим добавления сущностей CellLatch
- CellOther: режим добавления сущностей CellOther
- UnitRegfile: режим добавления сущностей UnitRegfile
- UnitMemory: режим добавления сущностей UnitMemory
- UnitCustom: режим добавления сущностей UnitCustom
- Beacon: режим добавления сущностей Beacon
EntityBox содержит несколько слоев отображения
- Слой с сущностями. Слой с сущностями размещается над слоями картинок.
- 3 слоя для хранения картинок (микросхем). Слой 0 является самым верхним из слоев картинок.
Для слоев картинок можно менять прозрачность (ImageOpacity).
Также для слоев картинок можно запретить их перемещение (LockScroll) и зум (LockZoom). Сделано это в целях предотвращения случайного перемещения и зума.