Skip to content

Кастомный контрол EntityBox

ogamespec edited this page Jun 12, 2019 · 22 revisions

Кастомный контрол EntityBox

EntityBox ("ящик с сущностями") является ключевым компонентом для всех наших утилит.

Данный контрол представляет собой контейнер бесконечного размера, в котором содержатся различные "сущности" (entity).

Конкретно для целей реверса микросхем набор сущностей подобран таким образом, чтобы они соответствовали основным компонентам архитектуры микросхем:

  • Провода (Wires)
  • Виасы (Vias)
  • Стандартные ячейки различных классов (Cells)

Пример контрола с несколькими проводами, виасами и одной стандартной ячейкой:

image

Соглашения по тексту

В дальнейшем италиком будут отмечены свойства EntityBox.

Как использовать контрол в своем проекте

Для этого необходимо добавить в ваше решение проект EntityBox.csproj и добавить его в зависимости вашего приложение (Reference)

После чего в панели контролов появится EntityBox:

image

Лямбда

Все измерения внутри EntityBox производятся в единицах измерения - лямбда.

В цифровой электронике за 1 единицу лямбда принято считать самую мелкую деталь микросхемы, на которую способен технически процесс её изготовления (обычно это ширина затвора транзистора).

EntityBox содержит свойство Lambda, которое задает количество пикселей экрана, соответствующее 1 единице лямбда. Так как это свойство имеет тип float, можно задавать нецелое число пикселей. Хотя обычно значение Lambda = 5.0

Состав сборки EntityBox

Список типов сущностей

Типы определены в 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: проверить является ли сущность регионом

Режим работы EntityBox

Режим работы (свойство 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). Сделано это в целях предотвращения случайного перемещения и зума.

Clone this wiki locally