[an error occurred while processing this directive]
|
я вот о чем - делал делилку 8 на 8 бит, и размеры сгенеренных сумматоров меняются от однобитного до 8
include "lpm_add_sub.inc";
-------------------------------------------------------------------------------
subdesign tstdiv
(
in_a[7..0] : input;
in_b[7..0] : input;
outr[7..0] : output;
outq[7..0] : output;
)-------------------------------------------------------------------------------
VARIABLE
sin [8..0][7..0]: NODE;
lcbuf[7..0][7..0]: LCELL;
temp [7..0][7..0]: NODE;
borrow[7..0] : NODE;
sel[7..0] : NODE;-------------------------------------------------------------------------------
BEGINsin[][] = GND;
temp[][] = GND;sel[7] = !borrow[7];
sel[6] = !borrow[6] # in_b[7];
sel[5] = !borrow[5] # in_b[7] # in_b[6];
sel[4] = !borrow[4] # in_b[7] # in_b[6] # in_b[5];
sel[3] = !borrow[3] # in_b[7] # in_b[6] # in_b[5] # in_b[4];
sel[2] = !borrow[2] # in_b[7] # in_b[6] # in_b[5] # in_b[4] # in_b[3];
sel[1] = !borrow[1] # in_b[7] # in_b[6] # in_b[5] # in_b[4] # in_b[3] # in_b[2];
sel[0] = !borrow[0] # in_b[7] # in_b[6] # in_b[5] # in_b[4] # in_b[3] # in_b[2] # in_b[1];
FOR k IN 0 TO 7 GENERATEIF k==0 GENERATE
( temp[k][0], borrow[k], ) = lpm_add_sub
( .dataa[]= in_a[7-k],
.datab[]= in_b[0]
) WITH( LPM_WIDTH=1, LPM_DIRECTION="SUB" );
ELSE GENERATE
( temp[k][k..0], borrow[k], ) = lpm_add_sub
( .dataa[]= (sin[k][k-1..0], in_a[7-k] ),
.datab[]= in_b[k..0]
) WITH( LPM_WIDTH=k+1, LPM_DIRECTION="SUB" );
END GENERATE;lcbuf[k][] =
( (sin[k][6..0],in_a[7-k]) & sel[k] ) #
( temp[k][] & !sel[k] ) ;sin[k+1][]=lcbuf[k][];
outq[7-k] = !sel[k];
END GENERATE;
outr[] = sin[8][7..0];
END;
E-mail: info@telesys.ru