Потоковые и конвейерные реализации

 

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

Если использовать последовательную форму, то необходимо точно следовать порядку передачи данных в графе. Промежуточные данные декларируются как переменные(VARIABLES)

 

-- n - разрядность аргументов

-- x,y: std_logic_vector (n-1 DOWNTO 0) – сомножители,

-- Result: : std_logic_vector (2*n-1 DOWNTO 0) – произведение

-- x,y,n, result определены в декларации ENTITY

PROCESS(x,y)

TYPE sum_array IS ARRAY (n-1 DOWNTO 0 ) OF std_logic_vector (n DOWNTO 0);

VARIABLE z: sum_array ; -- матрица сумматоров схемы умножения;

-- дополнительный n-ый разряд передает бит переполнения при сложении

VARIABLE v: std_logic_vector (n+1 DOWNTO 0); -- временная копия значения z --предыдущего цикла;

-- не воспроизводится в аппаратуре, а в программе

-- упрощает доступ фрагментам двумерного массива

VARIABLE r: std_logic_vector (n-2 DOWNTO 0); -- младшие разряды результата

BEGIN

IF y(0)=’0’ THEN z(0):= conv_std_logic_vector(0,n);

ELSE z(0):= ‘0’ & x;

END IF;

FOR i IN 1 TO n-1 LOOP

V:=’0’ & z(i-1); r(i-1):=v(0);

IF y(i)=’1’ THEN

z(i):= v(n+1 DOWNTO 1) + (‘0’ & x);--«лишний» разряд сохраняет перенос

- при переполнении.

ELSE z(i):= v(n+1 DOWNTO 1);

END IF;

END LOOP;

Result<=z(n-1) & r;

END PROCESS


 

 

 

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

1.Список чувствительности процесса включает сигнал синхронизации и не должен включать информационные сигналы. Кроме этого в тело процесса вводят условные операторы, разрешающие исполнение основных преобразований по фронту сигнала синхронизации (например,

IF clock=’1’and clock’event … THEN…).