|
Как ускорить компиляцию проекта на квартусе, при этом не уронив fmax |
|
|
|
Mar 18 2011, 20:47
|
вопрошающий
    
Группа: Свой
Сообщений: 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МГц не дотягивает! Спасибо И
|
|
|
|
|
 |
Ответов
|
Mar 19 2011, 14:21
|
вопрошающий
    
Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436

|
Благодарю Вас за ответы и советы! Цитата(jojo @ Mar 19 2011, 17:05)  Да, и частоту в констрейнах можно уменьшить, чтобы понапрасну не ждать. и так по минимуму  Цитата(jojo @ Mar 19 2011, 17:05)  После трассировки для неправильно размещаемых элементов можно задавать (уточнять) области, где им положено быть. Это если элементы в макрос не входят. Будьте любезны, разъясните, пожалуйста, как это делается. Вот получил я, например, fmax=330MHz вместо ожидаемых 400МГц. И как я это исправлю, куда смотреть? Спасибо
|
|
|
|
|
Mar 19 2011, 15:33
|
Знающий
   
Группа: Свой
Сообщений: 574
Регистрация: 9-10-04
Из: FPGA-city
Пользователь №: 827

|
Цитата(iiv @ Mar 19 2011, 17:21)  Будьте любезны, разъясните, пожалуйста, как это делается. Вот получил я, например, fmax=330MHz вместо ожидаемых 400МГц. И как я это исправлю, куда смотреть? Нужно сопоставлять отчёт анализатора задержек (Timequest др.) и вид проблемного пути на кристалле (FloorPlan Editor и т.п.). Проблемный триггер или блок памяти может быть расположен в "левом" месте на кристалле, вдали от разумного, желаемого положения. Поскольку таких элементов может быть много, их положение можно оптом законстрейнить. Ресурсы ПЛИС расположены немонотонно, например, узкими колонками, простым констрейном размещения дело может не обойтись. В этом случае добавляем в конвейер пустые регистры, которые по алгоритму вроде не нужны, но задержку сокращают. Покажите, если можете, аналогичную картинку своего проекта с подсвечиванием сбойных путей.
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 19 2011, 19:47
|
вопрошающий
    
Группа: Свой
Сообщений: 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 страницах  или Resource Property Editor с огромным числом информации, большая часть которой мне не понятна, или получил картинку от Chip Planner, красивая конечно, но что мне с ней делать, можно по разному ее покрасить, но путей там не видно... Если FanIn кнопку нажимаю, получается сначала какое-то мессиво, а потом квартус зависает с полной загрузкой компьютера. Это здесь именно я должен был увидеть картинку сбойных путей, подскажите, мне, если Вас не затруднит, пожалуйтса! ЗЫ: вроде и компьютер не совсем тормознутый, 2*2.2ГГц с 8 ГБ оперативки. Спасибо И
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|