Тоже задавался этим вопросом.
Для моей задачи этого кода хватило с лихвой, что бы нагреть и "убить" FPGA: после загрузки прошивка сразу же "падала", при уменьшении количества счетчиков FPGA стартовала, и нагревалась, как и требовалось мне. Сама FPGA в моем случае не сгорела, но будьте осторожны

Уверен, что есть варианты как еще больше нагрузить ПЛИСину, но дальше эту тему я не копал.
Код
// Код можно использовать только на свой страх и риск.
// Последствий за то, что случится с вашей железякой я не несу :)
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 маленький, то надо задрать его на максимум :)