Project

General

Profile

Actions

Task #5483

closed

[vhdl][parser][cfg] Обработка условий на события при построении CFG

Added by Alexander Kamkin over 9 years ago. Updated over 9 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
-
Target version:
Start date:
12/10/2014
Due date:
% Done:

100%

Estimated time:
Detected in build:
svn
Published in build:
20141230

Description

В языке VHDL помимо списка чувствительности при описании процессов можно использовать условия вида clk'event. При построении CFG такие условия нужно переносить в список чувствительности. Оставлять их в охранных условиях противопоказано. Предлагается следующий подход.

Накладываемые ограничения:

  1. Каждое условие содержит не более одного события; если условие содержит событие, оно имеют вид x'event [&& x = v].
  2. Каждое условие на событие (вершина типа Switch) содержит не более одного последователя (вершину типа Case).
  3. Условие на событие не может быть внутри цикла.
  4. На каждом пути от начальной вершины до конечной может присутствовать не более одного условия на событие (вершины типа Switch, выражение которой содержит переменную, входящую в список чувствительности, с маркером event).
  5. На каждом пути от начальной вершины до условия на событие могут присутствовать только условия (вершины типа Switch и Case) - базовые блоки не допустимы.

Правила преобразования процесса P:

  1. Для каждого условия на событие (Switch: x'event [&& x = v]), если оно не является первой вершиной после Source:
    1. строится отдельный процесс P_part[i] со списком чувствительности x (возможно, с пометкой posedge или negedge);
    2. CFG процесса P_part[i] - путь в CFG процесса P от начальной вершины до соответствующего Switch (все альтернативные ветви ведут в Sink) + продолжение (которое должно быть одно).
  2. В CFG процесса P удаляются подграфы, начинающиеся с условий на события:
    1. если в нем не остается действий, он удаляется.
  3. Условия на события либо удаляются, либо заменяются на true.
Actions #1

Updated by Sergey Smolov over 9 years ago

После обсуждения решено реализовать следующий упрощенный вариант подхода.

1. Только условные операторы могут содержать события.
2. В коде условий события могут иметь вид x'event или "x'event && x == '1'".
3. События указанного вида должны транслироваться в объекты типа Event.
4. Условные операторы, содержащие события, должны транслироваться в объекты типа Switch с непустым полем Event и содержать ссылку только на один дочерний узел (типа Case), соответствующий then-ветви. Если в исходном коде в явном виде присутствует else-ветвь, то в лог VHDL-парсерадолжно выводиться предупреждение о наличии несинтезируемого кода, а сама ветвь - игнорироваться.

Actions #2

Updated by Sergey Smolov over 9 years ago

  • Status changed from New to Open
Actions #3

Updated by Sergey Smolov over 9 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.

Actions #4

Updated by Sergey Smolov over 9 years ago

  • Status changed from Resolved to Closed
  • Published in build changed from r1319 to 20141230
Actions

Also available in: Atom PDF