Project

General

Profile

Intermediate Representation » History » Version 1

Sergey Smolov, 09/11/2013 06:28 PM

1 1 Sergey Smolov
h1. Intermediate Representation
2
3
В данном разделе представлена структура внутреннего представления(ВП) HDL-описаний. Построение ВП выполняется на начальном этапе статического анализа HDL-кода. ВП является исходным для извлечения охраняемых действий.
4
С точки зрения архитектуры ВП состоит из трех подсистем: собственно представления конструкций исходного кода, компонентов связывания с исходным кодом и модели памяти.
5
6
h2. Представление исходного кода
7
8
Базовым элементом ВП исходного кода является модуль @Module@. Модуль содержит строковое имя и два набора - набор процессов и набор экземпляров модулей.
9
Процесс @Process@ содержит список чувствительности и соответствующий граф потока управления. Семантика процесса следующая - процесс постоянно находится в состоянии ожидания до тех пор, пока не происходит событие, находящееся в списке чувствительности. Как только такое событие происходит, процесс осуществляет выполнение всех инструкций, которые содержатся в его графе потока управления.
10
Экземпляр модуля @Instance@ содержит собственно модуль, строковое имя данного экземпляра модуля, а также набор связок.
11
Связка @Binding@ представляет собой способ передачи экземпляру модуля конкретных выражений вместо определенных переменных модуля. Связка содержит собственно внутреннюю переменную @MVariable@ и сопоставляемое ей выражение(тип выражения @ISyntaxElement@, см. документацию к библиотеке Java Constraint Solver API).
12
Переменная @MVariable@ содержит строковое имя, тип (в настоящее время поддерживаются типы integer, real, boolean и битовые векторы) и указатель на её местоположение в памяти @ILocation.
13
Список чувствительности процесса (@SensitivityList@ содержит набор событий.
14
Событие @Event@ определяется типом и соответствующей переменной с указанным поддиапазоном.
15
Тип события @EEventType@ определяет, каким фронтом сигнала данное событие возбуждается. Возможные варианты - передний фронт(POSEDGE), задний фронт(NEGEDGE), либо любой из них(ANYEDGE).
16
Переменная с указанным поддиапазоном @RangedVariable@ содержит собственно переменную и её поддиапазон. 
17
Семантика поддиапазона @Range@ следующая: событие может происходить не только при изменении значения всего сигнала, но и некоторого его подмассива. Границы этого подмассива и определяются поддиапазоном. Поддиапазон содержит два числа, задающих соответственно левую и правую границы подмассива.
18
Граф потока управления @ControlFlowGraph@ представляет собой ориентированный граф, вершины которого имеют тип @Node@, а ребра имеют тип @Link@. Если в исходном коде исполнение инструкции A предшествовало ивыполнению инструкции B, и между ними ни одна другая инструкция не выполнялась, то в графе потока управления будет существовать ребро из A в B. 
19
@Node@ - базовый класс для различных узлов. Любой класс данного типа содержит указатель на родительский класс (для корневой вершины он будет равен null), а также класс описания расположения соответствующей инструкции в исходном коде (@CodeLocation@).
20
Наследниками класса @Node@ являются:
21
22
# граф потока управления @ControlFlowGraph@.
23
# базовый блок @BasicBlock@. Содержит только одну входную и одную выходную дуги. Также содержит набор утверждений @Statement@. Утверждение - это базовый класс, наследником которого является присваивание @Assignment@. Присваивание содержит набор более элементарных объектов @Substitution@. Элементы присваивания содержат переменную с указанным поддиапазоном @RangedVariable@ и присваиваемое ей выражение (@Operation@, см. документацию к библиотеке Java Constraint Solver API).
24
# условный оператор @Switch@. Содержит только одну входную дугу и, возможно, более чем одну выходную дугу. Также включает в себя набор условий типа @Operation@ (см. документацию к библиотеке Java Constraint Solver API). 
25
# оператор слияния @Merge@. Является обратным к условному оператору. Содержит, возможно, более одной входной дуги и ровно одну выходную дугу.
26
27
h2. Подсистема компонентов связывания с исходным кодом
28
29
h2. Подсистема модели памяти