Перейти к содержанию
    

Max Plus vs Quartus

Доброе время суток...

 

Перевожу некоторые наработки с Max Plus'а в Quartus.

 

Вот пример некторого модуля AHDL:

 

PARAMETERS
(
 WIDTH = 16
);

SUBDESIGN ShiftRegZ
(
 CLK   	: input;
 LDn		  : input;
 Data[WIDTH-1..0]: input;
 Out[WIDTH-1..0]: output;
 Zero    : output; 
)

VARIABLE

Q[WIDTH-1..0]	: dff;
Ds[WIDTH-1..0]	: node;
QC[WIDTH-1..0]	: node;

BEGIN

Q[].clk = clk;
Q[].clrn = vcc;

Ds[] = (Q[WIDTH-2..0], gnd);

if(!LDn) then
  Q[] = Data[];
else
  Q[] = Ds[];
end if;

QC[0] = carry(!Q[0]);
for i IN 1 to WIDTH-1 generate
  QC[i] = carry( QC[i-1] and !Q[i] );
end generate;

Zero = lcell(QC[WIDTH-1]);
Out[] = Q[]; 

END;

 

При компиляции в Max Plus - занимает 17 ячеек. При компиляции в Quartus 9.0 - 33 ячейки. Оптимизация везде Speed.

 

Quartus отказывается впихивать CARRY в ячеки со соответствующими тригерами.

 

Перебор вариантов опций в Quartus ничего не дал.

 

Как победить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброе время суток...

 

Перевожу некоторые наработки с Max Plus'а в Quartus.

 

Вот пример некторого модуля AHDL:

 

PARAMETERS
(
 WIDTH = 16
);

SUBDESIGN ShiftRegZ
(
 CLK   	: input;
 LDn		  : input;
 Data[WIDTH-1..0]: input;
 Out[WIDTH-1..0]: output;
 Zero    : output; 
)

VARIABLE

Q[WIDTH-1..0]	: dff;
Ds[WIDTH-1..0]	: node;
QC[WIDTH-1..0]	: node;

BEGIN

Q[].clk = clk;
Q[].clrn = vcc;

Ds[] = (Q[WIDTH-2..0], gnd);

if(!LDn) then
  Q[] = Data[];
else
  Q[] = Ds[];
end if;

QC[0] = carry(!Q[0]);
for i IN 1 to WIDTH-1 generate
  QC[i] = carry( QC[i-1] and !Q[i] );
end generate;

Zero = lcell(QC[WIDTH-1]);
Out[] = Q[]; 

END;

 

При компиляции в Max Plus - занимает 17 ячеек. При компиляции в Quartus 9.0 - 33 ячейки. Оптимизация везде Speed.

 

Quartus отказывается впихивать CARRY в ячеки со соответствующими тригерами.

 

Перебор вариантов опций в Quartus ничего не дал.

 

Как победить?

 

Переписать по-нормальному, без "умничанья" в виде абсолютно тут ненужных carry и тем более lcell.

Это Ваш код? Или Вас кто-то хотел поразить "крутизной" оптимизации? :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Переписать по-нормальному, без "умничанья" в виде абсолютно тут ненужных carry и тем более lcell.

Это Ваш код? Или Вас кто-то хотел поразить "крутизной" оптимизации? :biggrin:

 

Код мой, здесь в несколько упрощенном варианте. Был написан из-за необходимости впихнуть невпихуемое. Переписать? Нет смысла. Проще в таком случае и далее использовать MaxPlus для этих проектов.

 

Конечно, сейчас на SV до такого не "опускаюсь". Но хочется разобраться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проще в таком случае и далее использовать MaxPlus для этих проектов.

 

Проще ! Я за.

 

Я здесь комбинаторику тестировал

http://project-ideas-yaroslav.blogspot.com...01_archive.html

 

Пробуй через Netlist Writer витянуть Verilog code + додаэш модули как здесь

http://project-ideas-yaroslav.blogspot.com...01_archive.html

+ у тебя еще будет DFF или DFFE.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...