Programmable Devices
CPLDs, FPGAs, SoC FPGAs, Configuration, and Transceivers
21611 讨论

Instruct Quartus to put specific circuits together and minimize delays

EugenyB
新分销商 I
1,614 次查看

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 项奖励
10 回复数
KennyTan_Altera
主持人
1,600 次查看

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 项奖励
EugenyB
新分销商 I
1,595 次查看

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 项奖励
sstrell
名誉分销商 III
1,579 次查看

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 项奖励
KennyTan_Altera
主持人
1,567 次查看

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 项奖励
KennyTan_Altera
主持人
1,554 次查看

Any further queries?


0 项奖励
EugenyB
新分销商 I
1,541 次查看

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 项奖励
KennyTan_Altera
主持人
1,514 次查看

Sure. you may check your email on this


0 项奖励
KennyTan_Altera
主持人
1,491 次查看

Is there any update?


0 项奖励
KennyTan_Altera
主持人
1,442 次查看

Hi Eugeny,


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


Thanks


0 项奖励
KennyTan_Altera
主持人
1,388 次查看

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 项奖励
回复