Intermediate Representation » History » Revision 3
« Previous |
Revision 3/11
(diff)
| Next »
Sergey Smolov, 09/12/2013 03:34 PM
Intermediate Representation¶
В данном разделе представлена структура внутреннего представления(ВП) HDL-описаний. Построение ВП выполняется на начальном этапе статического анализа HDL-кода. ВП является исходным для извлечения охраняемых действий.
С точки зрения архитектуры ВП состоит из трех подсистем: собственно представления конструкций исходного кода, компонентов связывания с исходным кодом и модели памяти.
Представление исходного кода¶
Базовым элементом ВП исходного кода является модуль Module
. Модуль содержит строковое имя и два набора - набор процессов и набор экземпляров модулей.
Процесс Process
содержит список чувствительности и соответствующий граф потока управления. Семантика процесса следующая - процесс постоянно находится в состоянии ожидания до тех пор, пока не происходит событие, находящееся в списке чувствительности. Как только такое событие происходит, процесс осуществляет выполнение всех инструкций, которые содержатся в его графе потока управления.
Экземпляр модуля Instance
содержит собственно модуль, строковое имя данного экземпляра модуля, а также набор связок.
Связка Binding
представляет собой способ передачи экземпляру модуля конкретных выражений вместо определенных переменных модуля. Связка содержит собственно внутреннюю переменную MVariable
и сопоставляемое ей выражение(тип выражения ISyntaxElement
, см. документацию к библиотеке Java Constraint Solver API).
Переменная MVariable
содержит строковое имя, тип (в настоящее время поддерживаются типы integer, real, boolean и битовые векторы) и указатель на её местоположение в памяти ILocation.
содержит набор событий.
Список чувствительности процесса (@SensitivityList
Событие Event
определяется типом и соответствующей переменной с указанным поддиапазоном.
Тип события EEventType
определяет, каким фронтом сигнала данное событие возбуждается. Возможные варианты - передний фронт(POSEDGE), задний фронт(NEGEDGE), либо любой из них(ANYEDGE).
Переменная с указанным поддиапазоном RangedVariable
содержит собственно переменную и её поддиапазон.
Семантика поддиапазона Range
следующая: событие может происходить не только при изменении значения всего сигнала, но и некоторого его подмассива. Границы этого подмассива и определяются поддиапазоном. Поддиапазон содержит два числа, задающих соответственно левую и правую границы подмассива.
Граф потока управления ControlFlowGraph
представляет собой ориентированный граф, вершины которого имеют тип Node
, а ребра имеют тип Link
. Если в исходном коде исполнение инструкции A предшествовало ивыполнению инструкции B, и между ними ни одна другая инструкция не выполнялась, то в графе потока управления будет существовать ребро из A в B. Node
- базовый класс для различных узлов. Любой класс данного типа содержит указатель на родительский класс (для корневой вершины он будет равен null), а также класс описания расположения соответствующей инструкции в исходном коде (CodeLocation
).
Наследниками класса Node
являются:
- граф потока управления
ControlFlowGraph
. - базовый блок
BasicBlock
. Содержит только одну входную и одную выходную дуги. Также содержит набор утвержденийStatement
. Утверждение - это базовый класс, наследником которого является присваиваниеAssignment
. Присваивание содержит набор более элементарных объектовSubstitution
. Элементы присваивания содержат переменную с указанным поддиапазономRangedVariable
и присваиваемое ей выражение (Operation
, см. документацию к библиотеке Java Constraint Solver API). - условный оператор
Switch
. Содержит только одну входную дугу и, возможно, более чем одну выходную дугу. Также включает в себя набор условий типаOperation
(см. документацию к библиотеке Java Constraint Solver API). - оператор слияния
Merge
. Является обратным к условному оператору. Содержит, возможно, более одной входной дуги и ровно одну выходную дугу.
Подсистема компонентов связывания с исходным кодом¶
Описание расположения CodeLocation
содержит полное имя QFileName
файла, где расположена соответствующая структура исходного кода (инструкция, модуль или что-то иное); также содержит отображение диапазонов номеров строк в сами строки CodeLineMap
.
Полное имя QFileName
является оберткой вокруг строкового имени, содержащего абсолютный путь к файлу.
Отображение CodeLineMap
содержит набор пар вида <диапазон строк CodeLineRegion
, контейнер соответствующих строк CodeLineContainer
>
Диапазон строк CodeLineRegion
содержит два номера, называемых левым и правым индексами.
Контейнер строк CodeLineContainer
содержит набор строк кода.
Подсистема модели памяти¶
Цель создания модели памяти заключается в необходимости имитировать исполнение ВП на конкретных данных (например, для исполнения тестовых последовательностей). Основным компонентом здесь является память Memory
, которая представляет собой массив ячеек типа Bit
. Каждая ячейка имеет номер и содержимое. Для заполнения ячеек памятью используется механизм извлечения подмассива ячеек, такой подмассив имеет тип Location
. Предполагается, что у каждой переменной ВП MVariable
имеется свой подмассив ячеек памяти Location
.
Updated by Sergey Smolov about 11 years ago · 11 revisions