So truncate is actually kind of hard to decide on. In general, I've had mixed results with regard to using round-to-even, versus "truncate, but use one extra bit". I think that the round choice is more important on a coherent application, but this is still guesswork.

Saturate is much easier. Anytime you saturate, your snr is basically ruined. It's like clipping your ADC. In DSP land, it's like adding a huge delta function at each saturate/wrap point (bigger delta for a wrap). Do it once in a thousand times and your SNR is instantly down to ~30 dB. That being said, the rule of thumb is "never, EVER clip any part of your signal chain". So its reasonable to use wrap... since once you saturate, it's so bad (and obvious) that using saturate isn't even important anymore.

With bit growth, I used to go for an analytical solution -- or even just a strong rule-of-thumb. I have a few of the latter nowadays, but I pretty much just do robust SNR analysis against expected values, reduce until I'm just marginal and then add back 2-3 bits to be safe.



On 04/08/2013 09:44 PM, David MacMahon wrote:
Hi, Ryan,

I agree that setting wrap and truncate would probably resolve the timing issue, 
but I'm not so sure it's generally advisable to do so.  Have you done any 
analysis comparing the effects of wrap and truncate vs saturate and 
round-to-even?

That said, I do think the implementation could be smarter about bit growth in 
the twiddle block(s).  The twiddle step is simply a rotation in the complex 
plane, so I think there is no reason to grow more than one non-fractional bit.  
There is also little reason to grow fractional bits since rotation doesn't 
increase precision at all, though maybe one fractional bit could be argued for.

Dave

On Apr 8, 2013, at 7:37 PM, Ryan Monroe wrote:

Or set the rounding options on the block to wrap / truncate, which will 
probably resolve the issue.

At the very least, set "wrap".  Any situation which causes a saturate will be a 
catastrophe for the system anyways.  The fact that a wrap is twice (or more) as bad is 
irrelevant at that point.  There's no reason for casper FFT blocks to have a saturate 
option, in my opinion..


To be clear, the "fanout" issue that Issac and I resolved was atypical.  You 
probably shouldn't look to that first if you're having timing issues.


On 04/08/2013 04:52 PM, David MacMahon wrote:
Hi, Katty,

The first error report in the timing file shows this:


   Source:               
tut3_XSG_core_config/tut3_XSG_core_config/tut3_x0/fft_wideband_real_e4c9925378/fft_biplex_real_4x0_3de6c27f63/biplex_core_6535c8c7e0/fft_stage_5_6db5e3967b/butterfly_direct_eff8a62bdf/twiddle_general_4mult_3ae9ad9772/mult/Maddsub_mult_46_56
 (DSP)

   Destination:          
tut3_XSG_core_config/tut3_XSG_core_config/tut3_x0/fft_wideband_real_e4c9925378/fft_biplex_real_4x0_3de6c27f63/biplex_core_6535c8c7e0/fft_stage_5_6db5e3967b/butterfly_direct_eff8a62bdf/twiddle_general_4mult_3ae9ad9772/convert0/convert/latency_lt_4.reg_out/partial_one.last_srl17e/reg_array[3].fde_used.u2
 (FF)

This means that this timing error is occurring in the twiddle_general_4mult 
block between the multiply-add DSP48 and subsequent convert block.  In fact, 
all of the timing erros were related to different bits of this same path.  The 
twiddle_general_4mult block uses the Xilinx convert block which is known to 
have sub-optimal timing.  The twiddle_general_4mult block should probably be 
updated to use the CASPER convert block.  That will likely result in better 
timing, but could have other undesirable side effects (e.g. using too many 
DSP48s).

Until this block is updated, you'll have to somehow ease the timing in some other way.  Either use 
PlanAhead to manually "pre-place" the design or add some pipelining registers to ease 
timing of other tight areas (generate a verbose timing remote using ISE or the "trce" 
command from the command line to find other tight areas).

Hope this helps,
Dave

On Apr 5, 2013, at 6:09 AM, katherine viviana cortes urbina wrote:


ERROR: 1 constraint not met.

PAR could not meet all timing constraints. A bitstream will not be generated.

To disable the PAR timing check:

1> Disable the "Treat timing closure failure as error" option from the Project 
Options dialog in XPS.

OR

2> Type following at the XPS prompt:
XPS% xset enable_par_timing_error 0


I saw in the system.twr file the error of fanout I think this isn't the case
but if I have an error the timing in some block, someone can help identify and 
fix it.

Cheers

Katty

Pd: the clock in the FPGA this is 225 MHz and the ADC 900 MHz
<system.twr>



Reply via email to