Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Тестовый проект
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
alexadmin
У многих, наверное, возникают задачи для вновь создаваемого устройства создать тестовый проект, который бы "загружал" FPGA на 80-90% - проверить температуру/энергопотребелние и т.д. Понятно, что можно нагородить что-то в каждом конкретном случае, но надоело. Может кто-то писал (или встречал) готовый тестовый проект, в котором можно параметрами задать входную разрядность данных, примерное использование логики/регистров/dsp/памяти и получить готовый результат? Неохота в очередной раз городить велосипед.
Bad0512
Цитата(alexadmin @ May 6 2014, 14:10) *
У многих, наверное, возникают задачи для вновь создаваемого устройства создать тестовый проект, который бы "загружал" FPGA на 80-90% - проверить температуру/энергопотребелние и т.д. Понятно, что можно нагородить что-то в каждом конкретном случае, но надоело. Может кто-то писал (или встречал) готовый тестовый проект, в котором можно параметрами задать входную разрядность данных, примерное использование логики/регистров/dsp/памяти и получить готовый результат? Неохота в очередной раз городить велосипед.

Всё это очень "пальцем в небо". Правильнее ИМХО использовать power estimator (по уже разведённому дизайну). Точность в районе 30% если всё правильно задано.
count_enable
В любом случае все интересующие параметры очень зависят от разводки. Пока тестовый проект будет иметь другую разводку, ценность его очень сомнительна. Поставив кучу кольцевых осциляторов в одном месте можно сжечь плисину, а если их размазать по кристаллу то он даже не почувствует.
Maverick
Цитата(count_enable @ May 6 2014, 11:27) *
В любом случае все интересующие параметры очень зависят от разводки. Пока тестовый проект будет иметь другую разводку, ценность его очень сомнительна. Поставив кучу кольцевых осциляторов в одном месте можно сжечь плисину, а если их размазать по кристаллу то он даже не почувствует.


энергопотребление зависит от количества тригеров переключаемых в еденицу времени (в основном) + потребление портов I/O...
от разводки мало чего зависит (мое мнение, но могу ошибаться)
что можно сжечь плис от "проект, который бы "загружал" FPGA на 80-90%" - впервые слышу, да нагрев для "больших" плис возможен...
alexadmin
Я согласен, что у такого метода есть свои недостатки. Но и важный плюс - проверка на практике. Можно тнуть пальцем и сказать, типа вот FPGA ест 20А и все работает (ну или пытается есть 20А, а ваш говеный источник...). Конечно, на готовом [завершенном] проекте было бы лучше, но где ж его взять...
Maverick
Цитата(alexadmin @ May 6 2014, 12:26) *
Я согласен, что у такого метода есть свои недостатки. Но и важный плюс - проверка на практике. Можно тнуть пальцем и сказать, типа вот FPGA ест 20А и все работает (ну или пытается есть 20А, а ваш говеный источник...). Конечно, на готовом [завершенном] проекте было бы лучше, но где ж его взять...

так возьмите сгенерируйте множество однотипных модулей (где есть множество тригеров переключаемых в еденицу времени (на каждом такте клока), например FFT), которые б занимали необходимое кол-во ресурсов - запрограмируйте и посмотрите потребелние и температуру. Да, будет погрешность в потребелении, т.к. в настоящем проeкте будут "правильно" использоваться блоки I/O
Если есть контроллеры памяти или шины (например PCIe) задествуйте их - непрерывным чтением и записью данных (например значений счетчика).
PS например у тексаса (кажется это есть и у линертехнолоджи) есть рекомендации выбора микросхем источников питания под конкретную плис...
ViKo
Например, длинную линию задержки на триггерах сделать. На все триггеры! yeah.gif
А чтобы все входы-выходы использовать, сделать не одноразрядную задержку, а шину размером IO / 2.
Maverick
Цитата(ViKo @ May 6 2014, 12:41) *
Например, длинную линию задержки на триггерах сделать. На все триггеры! yeah.gif

прикольное предложение и простое как пять копеек sm.gif
yes
Цитата(Maverick @ May 6 2014, 13:23) *
от разводки мало чего зависит (мое мнение, но могу ошибаться)


разводка в ПЛИС это буфера, мультиплексоры/демультиплекоры и т.п. то есть транзисторы, которые переключаются - то есть от разводки должно зависеть, но как измерить - не знаю, можно, наверно, длинную цепочку неоптимизируемых(!) буфферов и в одном случае разрешить их разместить автомату, а в другом задать размещения в разных углах...

если мне нужно оценить параметры ПЛИС - беру какой-нибудь масштабируемый проект - SHA, биткоины и т.п. и сравниваю результаты эстиматора с тем же кодом для известной ПЛИС
alexadmin
Цитата(ViKo @ May 6 2014, 13:41) *
Например, длинную линию задержки на триггерах сделать. На все триггеры! yeah.gif
А чтобы все входы-выходы использовать, сделать не одноразрядную задержку, а шину размером IO / 2.


А логика, а DSP, а память?
На мой взгляд стоит уж тогда брать какой-нибудь готовый блок типа AES (это LUTы + DFF), и FIR (это DSP и те же DFF) ну и что-то типа FIFO для памяти и размножать это в параллель. Это и будет тот велосипед вместо которого надеялся что-то готовое найти...
ViKo
Если искать предельные возможности, нужно, чтобы использовались все узлы, на максимальной частоте (или на той, на которой рабочий проект будет работать). Поэтому должно быть что-то примитивное, чтобы гарантировать, что вся логика работает. FIFO на триггерах, FIFO в памяти. В DSP - умножать слово на слово каждый такт.

У Altera тепловыделение рассчитывается Quartus-ом.
johan
Тоже задавался этим вопросом.
Для моей задачи этого кода хватило с лихвой, что бы нагреть и "убить" FPGA: после загрузки прошивка сразу же "падала", при уменьшении количества счетчиков FPGA стартовала, и нагревалась, как и требовалось мне. Сама FPGA в моем случае не сгорела, но будьте осторожны sm.gif
Уверен, что есть варианты как еще больше нагрузить ПЛИСину, но дальше эту тему я не копал.

Код
// Код можно использовать только на свой страх и риск.
// Последствий за то, что случится с вашей железякой я не несу :)
localparam CNT_WIDTH = 32;
localparam CNT_CNT   = 400;

logic [CNT_CNT-1:0][CNT_WIDTH-1:0] cnt0;

genvar z;

generate
  for( z = 0; z < CNT_CNT; z++ )
    begin : zzz
      if( z == 0 )
        begin
          always_ff @( posedge clk )
            cnt0[z] <= cnt0[z] + 1'd1;
        end
      else
        begin
          always_ff @( posedge clk )
           // специально инвертим сумму, что бы было больше переходных состояний, так, каждый такт у нас будет то маленькое, то большое число
           // чем больше переходных состояний - тем больше потребление должно быть
            cnt0[z] <= ~(cnt0[z] + cnt0[z-1]);
        end
    end
endgenerate

// ну и потом cnt0 объединить по ИЛИ/И и вывести на пин/статусные регистры.
// + Эти счетчики нужно повесить на блоки памяти и случайно записывать - читать, код с памятью не сохранился, но он тривиален.
// + Если у вас системный сlk маленький, то надо задрать его на максимум :)
o_khavin
Цитата(ViKo @ May 6 2014, 13:41) *
Например, длинную линию задержки на триггерах сделать. На все триггеры! yeah.gif
А чтобы все входы-выходы использовать, сделать не одноразрядную задержку, а шину размером IO / 2.

Во времена бурной молодости я проводил такие эксперименты - пускал чередование 0 и 1 через цепочки FF->SRL->FF во всю "ширину" кристалла (вроде это был второй Виртекс) с разрядностью во всю "высоту" кристалла. При полной загрузке такой логикой происходило срабатывание защиты - на осциллографе виделось самопроизвольное дёргание init-а чрез очень небольшое время после done-а. При неполной загрузке наблюдался прогрев чипа до 90 градусов (по показаниям внутреннего датчика). biggrin.gif
mr.alexeevas
Самое простое, на мой взгляд: DDS + FIR. Можно 2 фильтра, на одном умножители это DSP-блоки, а на другом умножители на логике. Варируем параметрами фильтром и загружаем плис на нужный %. Такой проект собирается за несколько минут. Сам так проверял, чтобы уже наверняка знать потребление.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.