реклама на сайте
подробности

 
 
> Как ускорить компиляцию проекта на квартусе, при этом не уронив fmax
iiv
сообщение Mar 18 2011, 20:47
Сообщение #1


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Всем привет,

есть незадачка - мой системверилог проект очень долго компилится (2-5 часов) и не всегда его fmax бывает приемлим.

Сам проект - всего-то около 600 строк без ниоса и наворотов, используется только мегафункции памяти (M9K, M144), altpll и altmult_add.

В самом проекте есть два параметра, назову из K и M, где K - это объем кольцевого буффера памяти, M - число использующихся умножителей.

Если K примерно 70% от всей доступной памяти, M - 10% от всех доступных умножителей, fmax на основной клок получается хороший (490МГц). Компилится все около часу на хорошем i5.

Если
1) K примерно 10-20% от всей доступной памяти, M - любое, или
2) K и M примерно по 30%,
fmax получается еще приемлимый, окло 400МГц (мне не меньше надо) но компилится уже около 2-5 часов.

Если я пытаюсь задействовать почти все умножители и хотя бы 70% памяти, то обычно квартус через 1-2 часа падает со своей какой-то внутренней ошибкой или через 5-7 часов все-таки заканчивает работу, но fmax получается очень маленьким - около 300МГц.

Алгоритмически все упирается в одну простую конструкцию:
Код
...
parameter   N=42;
input                   Clk;
input       [13:0]      In[0:2];
...

reg  signed [13:0]      D[0:2][0:1];
reg  signed [13:0]      Data[0:2][0:N];
wire signed [31:0]      ScalY[0:8][0:N-1];

...

// Generating modules

generate
genvar i, j, k;
for(i=0; i<N; i+=2) begin : aaa
   for(j=0; j<3; j++) begin : bbb
     for(k=0; k<3; k++) begin : ccc
       MultOne MultOne_Module(Clk, D[j][0], D[j][1], Data[k][i], Data[k][i+1], Clk2, ScalY[j+3*k][i], ScalY[j+3*k][i+1]);
end end end
endgenerate

...


module MultOne(Clk, A1, A2, B1, B2, Clk2, Res1, Res2);
parameter SHR=18;
input Clk, Clk2;
input signed [13:0] A1, A2, B1, B2;
output reg signed [31:0] Res1, Res2;

reg signed [13:0] P1, P2, Q1, Q2;
reg signed [28:0] Sum;
reg signed [28:0] SumR0, SumR1, SumR2, SumDM0, SumDM1;
reg signed [28+SHR:0] ScalX1, ScalX2;
reg signed [31:0] Z_Res1, Z_Res2;

//   Sum<=P1*Q1+P2*Q2;
my_madd my_madd_module(Clk, P1, Q1, P2, Q2, Sum);

always @(posedge Clk)
begin
   P1<=A1;
   P2<=A2;
   Q1<=B1;
   Q2<=B2;
   SumR0<=Sum;
   SumR1<=SumR0;
   SumR2<=SumR1;
end

always @(posedge Clk2) // этот клок в два раза медленнее Clk
begin
   SumDM0<=SumR1;
   SumDM1<=SumR2;
   ScalX1<=ScalX1+SumDM0-(ScalX1>>>SHR);
   ScalX2<=ScalX2+SumDM1-(ScalX2>>>SHR);
   Z_Res1<=ScalX1[28+SHR:SHR-3];
   Z_Res2<=ScalX2[28+SHR:SHR-3];
   Res1<=Z_Res1;
   Res2<=Z_Res2;
end
endmodule


Как я понимаю, основная загвоздка у Квартуса возникает тогда, когда я пытаюсь поместить сотни дублей моего MultOne модуля (в мой кристал влазит 384) мне очень хочется вычислять при N=42, то есть когда задействовано 378 умножителей.

Теперь мой вопрос... Могу ли я как-то помочь квартусу, чтобы он стал быстрее компилировать, например, можно ли скомпилить сколько-то этих модулей и физически куда-то в кристалле разместить? Шаманил вокруг LogicLock Regions and Design Partitions Window, но, кажется так запутался, что ничего не могу поделать сам, поэтому прошу помощи у Вас!

Пожалуйста, посоветуйте, что мне сделать, чтобы увеличить fmax и не ждать по 5 часов на компиляцию этих нескольких строк кода!

ЗЫ: при компиляции в квартусе стоят все опции, которые ускоряют fmaxна основе адвизора! Если их отключать, компиляция конечно за пол часа заканчивается но и fmax даже до 200МГц не дотягивает!

Спасибо

И
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jojo
сообщение Mar 19 2011, 13:05
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 574
Регистрация: 9-10-04
Из: FPGA-city
Пользователь №: 827



Да, и частоту в констрейнах можно уменьшить, чтобы понапрасну не ждать.

После трассировки для неправильно размещаемых элементов можно задавать (уточнять) области, где им положено быть. Это если элементы в макрос не входят.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- iiv   Как ускорить компиляцию проекта на квартусе   Mar 18 2011, 20:47
- - Shtirlits   Ключевое слово верное - logic lock. С квартусом л...   Mar 18 2011, 21:26
- - des00   помочь можно только в том случае, если будет видно...   Mar 19 2011, 03:56
|- - iiv   Цитата(des00 @ Mar 19 2011, 07:56) помочь...   Mar 19 2011, 09:12
|- - jojo   Цитата(iiv @ Mar 19 2011, 12:12) Основная...   Mar 19 2011, 10:49
|- - iiv   Цитата(jojo @ Mar 19 2011, 14:49) Для пол...   Mar 19 2011, 11:11
- - Shtirlits   Logic lock не такой уж и сложный механизм! Поп...   Mar 19 2011, 11:20
|- - iiv   Благодарю Вас за ответы и советы! Цитата(jojo...   Mar 19 2011, 14:21
|- - jojo   Цитата(iiv @ Mar 19 2011, 17:21) Будьте л...   Mar 19 2011, 15:33
|- - iiv   Уважаемый jojo, очень Вам благодарен за классные ...   Mar 19 2011, 19:47
|- - bogaev_roman   Цитата(iiv @ Mar 19 2011, 22:47) Если Fan...   Mar 20 2011, 10:50
|- - bogaev_roman   Цитата(iiv @ Mar 19 2011, 22:47) По спидг...   Mar 20 2011, 14:28
- - jojo   Возможно, из-за дрожания тактового сигнала данные ...   Mar 19 2011, 21:17
|- - iiv   Уважаемые друзья, Jojo, Slawikg, Bogaev_Roman и в...   Mar 20 2011, 14:57
- - slawikg   ЦитатаПо спидгрейдам кристалла, умножители могут р...   Mar 20 2011, 14:17
- - bogaev_roman   Было бы гораздо удобней разбираться, если б Вы при...   Mar 20 2011, 15:48
|- - iiv   Уважаемый Роман, огромное спасибо Вам за советы и...   Mar 20 2011, 16:14
- - bogaev_roman   По поводу правильного использования timequest для ...   Mar 21 2011, 09:49
|- - iiv   Добрый день, Роман, огромное Вам спасибо за совет...   Apr 3 2011, 11:15
- - bogaev_roman   Цитататри клока генерятся одним ПЛЛ и имеют четко ...   Apr 4 2011, 14:59


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 05:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016