[an error occurred while processing this directive]
|
Вот. Выдаем на выход (регистровый) минимальное или максимальное (выбирается SEL'ом) из двух входных. Специально написал так, чтобы не видеть, что там синтезатор навыдумывает. Все прозрачно и видно, как должно лечь в LUT. Итого на циклоне 9 лутов, как и положено, а вот на втором проигнорированы все CARRY_SUM и 15 лутов. Кто тут виноват? Квартус не хочет или циклон не может?
parameters ( WIDTH=8 );subdesign test (
dataa[WIDTH-1..0] : INPUT;
datab[WIDTH-1..0] : INPUT;
out[WIDTH-1..0] : OUTPUT;
clk, sel, reset : INPUT;
)VARIABLE
out_reg[WIDTH-1..0] : DFFEAS;
comp[WIDTH-1..0] : CARRY_SUM;
selector : LCELL;
BEGIN
for i in 0 to WIDTH-1 generate
if (i==0) generate
comp[i].sin = dataa[i];
comp[i].cin = dataa[i] # !datab[i];
else generate
comp[i].sin = dataa[i];
comp[i].cin = dataa[i] & (!datab[i] # comp[i-1].cout) # !dataa[i] & !datab[i] & comp[i-1].cout;
end generate;
out_reg[i].D = comp[i].sout;
out_reg[i].asdata = datab[i];
out_reg[i].clrn = reset;
out_reg[i].sload = selector;
out_reg[i].clk = clk;
end generate;selector = comp[WIDTH-1].cout $ sel;
out[] = out_reg[];
END;
E-mail: info@telesys.ru