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

 
 
> Как ускорить компиляцию проекта на квартусе, при этом не уронив 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
Ответов
bogaev_roman
сообщение Apr 4 2011, 14:59
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата
три клока генерятся одним ПЛЛ и имеют четко прописанные частоты 400МГц, 200МГц и 66.(6)МГц и данные между этими домейнами постоянно гуляют туда и обратно. Правильно ли я понимаю, что их как раз ни как не надо описывать?

Входная частота у Вас 50МГц, вот ее и объявляете в качестве входной, а далее просто derive_pll_clock. Timequest сам определит для них частоту и соотношения между ними, согласно установкам мегафункции pll. Для них вроде бы больше ничего и неда объявлять.
Цитата
Сейчас у меня есть 15 клоков. Все кроме 3-х из них - это асинхронные вводы-выводы, данные между которыми ходят через FIFO.

Если эти сигналы никак не связаны с логикой, которая работает на 3 остальных частотах, то вроде бы ничего не требуется.
Цитата
Основной клок у меня 400МГц, я его получаю из ПЛЛ на основе входной 50МГц частоты. Если у меня получаются фмакс(85С)=390-410, фмакс(0С)=400-420, то на практике имеются ошибки. Похоже где-то у меня не устойчиво частота получается. Я для этого хочу в ПЛЛ указать частоту 400МГц, а Квартус заставить компилиться на 420МГц.

На какой практике? Возможно два варианта:
1) Заданы не все ограничения - что-то не учли, может проблем с времянкой нет от триггера до триггера, есть проблемы с ограничениями на вход/выход.
2) Идет граничная ситуация и Fmax все-таки меньше заданной, читайте внимательно отчет timequest и выведете все сигналы, непроходящие по частоте - report top failing patch.
Поднять частоту на 10% можно с помощью настроек синтезатора/фиттера, если оптимизация кода не спасает и не хочется липить лишних partition, но это последнее дело. Настройки сильно зависят от проекта и все-таки замедляют скорость компиляции. Для себя выделил основные настройки следующие:
физический синтез - extra, дублирование регистров
analisys & synthesys - отключить удаление регистров дубликатов, оптимизация по скорости
фиттер - стандарт, уровень оптимизации роутера - максимальный
Может помочь и банальное изменение начальной точки разводки - seed

Сообщение отредактировал bogaev_roman - Apr 4 2011, 15:03
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
- - jojo   Да, и частоту в констрейнах можно уменьшить, чтобы...   Mar 19 2011, 13:05
|- - 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


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

 


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


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