Project

General

Profile

EFSM Building (Related Work) » History » Version 40

Sergey Smolov, 03/31/2017 05:32 PM

1 1 Sergey Smolov
h1. EFSM Building (Related Work)
2
3 22 Sergey Smolov
Алгоритмы извлечения EFSM-моделей из исходного кода HDL-описаний. Все перечисленные методы строят по одному EFSM на каждый процесс целевого HDL-описания.
4 1 Sergey Smolov
5 22 Sergey Smolov
{{toc}}
6
7 39 Sergey Smolov
h2. 1995 Giomi J.-C. Finite State Machine Extraction From Hardware Description Languages
8 16 Sergey Smolov
9 25 Sergey Smolov
Алгоритм строит FSM-модели - частный случай EFSM-моделей - по HDL-описанию. Метод применим только к описаниям, которые синхронизируются единственным clock. Кроме того, все wait-выражения в исходном коде также синхронизируются единственным clock.
10 26 Sergey Smolov
Построенные FSM-модели предполагается использовать для синтеза netlist.
11 1 Sergey Smolov
12
*Шаг 1*
13 30 Sergey Smolov
HDL-описание подается на вход парсеру, который выполняет лексический и синтаксический анализ и строит _граф потока управления_ (Control Flow Graph, CFG). Выражения парсер представляет в виде ориентированных ациклических графов, внутренние вершины которых помечены операциями, а конечные вершины - переменными или значениями. Вершины CFG принадлежат к следующим типам: начало (source), конец (sink), условный оператор (switch), ветвь условного оператора (case), ожидание (wait), порождение процессов (fork), завершение процессов (join), присваивание (assignment) и цикл (loop). Вызовы функций и процедур разворачиваются при трансляции в подграфы CFG. Для loop с фиксированным числом итераций предполагается использовать процедуру _развертывания_ (unrolling).
14 22 Sergey Smolov
15
*Шаг 2*
16 34 Sergey Smolov
По CFG осуществляется поиск в ширину (bredth-first search). Фактически, в время выполнения поиска в ширину осуществляется и Шаг 3.
17 32 Sergey Smolov
Каждой вершине CFG сопоставляется синтаксическое выражение, называемое _условием активации_ (activation node). Для вершин типа wait и source оно равно 1. Для прочих вершин оно вычисляется как сумма произведений условий активации родительских (parent) вершин на условия активации исходящих из них ребер. Условие активации ребра равно 1 для всех ребер, которые НЕ исходят из вершин fork, wait, switch и source. Для ребер, исходящих из вершин типа source и fork, условия активации имеют вид равенства @ISR == val_w@, где ISR - неявная переменная состояния (Implicit State Register). Для ребра, исходящего из вершины типа fork условие активации формулируется как предикат, равный 1 для текущей ветви и 0 для всех остальных ветвей, исходящих из той же вершины. Для ребра, исходящего из вершины типа switch условие строится в виде равенства @cond == val@, где cond - условие в узле switch, val - значение в узле case. Путь в CFG называется _активируемым_ (activated path), если для каждого его ребра условие активации не принимает значение 0.
18 29 Sergey Smolov
19 1 Sergey Smolov
*Шаг 3*
20 33 Sergey Smolov
Для каждой вершины CFG вычисляется набор _выражений над данными_ (data expression) для всех переменных CFG. Выражения над данными имеют вид @de_node(v) = val(v)@, где @de_node(v)@ - обозначение для выражения для вершины @node@ и переменнной @v@, @val(v)@ - значение, определяемое типом вершины. В вершине source @val(v)@ есть начальное значение @v@, в вершине wait - предыдущее значение @v@, в assignment - выражение, присваиваемое переменной, в прочих случаях - сумма выражений над данными для указанной переменной и всех родительских вершин, умноженных на условия активации родительских вершин.
21 30 Sergey Smolov
22
*Шаг 4*
23 1 Sergey Smolov
На данном шаге выполняется оптимизация выражений над данными, построенных на предыдущем шаге. Целью оптимизации является устранение ненужных условий.
24 34 Sergey Smolov
По CFG осуществляется поиск в глубину (depth-first search).
25 1 Sergey Smolov
Для заданной вершины @n@ CFG-модели определяется множество _неявных предыдущих состояний_ (Implicit Previous State, IPS) - множество wait-вершин, которые являются ближайшими к вершины @n@ в направлении, противоположном потоку выполнения. Вершина @s@ принадлежит @IPS(n)@, если она принадлежит классу wait или source и между ней и @n@ существует хотя бы один активируемый путь, не содержащих других вершин класса wait.
26 34 Sergey Smolov
Вводится понятие _максимального множества расширенного уровня_ (Extended Level Maximal Set, ELMS). Пусть необходимо оптимизировать выражение над данными для переменной @v@ в вершине @n@. Тогда @ELMS(n.v)@ - это множество наиболее отдаленных предков вершины @n@, таких, что каждый путь от них до @n@ является активируемым и не содержит вершин wait и присваиваний @v@. В таком случае выражение над данными @de_n(v)@ можно представить в виде суммы произведений (см. Шаг 3) для всех вершин из @ELMS(n,v)@.
27
Для каждого неявного состояния, сопоставленного вершине wait, вычисляются условия на переходы и выходные значения. Так, условие на переход по wait-вершине @i@ из @IPS(w)@ в wait-вершину @w@ вычисляется как сумма произведений условий активации вершин на условия активации исходящих из них ребер, соединяющих эти вершины с @w@ для всех родительских вершин для вершины @w@. Выходное значение для переменной @v@ вычисляется как сумма произведений условий активации вершин на выражения над данными для переменной @v@ в этих вершинах, для всех вершин из множества @ELMS(w, v)@.
28 31 Sergey Smolov
29 1 Sergey Smolov
*Шаг 5* 
30
Определение начального состояния FSM. Одним из относительно простых способов является поиск кода (и состояния), который выполняется (и достигается) по reset. Сигнал reset задается пользователем.
31 34 Sergey Smolov
32
*Шаг 6*
33
Неявные переменные состояния заменяются на _явные переменные состояния_ (Explicit State Register, ESR). Для каждой пары явных состояний определяются условия на переходы и выражения над данными для выходных переменных.
34 19 Sergey Smolov
35 39 Sergey Smolov
h2. 1996 Cheng K., Krishnakumar A. Automatic generation of functional vectors using the extended finite state machine model
36 10 Sergey Smolov
37 27 Sergey Smolov
На вход алгоритму подается описание на языках VHDL или C (BESTMAP-C - см. Jou, J-Y., Rothweiler, S., Ernst, R., Sutarwala, S., and Prabhu, A. 1989. BESTMAP: Behavioral Synthesis from C. In International Workshop on Logic Synthesis (Research Triangle Park, NC, May).). Построенную EFSM-модель предполагается использовать для генерации по ней тестов.
38 4 Sergey Smolov
39
*Шаг 1*
40 8 Sergey Smolov
Промежуточное представление кода строится с помощью Bridge AT & T Behaviour Synthesis System. По синхронной части кода (synchronous section) строится _дерево операторов_ (statement tree) _T_. Листовыми вершинами дерева являются базовые блоки (последовательности присваиваний). Ветви дерева снабжены атрибутами. Атрибуты - это выражения булева типа, соответствующие ветвям условных операторов в исходном коде. Не указано, каким образом выбираются переменные состояния (state variables), однако на *Шаге 3* они считаются уже определенными.
41 5 Sergey Smolov
42
*Шаг 2*
43 7 Sergey Smolov
Строится список всех возможных комбинаций условий на входные сигналы. Условия извлекаются из дерева операторов. Извлеченные комбинации проходят процедуру _ортогонализации_, такую, что каждая исходная комбинация оказывается представимой в виде суперпозиции нескольких ортогональных условий. В результате строится множество ортогонализованных условий _I_.
44 1 Sergey Smolov
45
*Шаг 3*
46 7 Sergey Smolov
Предыдущий шаг повторяется для всех условий, содержащих переменные состояния. В результате строится множество ортогонализованных условий _C_.
47
48
*Шаг 4*
49 11 Sergey Smolov
Собственно, построение EFSM по дереву T, и множествам C и I. Данный шаг в статье написан в весьма общем виде, псевдокод отсутствует. Результатом данного шага является _граф переходов между блоками_ (block transition graph), формальное определение которого в статье не приводится.
50 7 Sergey Smolov
51
*Шаг 5*
52 1 Sergey Smolov
Стабилизация графа переходов между блоками. Алгоритм стабилизации приводится в статье с использованием псевдокода. Идея алгоритма состоит в расщеплении слишком общих условий на более частные и не пересекающиеся, что позволяет исключить недетерминированные переходы в модели (Lee, D., Yannakakis, M. 1992. Online minimization of transition systems). Однако допускаются так называемые _частично стабильные переходы_ (semi-stable transitions). В таких переходах 1) действия (update functions) имеют вид x := x + c, где c - константа, а x - переменная состояния; 2) мощность множества конечных вершин равна 2; 3) одной из конечных вершин является начальная вершина, т.е. имеется цикл. В статье показывается, что для таких вершин в процессе обхода можно вычислить количество итераций, которое потребуется, чтобы выйти из цикла. Утверждается, что это допущение сокращает потребление вычислительных ресурсов (времени и памяти), по сравнению с алгоритмом _стабилизации_.
53 10 Sergey Smolov
54 40 Sergey Smolov
h2. 2006 Gilford M.E.J., Walker G.N., Tredinnick J.L., Dane M.W.P., Reynolds M.J.. Recognition of a State Machine in High-Level Integrated Circuit Description Language Code
55
56
Данный метод позволяет анализировать HDL-описания на языках VHDL и Verilog и распознавать в них автоматные модели. Автоматные модели предоставляются
57
58
*Шаг 1* Идентифицировать все процессы
59
Процессы в HDL-описаниях идентифицируются по ключевым словам: @process@ для VHDL, @always@ и @initial@ для Verilog.
60
61
*Шаг 2* Идентифицировать синхронизуемые (clocked) процессы
62
Неформально, среди процессов выполняется поиск тех, которые содержат условные операторы, зависящие от синхросигнала, и меняющие состояние.
63
Формально, выполняется поиск процессов, имеющих нетривиальный список чувствительности и хотя бы один условный оператор @if@. Предполагается, что @if@ верхнего уровня содержит условия на переменные синхроимпульса @clock@ и сброса @reset@. Если условный оператор имеет ветви типа @else@ или @elseif@, то @reset@-выражение извлекается из ветви @if@, а @clock@-выражение - из ветвей @else@ или @elseif@. Если таких ветвей нет, то @clock@-выражение извлекается из ветви @if@. @reset@-выражение должно иметь вид (не)равенства, в одной части которого находится константа (или значение перечислимого типа), а в другой - переменная, которая в дальнейшем интерпретируется как @reset@. Если переменная @reset@ определена, то выполняется поиск @state@-переменной в наборе операторов присваивания, соответствующих @reset@-выражению в условном операторе. @clock@-выражение должно иметь вид либо функции одной переменной, либо предиката, состоящего из событийной части (event) и логической части (равенства в духе @reset@-выражения). Если переменная @clock@ определена, то выполняется поиск @state@-переменной в наборе присваиваний (или операторе @case@) из соответствующей ветви условного оператора.
64
65
*Шаг 3* Идентифицировать процессы переходов (transition)
66
Неформально, процессы переходов содержат присваивания, определяющие переменные состояния.
67
На множестве синхронизируемых процессов выполняется поиск таких процессов, что для каждого из них найдется хотя бы один процесс, в котором определяется переменная из данного процесса. Тогда процесс помечается как процесс перехода.
68
69
*Шаг 4* Идентифицировать выходные (output) процессы
70
Неформально, выходные процессы содержат присваивания значений выходным сигналам, не являющимся переменными состояния.
71
На множестве синхронизируемых процессов выполняется поиск таких процессов, что в каждом из них определяется хотя бы одна выходная переменная. Тогда процесс помечается как выходной.
72
73
*Шаг 5* Построить автоматную модель
74
Выполняется перебор всех процессов HDL-описания. Если для текущей переменной текущий процесс её использует, то сохраняются найденные в нем информация о @clock@ (название и тип фронта) и @reset@. По переменным процесса выполняется поиск @state@-переменной и @next state@-переменной. Ограничение алгоритма состоит в том, что эти переменные должны иметь одинаковый тип. Если процесс является первым, в котором @state@-переменной присваивается значение @next state@-переменной, то он помечается как @clocked@-процесс для данной @state@-переменной. Если процесс является первым процессом перехода для данной @state@-переменной, или первым процессом перехода, не являющимся синхронизуемым, то он помечается как @transition@-процесс для данной @state@-переменной. Если процесс является первым выходным процессом для данной @state@-переменной, или первым выходным процессом, не являющимся синхронизуемым изи процессом перехода, то он помечается как @output@-процесс для данной @state@-переменной.
75
76
Отметим, что результатом работы данного алгоритма является не оплноценная автоматная модель, а набор сведений о ней, таких как: название сигнала @clock@; название сигнала @reset@; название сигнала @state@; список состояний (значений, принимаемых переменной @state@); количество переходов модели (количество @transition@-процессов); количество выходов (@output@-процессов) и входов (@clocked@-процессов).
77
78 39 Sergey Smolov
h2. 2011 Guglielmo G.D., Guglielmo L.D., Fummi F., Pravadelli G. Efficient Generation of Stimuli for Functional Verification by Backjumping Across Extended FSMs
79 12 Sergey Smolov
80 38 Sergey Smolov
Целью метода является построение EFSM-моделей, которые легко обходить (easy-to-traverse). Обход EFSM-модели является основной техникой для генерации тестов. Легкость обхода интерпретируется как равномерное распределение вероятности покрытия переходов модели при рандомизированной генерации тестов.
81 13 Sergey Smolov
82
*Шаг 1*
83
Построение "эталонной" EFSM-модели (Reference EFSM, REFSM).
84 16 Sergey Smolov
На вход алгоритму подается HDL-описание в виде _конечного автомата с потоком данных_ (FSM with Datapath, FSMD). FSMD-модель - это комбинация FSM (control path) и _конвейера данных_ (data path). Как правило, FSM-компонент осуществляет прием входных сигналов, чтение переменных состояния и формирование запроса на обработку данных. Запрос передается конвейеру, который его выполняет и возвращает результат FSM-компоненту. FSMD-модель строится методом Giomi ( Giomi J. 1995 Finite state machine extraction from hardware description languages).
85 13 Sergey Smolov
86 35 Sergey Smolov
ВАЖНО: в статье Giomi термин FSMD в явном виде не присутствует и не совсем понятно, что он делает здесь. HDL-описание, обрабатываемое методом Giomi, имеет некоторые синтаксические ограничения, но они напрямую не связаны с FSMD-представлением.
87
88 1 Sergey Smolov
*Шаг 2*
89 14 Sergey Smolov
Построение "наибольшей" EFSM-модели (Largest EFSM, LEFSM). На данном шаге выполняется преобразование переходов REFSM, содержащих условные операторы, в переходы LEFSM, не содержащие таковых. Процесс завершается построением LEFSM, количество состояний в которой является наибольшим среди всех шагов алгоритма.
90 36 Sergey Smolov
Алгоритм построения LEFSM является линейным по количеству условных операторов в коде HDL-описания. Выполняется перебор всех переходов REFSM-модели. Если переход не содержит условных операторов, он остается неизменным. Если переход содержит условные операторы, то
91
рекурсивным образом выполняется расщепление на переходы, не содержащие условных операторов. Расщепление сопровождается созданием новых символических состояний LEFSM-модели. Часть перехода, являющаяся условным оператором, расщепляется на количество переходов, равное количеству ветвей в условном операторе. Для каждого "нового" перехода создается новое конечное состояние.
92 14 Sergey Smolov
93
*Шаг 3*
94 1 Sergey Smolov
Построение "наименьшей" EFSM-модели (Smallest EFSM, SEFSM). На данном шаге выполняется группировка совместимых переходов LEFSM. Процесс завершается построением SEFSM, количество состояний в которой является наименьшим среди всех шагов алгоритма.
95 37 Sergey Smolov
Основная цель данного шага - обеспечить построение модели, которая была бы эквивалентна исходному HDL-описанию в смысле исполнения тестов. По-видимому, неявно предполагается, что за один такт EFSM-модель исполняет ровно один переход.
96 36 Sergey Smolov
Шаг 3 включает в себя следующие операции:
97
# композиция совместимых переходов;
98
# устранение несовместимости переходов;
99
100
Пусть @tij@ из состояния @Si@ в состояние @Sj@ с охранным условием @eij@ и действием @uij@, а переход @tjk@ из состояния @Sj@ в @Sk@ с охранным условием @ejk@ и действием @ujk@. Говорят, что @tij@ _совместим_ с @tjk@, если @eij@ и @ejk@ могут быть истинны одновременно, и @uij@ не содержит присваиваний переменным, используемым в @ejk@. В таком случае переход @tij@ объединяют с переходом @tjk@: последний получает охранное условие @eij AND ejk@ и действие @uij OR ujk@.
101 1 Sergey Smolov
102 37 Sergey Smolov
Если переходы @tij@ и @tjk@ не являются совместимыми, то это может произойти по двум причинам:
103
* Если их охранные условия не могут быть одновременно истинными - в случае, если переходы являются вложенными (nested, соответствуют вложенным условным операторам), то это сигнализирует об ошибке в HDL-описании; если нет, то должна проводиться композиция с другими переходами, являющимися совместимыми;
104
* Если действие перехода @tij@ определяет переменную(ые), которые используются в охранному условии @tjk@ - в таком случае предлагается модифицировать код HDL-описания таким образом, чтобы для каждой переменной @v@ её значение менялось после проверок этого значения.
105 1 Sergey Smolov
106 14 Sergey Smolov
*Шаг 4*
107 37 Sergey Smolov
Дополнительные оптимизации, приводящие к построению "полу-стабилизированной" EFSM (Semi-Stabilized EFSM, (S^2)EFSM). Оптимизация нацелена на восстановление оригинальных состояний EFSM-модели.
108
Восстановление оригинальных состояний делается методом _стабилизации_ Cheng, Krishnakumar. Стабилизация проводится по некоторым переменным (не всем), чтобы избежать комбинаторного взрыва состояний и одновременно удалить часть условий, зависящих от внутренних переменных, из охранных условий переходов. Можно предположить, что, в первую очередь, стабилизация нацеливается на такие переменные, которые используются во всех охранных условиях  и всех действиях переходов SEFSM.