Programmable Devices
CPLDs, FPGAs, SoC FPGAs, Configuration, and Transceivers
20688 Discussions

Instruct Quartus to put specific circuits together and minimize delays

EugenyB
New Contributor I
764 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
750 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


0 Kudos
EugenyB
New Contributor I
745 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.
0 Kudos
sstrell
Honored Contributor III
729 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.

0 Kudos
Kenny_Tan
Moderator
717 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



0 Kudos
Kenny_Tan
Moderator
704 Views

Any further queries?


0 Kudos
EugenyB
New Contributor I
691 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.

0 Kudos
Kenny_Tan
Moderator
664 Views

Sure. you may check your email on this


0 Kudos
Kenny_Tan
Moderator
641 Views

Is there any update?


0 Kudos
Kenny_Tan
Moderator
592 Views

Hi Eugeny,


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


Thanks


0 Kudos
Kenny_Tan
Moderator
538 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. 


0 Kudos
Reply