Task #5483
closed[vhdl][parser][cfg] Обработка условий на события при построении CFG
100%
Description
В языке VHDL помимо списка чувствительности при описании процессов можно использовать условия вида clk'event
. При построении CFG такие условия нужно переносить в список чувствительности. Оставлять их в охранных условиях противопоказано. Предлагается следующий подход.
Накладываемые ограничения:
- Каждое условие содержит не более одного события; если условие содержит событие, оно имеют вид
x'event [&& x = v]
. - Каждое условие на событие (вершина типа
Switch
) содержит не более одного последователя (вершину типаCase
). - Условие на событие не может быть внутри цикла.
- На каждом пути от начальной вершины до конечной может присутствовать не более одного условия на событие (вершины типа
Switch
, выражение которой содержит переменную, входящую в список чувствительности, с маркеромevent
). - На каждом пути от начальной вершины до условия на событие могут присутствовать только условия (вершины типа
Switch
иCase
) - базовые блоки не допустимы.
Правила преобразования процесса P
:
- Для каждого условия на событие (
Switch: x'event [&& x = v]
), если оно не является первой вершиной послеSource
:- строится отдельный процесс
P_part[i]
со списком чувствительностиx
(возможно, с пометкойposedge
илиnegedge
); - CFG процесса
P_part[i]
- путь в CFG процессаP
от начальной вершины до соответствующегоSwitch
(все альтернативные ветви ведут вSink
) + продолжение (которое должно быть одно).
- строится отдельный процесс
- В CFG процесса
P
удаляются подграфы, начинающиеся с условий на события:- если в нем не остается действий, он удаляется.
- Условия на события либо удаляются, либо заменяются на
true
.
Updated by Sergey Smolov about 10 years ago
После обсуждения решено реализовать следующий упрощенный вариант подхода.
1. Только условные операторы могут содержать события.
2. В коде условий события могут иметь вид x'event или "x'event && x == '1'".
3. События указанного вида должны транслироваться в объекты типа Event.
4. Условные операторы, содержащие события, должны транслироваться в объекты типа Switch с непустым полем Event и содержать ссылку только на один дочерний узел (типа Case), соответствующий then-ветви. Если в исходном коде в явном виде присутствует else-ветвь, то в лог VHDL-парсерадолжно выводиться предупреждение о наличии несинтезируемого кода, а сама ветвь - игнорироваться.
Updated by Sergey Smolov about 10 years ago
- Status changed from Open to Resolved
- % Done changed from 0 to 100
- Published in build set to r1319
Подход реализован в VHDL-парсере, а event-содержащие switch-узлы обрабатываются при построении GADD/EFSM.
Updated by Sergey Smolov almost 10 years ago
- Status changed from Resolved to Closed
- Published in build changed from r1319 to 20141230