Project

General

Profile

Ideas and Proof of Concept » History » Version 3

Alexander Kamkin, 07/16/2013 08:09 PM

1 2 Alexander Kamkin
h1. Reverse Engineering of HDL Descriptions Based on Static Code Analysis
2 1 Alexander Kamkin
3
h2. Abstract
4
5
Типичный процесс проектирования компьютерных систем устроен как поэтапная детализация ее описания (понижение уровня абстракции, синтез). По первоначальным требованиям создается упрощенная модель системы, она исследуется, корректируется, дополняется. Анализ построенной модели приводит к более глубокому пониманию функций и структуры системы, на основе чего создается более детальная модель; и так до тех пор, пока описание не станет насколько подробным, что по нему можно будет (автоматически) построить изначально задуманную систему. Число итераций может быть разным и зависит от сложности системы и квалификации/опыта разработчиков (в идеальном случае система автоматически синтезируется из спецификаций).
6
7
В проектировании бывают и обратные процессы (reverse engineering) – когда по результатам анализа моделей низкого уровня, создаются или меняются модели более высоких уровней. Например, ошибка, обнаруженная в реализации системы, может привести к пересмотру концепции всей системы. В общем случае задача формулируется так – по имеющейся модели уровня I (реализации, низкоуровнему описанию) построить модель (или часть модели) более высокого уровня S (спецификацию, концептуальное описание). Вероятно, потребность в обратной инженерии возникает из-за недостатков в организации процесса разработки, однако реальность такова, что такие задачи возникают достаточно часто. Примеры задач и наша мотивация в исследованиях по этой тематике подробно рассмотрены в соответствующем разделе.
8
9
В контексте проектирования цифровой аппаратуры (digital hardware) задача обратной инженерии может быть поставлена следующим образом. Имеется описание устройства на уровне RTL (Register Transfer Level), требуется построить более абстрактное описание на архитектурном уровне (уровне TLM – Transaction Modeling Language). Возможна и другая постановка задачи – по описанию схемы устройства уровня логических вентилей (gate-level netlist) построить его описание на уровне RTL (или на более абстрактном уровне). Следует отметить, что, несмотря на то, что вторая постановка задачи (судя по беглому анализу работ) распространена шире, нас, в первую очередь, будет интересовать первый вариант задачи. Суть проблемы состоит в преобразовании описания устройства с уровня преобразования логических сигналов (возможно объединенных в битовые векторы) на уровень обработки сообщений (структурированных данных, обрабатываемых как единое целое).
10
11
h2. Problem Statement
12
13
В своей работе мы рассматриваем следующую постановку задачи. Имеется HDL-описание цифрового устройства на уровне RTL (Verilog или VHDL). Требуется построить описание устройства (модель) на уровне TLM (C++, SystemC или ином языке). Предполагается, что устройство является синхронным (управляется одним тактовым импульсом). (В дальнейшем это ограничение может быть снято.) Кроме того, HDL-описание является синтезируемым (такие конструкции, как вызовы внешних функций, игнорируются, поскольку их семантика неясна).
14
15
Чтобы уточнить постановку задачи, рассмотрим, что понимается под уровнями RTL и TLM.
16
17
На наш взгляд, наиболее адекватное определение уровня RTL можно дать, используя формализм действий с условиями (guarded actions), определенных над двоичными векторами. Если рассматривать только синхронные устройства, условия проверяются параллельно на каждом такте (с учетом зависимостей по данным); для выполненных условий, запускаются соответствующие действия. Именно такого рода системы определяются на HDL-языках.
18
19
Основные элементы метамодели TLM описаны ниже.
20
21
# Сообщение (message) — структурированный набор данных, обрабатываемых как единое целое. Сообщения делятся на интерфейсные сообщения (принимаемые извне и посылаемые наружу) и внутренние сообщения (порождаемые и обрабатываемые внутри). Сообщения (точнее, транзакции по их передаче) могут быть как однотактными, так и многотактными.
22
# Интерфейс (interface) — «точка», связывающая модель устройства с его окружением: через интерфейс происходит подача сообщений на модель устройства или выдача сообщений наружу. Интерфейсы подразделяются на входные интерфейсы (входы) и выходные интерфейсы (выходы).
23
# Блок (block) — часть модели устройства, которая, в свою очередь, является моделью (имеет входные и выходные интерфейсы, вложенные блоки и т.п.).
24
# Примитив (primitive) — элементарный блок (блок, который не раскладывается на другие блоки). Примерами примитивов являются функция, очередь и другие.
25
# Канал (channel) — средство передачи сообщений с выхода одного блока модули устройства на вход другого блока. Каналы различаются временем передачи сообщений и возможностью параллельной передачи нескольких сообщений. Простейшим типом канала является пересылка данных с одних регистров на другие. Более сложный пример – синхронный канал – канал, осуществляющий передачу сообщений в случае готовности передатчика и приемника.
26
# Функция (function) — примитив, осуществляющий преобразование сообщений. Функция имеет один вход и один выход. В общем случае, тип выходного сообщения отличается от типа входного сообщения. Преобразование сообщения осуществляется мгновенно (аналогично комбинационной логике в RTL-описании).
27
# Очередь (queue) — примитив, осуществляющий хранение сообщений в памяти и выбор сообщений из хранилища в соответствии с некоторой стратегией. Простейшим типом очереди является очередь FIFO ограниченного размера.
28
29
Другими примитивами являются маршрутизатор (switch), арбитр (merge), ветвление (fork) и соединение (join). Они используются для управления потоком сообщений в модели.
30
31
h2. Research Motivation
32
33
Мотивация наших исследований основана на актуальности следующих задач (порядок перечисления задач никак не отражает их важности).
34
35
# Поддержка унаследованного (legacy) кода – есть унаследованный код (без подробной документации), который необходимо поддерживать (оптимизировать / исправлять ошибки, не нарушая функциональность) – чтобы это делать, необходимо понять его концептуальную организацию и ограничения, при которых код работает.
36
# Верификация модульного уровня – есть модуль (компонент) системы, который требуется тщательно проверифицировать (поскольку есть подозрение, что в модуле есть ошибки), но для которого нет документации (при этом документация на систему в целом может и быть). В условиях неполной документации анализ функций модуля в той или иной степени базируется на реконструкции концептуальной модели устройства. Далее проверяется эта модель (инспекция, формальная верификация) и соответствие ей реализации (динамическая верификация, проверка эквивалентности).
37
# Формальная проверка соответствия (equivalence checking) – важная подзадача верификации, которую можно рассмотреть отдельно – имеются две модели, RTL-модель и TLM-модель, необходимо формально проверить их эквивалентность в смысле некоторого отношения эквивалентности (синхронная эквивалентность, событийная эквивалентность).
38
# Анализ высокоуровневых свойств – есть описание свойств системы, выполненное на более высоком уровне по сравнению с реализацией системы. Например, свойства могут формулироваться в терминах сообщений (TLM), а реализация быть описанной в терминах логических сигналов (RTL, netlist). В таких случаях нужно преобразование уровня абстракции. Для динамического анализа свойств вокруг реализации делается обертка (адаптеры, транзакторы), осуществляющая преобразование интерфейсов. Для статического анализа удобнее построить абстрактную модель и провести анализ свойств на ней.
39
# Быстрая симуляция аппаратуры – есть описание системы на низком уровне (RTL, netlist), для которого нужно в динамике проверять некоторые высокоуровневые свойства. Можно использовать транзакторы (см. предыдущий пункт), но в этом случае симуляция осуществляется медленно. Альтернативой является трансляция низкоуровневых описаний системы в более абстрактные (и, возможно, оптимизированные) описания на языках программирования.
40
# Важным частным случаем этой задачи является оптимизация симуляции больших TLM-моделей с включенными в их состав RTL-компонентами (IP cores). Как уже отмечалось ранее (см. пункт 1), многие компоненты современных аппаратных систем являются унаследованными (legacy), и для них нет разработанных моделей уровня TLM. Такие компоненты существенно замедляют симуляцию и анализ результирующей TLM-модели, сводя на нет преимущества TLM. Создание TLM моделей для существующих (и, как правило, плохо специфицированных) RTL-моделей является трудоемкой задачей, которую желательно автоматизировать.
41
42
h2. Possible Results (Methods/Tools)
43
44
Результатами работы (помимо общей методологии анализа и обратной инженерии HDL-описаний) могут быть следующие методы/инструменты.
45
46
# Метамодель (система связанных формализмов), предназначенная для описания цифровой аппаратуры на разных уровнях абстракции (RTL и разные разновидности TLM: системы действий с условиями (guarded actions) (чистый RTL), расширенные конечные автоматы (EFSM, ASM) (разделение управляющей логики и функций преобразования данных), микроархитектурые сети (xMAS) (выявление типовых компонентов и каналов связи) и т.д.). Библиотека классов, предназначенная для моделирования цифровой аппаратуры (внутреннее представление).
47
# Методы анализа моделей цифровой аппаратуры, позволяющие выявлять или проверять некоторые свойства аппаратуры (наличие «мертвого кода», зависаний, конфликтов и т.п.). Инструменты анализа моделей цифровой аппаратуры.
48
# Методы (вертикальной) трансформации моделей цифровой аппаратуры, позволяющие по низкоуровневым описаниям строить более высокоуровневые модели (функционально эквивалентные (в смысле синхронной эквивалентности) или с более общей моделью поведения). Инструменты трансформации моделей цифровой аппаратуры.
49
# Методы проверки соответствия (синхронной эквивалентности, событийной эквивалентности) между моделями цифровой аппаратуры разного уровня абстракции. Методы генерации тестов для моделей цифровой аппаратуры. Инструменты проверки соответствия между моделями цифровой аппаратуры. Инструменты генерации тестов для моделей цифровой аппаратуры.
50
# Методы трансляции моделей цифровой аппаратуры на языки программирования высокого уровня для целей симуляции и динамического анализа этих моделей (приведение моделей к стандартизованному виду, прежде всего, к формату SystemC TLM). Инструменты трансляции и симуляции моделей цифровой аппаратуры.
51
52
Некоторые конкретные примеры методов/инструментов:
53
TODO:
54
55
h2. Method Concept
56
57
Основные концепции метода:
58
59
# Абстракция интерфейса (выделение сообщений и каналов)
60
# Абстракция управляющей логики (выделение арбитров и маршрутизаторов)
61
# Абстракция функций преобразования данных (абстракция преобразователей)
62
63
h2. Research Plan
64
65
Ниже представлен ориентировочный план исследований.
66
67
# Выделение сообщений:
68
a.	группировка сигналов — анализ совместного использования сигналов (если несколько сигналов всегда (или очень часто) используются совместно, они могут быть объединены в сообщение);
69
b.	выделение многотактных транзакций — анализ формирования внутренних сообщений по входным сигналам и анализ формирования выходных сигналов по внутренним сообщениям.
70
# Выделение функций обработки сообщений:
71
a.	Выделение всех функциональных преобразований сообщений (по возможности, не зависимых от состояния памяти устройства).
72
b.	Абстракция функциональных преобразований (абстракция комбинационной логики) — реконструкция функций по комбинационным схемам (например, выделение сложения и других типовых функций по паттернам, анализ способов использования результатов схем и т.д.).
73
# Выделение каналов передачи сообщений:
74
a.	Выделение каналов между вложенными модулями — анализ передачи сообщений во вложенные модули (если есть вложенный модуль, соединенный с исходным модулем или другим вложенным модулем сигналами, соответствующими сообщению, в модели создается простейший канал между ними).
75
b.	Выделение каналов внутри исходного модуля — выделение точек хранения сообщений (данных, соответствующих сообщениям) и пересылок сообщений из одной точки в другую.
76
# Выделение примитивов, управляющих передачей сообщений (абстракция управляющей логики):
77
a.	Выделение примитивов, управляющих передачей сообщений (арбитров (мультиплексоров), маршрутизаторов (демультиплексоров) и др.).
78
# Выделение блоков, описываемых автоматными моделями (FSM, EFSM):
79
a.	Выделение переменных, кодирующих состояния (выявление циклов обратной связи потоках данных элементарных действий).
80
b.	Выделение пространства состояний (состояние – конкретное значение переменных состояний или класс значение (ограничение на значения)).
81
c.	Построения отношения переходов (переход – охраняемое действие)
82
# Генерация функциональных тестов по построенной модели:
83
a.	Создание адекватных метрик тестового покрытия на основе моделей.
84
b.	Создание методов генерации тестов на основе предложенных метрик.
85
# Формальный анализ и оптимизация построенной модели:
86
a.	Анализ наличия недостижимого кода (dead code), тупиков/зависаний (deadlocks), переполнения очередей и т.п.
87
b.	Оптимизация функциональных преобразований сообщений (эту задачу можно возложить на оптимизирующий компилятор).
88
c.	Оптимизация автоматных моделей (минимизация числа состояний и т.п.).
89
d.	Оптимизация коммуникационной сети.
90
91
h2. Implementation Ideas
92
93
h2. Related Work
94
95
h2. References
96 3 Alexander Kamkin
97
h3. EFSM Extraction
98
99
# http://www.google.com/patents/US5774370