Hey Daniel

Things start to get sticky when you go above 200MHz FPGA clock with that tute 3 spectrometer, so you might have to tweak some things under the hood to get it working at 250MHz. Have a look at this thread:
http://www.mail-archive.com/[email protected]/msg01804.html

As Mark said, have a look at the detailed timing report to try and track down the rogue blocks.

Also, make sure you're using an up-to-date git repository; Andrew made some useful changes to the pfb and adc blocks to make them behave nicer at higher frequencies (thanks Andrew!). In particular, these commits are a must:
http://casper.berkeley.edu/git/?p=mlib_devel/bwrc.git;a=commit;h=d81d7523efbbb7668ea04a4b3ce3ddc3107ad875
http://casper.berkeley.edu/git/?p=mlib_devel/bwrc.git;a=commit;h=37c90e2b98da3a48a4d3f7b67980fdd28b32a6ce

To summarize all this, to get the spectrometer working at 250MHz I would suggest:
* updating to the latest git repository
* deleting the PFB_FIR_REAL block and dragging in a new one from your newly updated library
* deleting the FFT block too, and adding in a new one
* changing to the settings mentioned here: http://www.mail-archive.com/[email protected]/msg01804.html

Hope that makes sense!

Cheers and good luck
Danny


On 01/03/2011 22:17, Mark Wagner wrote:
Hi Daniel,

From the Matlab command prompt, you can type dos('timingan') and then open the timing report ./XPS_ROACH_base/implementation/system.twx from the analyzer. You'll see where the timing issues are occurring (i.e. negative slack). You can then go back to your design and add registers or delays where appropriate to hopefully allow data to propagate in a reasonable time. This takes up resources though, and can sometimes make things worse. If you're unable to get the design to meet timing at this point, it may behoove you to use the floor planner.

Mark


2011/3/1 Daniel Esteban Herrera Peña <[email protected] <mailto:[email protected]>>

    Continuing with the frequency problem...

    Now from CentOS I checked the same design, it's the spectrometer
    from tutorial 3 which I change freq from 800 to 1000MHz and I also
    change the User IP Clock Rate from 200 to 250MHz, the synthesis
    stops in the same error, but now I see that the numbers are slight
    different:


    
----------------------------------------------------------------------------------------------------------
     Constraint                                |    Check    | Worst
    Case |  Best Case | Timing |   Timing
| | Slack | Achievable | Errors | Score
    
----------------------------------------------------------------------------------------------------------
* PERIOD analysis for net "tut3_adc/tut3_ad | SETUP | -1.638ns| 5.638ns| 110| 45473 c/adc_clk_dcm" derived from NET "tut3_ad | HOLD | 0.102ns| | 0| 0 c/tut3_adc/adc_clk_buf" PERIOD = 4 ns HIG | | | | | H 50% | | | | |

    I don't know what else I need to do! any insight will be greatly
    appreciated!

    Cheers,

    Daniel.


    On Fri, 25 Feb 2011 16:46:45 -0300, Daniel Esteban Herrera Peña
    <[email protected] <mailto:[email protected]>> wrote:

        Hi Henry,

        Thanks for your quick response, as you thought, I indeed enter
        2000... in the meantime I digest how ADC works, I tried to compile
        changing freq 800 to 1000 in the original design (no
        interleaving),
        and I receive this error:


        
----------------------------------------------------------------------------------------------------------
         Constraint                                |    Check    | Worst
        Case |  Best Case | Timing |   Timing
| | Slack
        | Achievable | Errors |    Score

        
----------------------------------------------------------------------------------------------------------
        * PERIOD analysis for net "spec_1ghz_adc/sp | SETUP       |
        -0.656ns|     4.656ns|     123|       31325
         ec_1ghz_adc/adc_clk_dcm" derived from  NE | HOLD        |
        0.118ns|            |       0|           0
         T "spec_1ghz_adc/spec_1ghz_adc/adc_clk_bu |             |
        |            |        |
         f" PERIOD = 4 ns HIGH 50%                 |             |
        |            |        |

        
----------------------------------------------------------------------------------------------------------
         TS_epb_clk = PERIOD TIMEGRP "epb_clk" 88  | SETUP       |
        0.134ns|    11.229ns|       0|           0
         MHz HIGH 50%                              | HOLD        |
        0.360ns|            |       0|           0

        
----------------------------------------------------------------------------------------------------------
         NET "spec_1ghz_adc/spec_1ghz_adc/adc_clk_ | MINLOWPULSE |
        1.000ns|     3.000ns|       0|           0
         buf" PERIOD = 4 ns HIGH 50%               |             |
        |            |        |

        
----------------------------------------------------------------------------------------------------------
         NET "epb_cs_n_IBUF" MAXDELAY = 4 ns       | MAXDELAY    |
        2.366ns|     1.634ns|       0|           0

        
----------------------------------------------------------------------------------------------------------
         NET "spec_1ghz_adc/spec_1ghz_adc/adc_clk_ | N/A         |
        N/A|         N/A|     N/A|         N/A
         buf" PERIOD = 4 ns HIGH 50%               |             |
        |            |        |

        
----------------------------------------------------------------------------------------------------------

        I see with this that I won't even be able to compile an
        interleaved
        design, what else I can try?

        Thank you,

        Daniel H.

        On Fri, 25 Feb 2011 10:58:47 -0800, Henry Chen
        <[email protected] <mailto:[email protected]>>
        wrote:

            Hi Daniel,

            It looks like you might have put 2000 into the "ADC clock
            rate"
            setting in the ADC yellow block. This will try to run the
            FPGA at
            500MHz, which explains the timing error (it's very difficult
            to run the FPGA beyond 350MHz for a complex DSP design).

            I'm guessing you want to sample at 2GS/s, in which case
            you would put
            1000 into the "ADC clock rate" box, and check the "ADC
            interleave mode"
            box, which will give you the effective 2GHz sampling rate.
            It will also
            run the FPGA at a much more manageable 250MHz.

            What you put into the "ADC clock rate" box indicates the
            frequency of
            the actual sampling clock signal you would connect to the
            ADC board,
            rather than the effective sampling rate. For the iADC it
            can't go much
            beyond 1GHz.

            Sorry that it's kind of confusing!

            Thanks,
            Henry

            On 2/25/2011 7:56 AM, Daniel Esteban Herrera Peña wrote:

                Hi everyone,
                I could sucessfully synthesize the spectrometer
                example, now I tried to change input frequency from
                the original 800MHz to 2000MHz using interleave mode,
                in order to avoid major changes in the design, I
                connected o0, o2, o4 and o6 in the pfb block (putting
                a terminator on the rest on the ADC outputs), after
                some minutes compiling a timing error appears, very
                similar that I had before but because of a low freq
                input clock, this time I'm trying to work with a
                higher value than design, the error is as follow:
                Asterisk (*) preceding a constraint indicates it was
                not met.
                  This may be due to a setup or hold violation.

                
----------------------------------------------------------------------------------------------------------
Constraint | Check | Worst Case | Best Case | Timing | Timing | | Slack | Achievable | Errors | Score

                
----------------------------------------------------------------------------------------------------------
* PERIOD analysis for net "spec_2ghz_adc/sp | SETUP | -0.618ns| 2.618ns| 1949| 324926 ec_2ghz_adc/adc_clk_dcm" derived from NE | HOLD | -0.179ns| | 2718| 251622
                 T "spec_2ghz_adc/spec_2ghz_adc/adc_clk_bu | MINPERIOD
                  |    -0.222ns|     2.222ns|     393|       87245
                 f" PERIOD = 2 ns HIGH 50%  duty cycle cor |
MINLOWPULSE | 0.000ns| 2.000ns| 0| 0
                 rected to 2 nS  HIGH 1000 pS              |
MINHIGHPULSE| 0.000ns| 2.000ns| 0| 0

                
----------------------------------------------------------------------------------------------------------
                * NET "spec_2ghz_adc/spec_2ghz_adc/adc_clk_ |
MINPERIOD | -0.221ns| 2.221ns| 1| 221 buf" PERIOD = 2 ns HIGH 50% | | | | |

                
----------------------------------------------------------------------------------------------------------

                This same adc_clk_buf and adc_clk_dcm gave me some
                headaches before with low clock frequency, but that
                time David George advice me to change in
                
xps_lib/XPS_ROACH_base/pcores/adc_interface_v1_01_a/hdl/vhdl/adc_interface.vhd
                variables FS_FREQUENCY_MODE and DLL_FREQUENCY_MODE
                from HIGH to LOW. Now those variables are set in HIGH,
                so how can I make ADC/ROACH happy with this 2GHz input
                clock?
                Cheers,
                Daniel H.


-- --------------------------------
    Daniel Esteban Herrera Peña
    Ingeniero Civil Electrónico
    Universidad de Concepción, Chile.
    (41)236-0289 842-38325
    --------------------------------



Reply via email to