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

 
 
 
Reply to this topicStart new topic
> помогите с оптимизацией проекта, ТаймКвест ругается на altshift_taps
novartis
сообщение Mar 13 2014, 14:50
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Здравствуйте, помогите с оптимизацией проекта под Альтерой Циклон5.
В исходном коде verilog (код не мой, но мне достался на доделки) имеется фифо SFIFO. По сути это большой сдвиговый регистр.
Квартус автогенерирует для этого фифо компонент altshift_taps и распределяет по рам-ячейкам.
Частота работы с этим фифо задана 175 МГц (а хочется еще больше).
Иногда удается достичь такую частоту.
А иногда после изменений и очередной компиляции ТаймКвест показывает 150МГц и ругается на
FPGA_Calc_CT:FPGA_Calc_CT_inst|hmod:\gen_hsh0:hsh0_inst|altshift_taps:SFIFO_rtl_0|shift_taps_j0v:auto_generated|
cntr_cjf:cntr1|counter_reg_bit[2]
FPGA_Calc_CT:FPGA_Calc_CT_inst|hmod:\gen_hsh0:hsh0_inst|altshift_taps:SFIFO_rtl_0|shift_taps_j0v:auto_generated|
dffe3a[1]

Прикрепленное изображение


От компиляции к компиляции конкретные биты и элементы фифо могут получаться другие в ТаймКвесте.

Есть ли способ указать квартусу разместить это фифо на ALM, а не на рамах? И поможет ли это?

И еще вопрос. Как уже написал. Иногда фитеровщик разводит под заданную частоту, а иногда нет, хотя существенных изменений в коде не производится.
Можно ему както дать понять, что заданные констрейны нужно выполнить хоть кровь из носа, а не так, как это он делает сейчас - иногда плучится, иногда нет.

код (условный):
Код
reg [63:0]SFIFO[40:0];

always @(posedge Clk)
begin
...
SFIFO[23]  <= SFIFO[22];
SFIFO[24]  <= SFIFO[23];
SFIFO[25]  <= SFIFO[24];
SFIFO[26]  <= SFIFO[25];
q[27]         <= SFIFO[26] + 32'h11111111; //sum const
SFIFO[27]  <= SFIFO[26];
SFIFO[28]  <= SFIFO[27];
SFIFO[29]  <= SFIFO[28];
SFIFO[30]  <= SFIFO[29];
q[30]         <= SFIFO[29] + 32'h22222222; // sum const
...
end
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 13 2014, 14:58
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Используйте Design space explorer - он как раз этим и занимается, запихивает проект "кровь из носа"
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 13 2014, 15:10
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Цитата(novartis @ Mar 13 2014, 16:50) *
..
Есть ли способ указать квартусу разместить это фифо на ALM, а не на рамах?
..

Судя по пути, вы используете именно altshift_taps а не SCFIFO. А altshift_taps это по определению RAM-Based Shift Register Megafunction.
Попробуйте руками переписать.
Go to the top of the page
 
+Quote Post
novartis
сообщение Mar 14 2014, 03:43
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



За подсказку про DSE спасибо, никогда им не пользовался, запускать-запускал, но не пользовался. Сейчас проект компилится 20 минут, я так понимаю ДСЕ будет крутить проект долго-долго, хотелось бы, чтобы он часов за 7 завершил свою работу.


По поводу altshift_taps. Я не пытаюсь использовать эту мегафункцию, квартус сам автоматически генерирует ее. Я бы хотел посмотреть на репорт ТаймКвеста без применения этой мегафункции. А как переписать ручками быстро и непринужденно - ничего в голову не приходит.
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 14 2014, 03:52
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



так отключите инферринг регистров сдвига в опциях синтезатора, кажется, Auto Shift Register Recognition
Go to the top of the page
 
+Quote Post
o_khavin
сообщение Mar 14 2014, 13:23
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094



Цитата(novartis @ Mar 14 2014, 07:43) *
По поводу altshift_taps. Я не пытаюсь использовать эту мегафункцию, квартус сам автоматически генерирует ее. Я бы хотел посмотреть на репорт ТаймКвеста без применения этой мегафункции. А как переписать ручками быстро и непринужденно - ничего в голову не приходит.

Сдвиговый регистр легко и непринуждённо превращается в кольцевой буфер с общим указателем на чтение и запись. Глубина регистра регулируется максимальным значением указателя, после которого он переходит в ноль. Это если чистый код охота написать.
Есть ещё вариант явной замены сдвигового регистра на, не к ночи будет помянута, мегафункцию, в которой наверняка можно указать тип используемых ресурсов, например блочная память или обычные FF-ы.

Кстати, приведённая картинка как-то не особо соответствует Вашему описанию. Я не очень хорошо ориентируюсь в альтеровском софте, но, IMHO, там банально сумматор между двумя регистрами не успевает пробежать.

Сообщение отредактировал o_khavin - Mar 14 2014, 13:31
Go to the top of the page
 
+Quote Post
Viwon
сообщение Mar 19 2014, 08:26
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 18-03-14
Пользователь №: 80 976



Попробуйте Tools->Advisors->Timing Optimization Advisor, в каждом пункте, где возможно нажмите Correct the Settings. У меня в свое время компилятор, также от компиляции к компиляции, то укладывал все без проблем, то появлялись проблемы с счетчиками, компараторами, после указанной операции запасы по времени возросли аж в 4 раза!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 4th July 2025 - 02:43
Рейтинг@Mail.ru


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