Project

General

Profile

Actions

Task #5149

closed

[parser][cfg] Слияние процессов непрерывного присваивания

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

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

100%

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

Description

Предлагается сливать несколько маленьких процессов непрерывного присваивания в один. Два процесса соединяются, если каждый из них содержит только один базовый блок, а списки чувствительности совпадают.

assign a = x | y;   =>   PROCESS(x, y) { a := x | y; }   =>   PROCESS(x, y) { a := x | y;
assign b = x & y;   =>   PROCESS(x, y) { b := x & y; }                        b := x & y; }
Actions #1

Updated by Sergey Smolov over 9 years ago

Присваивания в разные процессах принудительно делаем concurrent.
Проверить работу backend'а можно на fifo.v

Actions #2

Updated by Sergey Smolov over 9 years ago

  • Status changed from New to Resolved
  • % Done changed from 0 to 100
  • Published in build set to r832

Компонент реализован как класс parser.basis.backend.CfgProcessBackend

В текущей реализации сделать присваивание (или мульти-присваивание) concurrent-ным невозможно, т.к. это свойство зависит лишь от того, какой сущности присваивается значение (сигналу, или нет).

Actions #3

Updated by Alexander Kamkin over 9 years ago

Что понимается под "сигналом"? В CFG переменные делятся на входы/выходы и внутренние переменные. Для выходов и внутренних переменных определены как блокирующие, так и неблокирующие присваивания.

В Verilog принята следующая классификация. Говоря упрощенно, есть wire и reg - для wire определены непрерывные присваивания, для reg - процедурные. Процедурные делятся на блокирующие и неблокирующие. Выходы могут быть как wire, так и reg. Внутренние переменные могут быть как wire, так и reg.

Непрерывные присваивания у нас моделируются процедурными путем введения дополнительных процессов. Таким образом, в модели CFG нет wire. Признак блокирующего/неблокирующего присваивания можно устанавливать сверху.

Actions #4

Updated by Sergey Smolov over 9 years ago

  • Published in build changed from r832 to r834

В класс AssignStatement добавлен булевский флаг isConcurrent. В CfgProcessBackend реализовано слияние процессов, содержащих один базовый блок и имеющих один и тот же список чувствительности. На выходе бэкэнда строится процесс, имеющий один базовый блок, содержащий набор утверждений из базовых блоков исходных процессов. Каждое утверждение является concurrent-ным.

Actions #5

Updated by Sergey Smolov over 9 years ago

  • Published in build changed from r834 to r841

Поправка - слиянию подлежат только процессы, построенные вокруг присваиваний неблокирующего типа (concurrent).

Actions #6

Updated by Alexander Kamkin over 9 years ago

  • Status changed from Resolved to Closed
Actions

Also available in: Atom PDF