Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
17 years ago

Timequest constrains for async SRAM

Any samples about how to constrain an async SRAM interface?

Timequest doesn't seem to support the required constrains. For reading, you need the sum of tCO and tSU, and for writing you need data skew. I don't see how to constrain this in Timequest. Seems that with scripting is possible to extract the information?

14 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    I finally followed Rysc advice. Forced Fast I/O in the ports. Made a manual computation based on the Datasheet Report. And made some approximate constrains.

    The only minor problem with this approach is that you must be careful about the Delay Chain that the fitter might implement. The fitter is doing a great job, and will optimize the Delay Chain automatically for getting the center of the eye according to yout setup/hold max/min constrains. But because the constrains aren't really accurate, the Delay Chain implemented might be actually far from optimal.

    Not big deal, just important to remember to use one of the methods to disable the Delay Chain.

    Just to make sure I was not making any mistake, I invested making a script to check the actual real slack. Not too difficult using the "get datasheet" command.

    Thank you all.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    If I'm not confusing this with something else I was told, delay chains are set by the Fitter early in the Fitting process using course timing estimates. (The Fitter runs timing analysis in the background. For some things it does a quick analysis that isn't as precise as when timing analysis is run at the end.)

    Whenever I want an I/O bus to have timing as similar as possible across the bus, I manually set the delay chains through the Assignment Editor. I might let the Fitter pick the settings first to get an idea what is a good value to try for my initial manual setting. I also make manual assignments to force usage of I/O cell registers. Letting the Fitter decide whether to use I/O cell registers based on timing can result in only some bits in a bus using them.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    --- Quote Start ---

    Here is the example that Godfather was referring to. It is part of a document that we are putting together on TimeQuest solutions. I believe this covers the exact situation that you are trying to constrain. It even has a Quartus archive of a test case embedded in the document. Hope this helps.

    --- Quote End ---

    Hi, jimbo.

    I found the attached file "Async RAM Example". It is helpful to me. However, it is a part of some document. I tried to find the document but can not find it. Would you please tell me how to get it? Thanks.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Just thought I would chime in here. I've recently discovered that the PROPER method of constraining a purely asynchronous interface (like the DE2-115's async SRAM) is by using the Synopsys Design Constraint's 'set_data_check' command. Unfortunately, Altera does not support that particular command (they only support a subset of the full SDC syntax). Bummer! But if they ever do support it the appropriate syntax would be similar to this:

    set_data_check -setup 2 -from o_SRAM_WE_n -to io_SRAM_Data
    

    The above command says, "io_SRAM_Data must arrive 2ns before o_SRAM_WE_n". You would obviously get the appropriate setup time value from the SRAM's datasheet. The command is similar for the hold constraint:

    set_data_check -hold 1 -from o_SRAM_WE_n -to io_SRAM_Data
    

    The above is how you would constrain an asynchronous SRAM interface on an ASIC design using, for example, Synopsys Design Compiler and PrimeTime.

    Cya!