Intel® Quartus® Prime Software
Intel® Quartus® Prime Design Software, Design Entry, Synthesis, Simulation, Verification, Timing Analysis, System Design (Platform Designer, formerly Qsys)
Intel Support hours are Monday-Fridays, 8am-5pm PST, except Holidays. Thanks to our community members who provide support during our down time or before we get to your questions. We appreciate you!

Need Forum Guidance? Click here
Search our FPGA Knowledge Articles here.

Critical Path in Loop

Honored Contributor II

I'm trying to the use the details of the loop analysis report to decrease the ii of a loop. Unfortunately I can't find a good explanation about some of the details. I've posted the output of part of the report below, followed by some questions. 

The critical path that prevented successful II = 1 scheduling: Number of nodes in critical path exceeded what the compiler has captured. Only the top 13 failing nodes are listed. 1.1 clock cycle Select Operation ( 195, 199) 1.1 clock cycle Select Operation ( 144, 222, 362, 366, 371, 388, 390) 1.1 clock cycle Select Operation ( 191, 192) 1 clock cycle Left Shift Operation ( 195) 0.22 clock cycles 32-bit Integer Add Operation ( 1220, 1228, 1235) 0.22 clock cycles 32-bit Integer Add Operation ( 1220, 1235) 0.22 clock cycles 32-bit Integer Add Operation ( 1235) .........  

Question 1) - The first bullet says the number of nodes in critical path is beyond what the compiler captured, and the top 13 FAILING does are listed. Some of the bullets below that are > 1 clock cycle, some are < 1 clock cycle. Is each bullet an independent critical path? If so, aren't the paths < 1 NOT failing? Am I missing something here? If I know I can focus on the bullets that are > 1 to get to an ii of 1 it would be easier. 


Question 2) - Bullet 1 indicates a 1.1 clock cycle select operation on the "stallRead" variable. I can't fathom how this logic can't be accomplished in a single clock cycle. See the code segment below. I want to read from a channel on every loop, until an end of frame flag is set in the read data. At that point, stall for 6 clock cycles then then start reading again. 


uchar stallRead = 0; while(1) { if (stallRead == 0) { rxData = read_channel_intel(TOCLIENT); rxWord =; rxStatus = parseStatus(rxData.header); if (rxStatus.eop) //if we hit a end of frame flag, stall for a few clock cycles stallRead = 0x40; } else stallMacRead = stallMacRead >> 1; case statement and other logic......  


Thanks, any suggestions or pointing to examples or documentation is appreciated.
0 Kudos
0 Replies