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

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


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

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



Благодарю Вас за ответы и советы!

Цитата(jojo @ Mar 19 2011, 17:05) *
Да, и частоту в констрейнах можно уменьшить, чтобы понапрасну не ждать.

и так по минимуму sm.gif


Цитата(jojo @ Mar 19 2011, 17:05) *
После трассировки для неправильно размещаемых элементов можно задавать (уточнять) области, где им положено быть. Это если элементы в макрос не входят.

Будьте любезны, разъясните, пожалуйста, как это делается. Вот получил я, например, fmax=330MHz вместо ожидаемых 400МГц. И как я это исправлю, куда смотреть?

Спасибо
Go to the top of the page
 
+Quote Post
jojo
сообщение Mar 19 2011, 15:33
Сообщение #4


Знающий
****

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



Цитата(iiv @ Mar 19 2011, 17:21) *
Будьте любезны, разъясните, пожалуйста, как это делается. Вот получил я, например, fmax=330MHz вместо ожидаемых 400МГц. И как я это исправлю, куда смотреть?


Нужно сопоставлять отчёт анализатора задержек (Timequest др.) и вид проблемного пути на кристалле (FloorPlan Editor и т.п.).

Проблемный триггер или блок памяти может быть расположен в "левом" месте на кристалле, вдали от разумного, желаемого положения.
Поскольку таких элементов может быть много, их положение можно оптом законстрейнить.

Ресурсы ПЛИС расположены немонотонно, например, узкими колонками, простым констрейном размещения дело может не обойтись. В этом случае добавляем в конвейер пустые регистры, которые по алгоритму вроде не нужны, но задержку сокращают.

Покажите, если можете, аналогичную картинку своего проекта с подсвечиванием сбойных путей.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
iiv
сообщение Mar 19 2011, 19:47
Сообщение #5


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

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



Уважаемый jojo,

очень Вам благодарен за классные советы и разъяснения.

Я, к сожалению, новичек в квартусе (только один год опыта) и, некоторые вещи пока еще не знаю.

Цитата(jojo @ Mar 19 2011, 19:33) *
Покажите, если можете, аналогичную картинку своего проекта с подсвечиванием сбойных путей.


вот как это сделать, не понимаю. Допустим у меня есть собранный проект.
; Logic utilization ; 50 % ;
; Combinational ALUTs ; 23,937 / 113,600 ( 21 % ) ;
; Memory ALUTs ; 84 / 56,800 ( < 1 % ) ;
; Dedicated logic registers ; 60,800 / 113,600 ( 54 % ) ;
; Total registers ; 60800 ;
; Total block memory bits ; 4,131,624 / 5,630,976 ( 73 % ) ;
; DSP block 18-bit elements ; 210 / 384 ( 55 % ) ;

Это последний из максимальных, который у меня собирается, но его fmax=398MHz (85С) и 420МГц (0С), то есть чуть-чуть меньше, чем надо. Я кстати заметил, что хоть кристалл и до 60С разогревается во время работы, но данные бывают битые, если fmax меньше 420МГц, хотя у меня клок системы через плл из плиски задается и составляет ровно 400МГц. Возможно где-то нестабильность имеется, ну да ладно, главное я знаю на какую частоту мне все затачивать.

По спидгрейдам кристалла, умножители могут работать до 490МГц, все остальное - совсем простое - суммы примерно 40 битных чисел, работающие на полуклоке, то есть на 200МГц от основного клока.

Вот получил я Technology Map Viewver на 615 страницах sm.gif или Resource Property Editor с огромным числом информации, большая часть которой мне не понятна, или получил картинку от Chip Planner, красивая конечно, но что мне с ней делать, можно по разному ее покрасить, но путей там не видно... Если FanIn кнопку нажимаю, получается сначала какое-то мессиво, а потом квартус зависает с полной загрузкой компьютера. Это здесь именно я должен был увидеть картинку сбойных путей, подскажите, мне, если Вас не затруднит, пожалуйтса!

ЗЫ: вроде и компьютер не совсем тормознутый, 2*2.2ГГц с 8 ГБ оперативки.

Спасибо

И
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Mar 20 2011, 14:28
Сообщение #6


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

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



Цитата(iiv @ Mar 19 2011, 22:47) *
По спидгрейдам кристалла, умножители могут работать до 490МГц, все остальное - совсем простое - суммы примерно 40 битных чисел, работающие на полуклоке, то есть на 200МГц от основного клока.

Да, кстати, вот это очень интересное место. Еще не понятно как раскидал фиттер эту сумму. Ну и как у Вас чатоты в проекте соотносятся или Вы работаете на основной частоте, а 200МГц получаете используя разрешающий сигнал на триггер?
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
|- - bogaev_roman   Цитата(iiv @ Mar 19 2011, 22:47) Если Fan...   Mar 20 2011, 10:50
- - 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 Текстовая версия Сейчас: 1st July 2025 - 02:57
Рейтинг@Mail.ru


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