Programmable Devices
CPLDs, FPGAs, SoC FPGAs, Configuration, and Transceivers
Announcements
Need Forum Guidance? Click here

Search our FPGA Knowledge Articles here.
18962 Discussions

Instruct Quartus to put specific circuits together and minimize delays

EugenyB
New Contributor I
367 Views

I have relatively complex circuit involving adders and cascaded embedded multipliers.

I was assuming that it would be enough to wait for 4 clock cycles between loading data into the multiplier and getting output from it, but I was mistaken.

I can increase delay, but it will not guarantee that in the next builds fitter put the logic the way that 5 or 6 cycles will not cause the problem.

Therefore there's a need to tell Quartus to make predictable layout for the circuit.

Please advise how to do it properly. I need adders with respective registers to be close to embedded multipliers, and 9x9 multipliers to be selected as close as possible to each other for cascading.

Thank you.

 

P.S. Ideally I will be super grateful if you can explain how to actually predict the timing, or where in Quartus I can see it in then comprehensive way.

0 Kudos
10 Replies
Kenny_Tan
Moderator
353 Views

You may take a look in multicycle:


https://community.intel.com/t5/FPGA-Wiki/Timing-Constraints/ta-p/735562 ->

Understanding start/end setup/hold multicycle constraints


Or, this document: https://www.intel.com/content/dam/altera-www/global/en_US/uploads/3/3f/TimeQuest_User_Guide.pdf


EugenyB
New Contributor I
348 Views

Thank you. Not sure I can write anything useful into SDC file immediately using these guides, however the matters are more or less clear. The TimeQuest analyzes the already fitted and assembled design for timing violations. I ask to instruct fitter upfront to place stuff the way they it does not violate the timing.

My case is super simple. Let;s imagine I have the following circuit:

    multiplier multiplier (
    .dataa(r_input_a[31:0]),
    .datab(r_input_b[31:0]),
    .result(w_output_result[63:0])
    );
 
and then, in always construct, driven with the same clock for launch and latch:
 
wire w_accumulator[70:0] = w_accumulator[70:0]  + { {6{1'b0}}, w_output_result[63:0]}};
 
r_input_a and r_input_b are latched on the clock edge, and accumulator is latched into another register several cycles later - using the same clock. All signals are internal, no pins are involved.
 
1. What should I write to instruct fitter/assembler to lay cascaded embedded multiplier and accumulator out to be ready with math within, let's say, 3 cycles for further latching?
2. Is there any way to force Quartus to re-fit, or give hard error, if it can not lay out the circuit the way to satisfy the multicycle timing requirement?
3. If I have tons of warnings in the TimeQuest analysis, how do I find the ones I really care about? (^F does not work in the "Compilation report" window).
 
Update: I have learned from your reply about multicycle constraints, thank you for this. Found this document, but it is beyond my understanding, and I will not be able to properly design the statements using it. In the past I was trying to constraint clocks in SDC file, and whatever I was putting into there was causing an error, thus I gave up and decided that I would better make circuits free of timing problems by design rather than learn how to properly instruct software to fix the timing in design.
sstrell
Honored Contributor III
332 Views

I believe this training talks a bit about multicycle, along with the other required constraints, like clock constraints:

https://www.intel.com/content/www/us/en/programmable/support/training/course/odsw1118.html

The cycle count seems to be the most important thing here, so I'd recommend adding pipeline registers instead of relying on multicycle and the Fitter routing appropriately.

Kenny_Tan
Moderator
320 Views

1. What should I write to instruct fitter/assembler to lay cascaded embedded multiplier and accumulator out to be ready with math within, let's say, 3 cycles for further latching?

You may use the multy cycle in the SDC, I suppose you cannot add pipeline register?

Multi Cycle is not hard to understand, If you find difficulty to understand this, we can setup a call for you.


2. Is there any way to force Quartus to re-fit, or give hard error, if it can not lay out the circuit the way to satisfy the multicycle timing requirement?

Unfortunately, nope. But you can analyze the Timing analyzer waveforms. Once you had set the multicycle, the result will be reflected in timing analyzer


3. If I have tons of warnings in the TimeQuest analysis, how do I find the ones I really care about? (^F does not work in the "Compilation report" window).

You can suppress the warning message, https://www.youtube.com/watch?v=NHsprt0UKEw



Kenny_Tan
Moderator
307 Views

Any further queries?


EugenyB
New Contributor I
294 Views

Hello Kenny, yes. Would it be possible to send you (or any other knowledgeable and experienced person you appoint) email with details on the design and description of the problems I have.

I have recently did several changes, putting output registers to the pin nearby cells, and it was working for a while, but as design grows this is not enough and workaround does not work any more.

Kenny_Tan
Moderator
267 Views

Sure. you may check your email on this


Kenny_Tan
Moderator
244 Views

Is there any update?


Kenny_Tan
Moderator
195 Views

Hi Eugeny,


Can you check your email? there are some update question over there.


Thanks


Kenny_Tan
Moderator
141 Views

We do not receive any response from you to the previous reply that we have provided. Please post a response in the next 15 days to allow me to continue to support you. After 15 days, this thread will be transitioned to community support. The community users will be able to help you with your follow-up questions. 


Reply