Jump to content

    
Sign in to follow this  

Recommended Posts

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

 

Перевожу некоторые наработки с 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 ничего не дал.

 

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

Share this post


Link to post
Share on other sites
Доброе время суток...

 

Перевожу некоторые наработки с 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:

Share this post


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

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

 

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

 

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

Share this post


Link to post
Share on other sites
Проще в таком случае и далее использовать 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.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this