Forum Discussion
Timing Violations workaround strategy
Hello,
Probably I didn't properly define timing constraints ... TimeQuest reported quite a lot of timing violations. In this connection I have one question - does exist some straightforward approach on working around "timing violations" ? For example on the image below there are 2 screenshots form TimeQuest:- top screenshot - results of "Report Top Failing Paths"
- bottom screenshot - "Peport Timing" for the path, highlighted in yellow on the top screenshot
39 Replies
- Altera_Forum
Honored Contributor
The basic design details (e.g. Qsys screenshot, top-level Qsys wrapping (i.e. Qsys instantiation in the top module), constraints) I've mentioned in yesterday message.
Perhaps you are interested in the properties of other Qsys components (e.g. CPU) ... because in my previous mail only PLL properties are displayed. Today, about 3 hours ago, I've posted new message with more details on my design and answers to Ryan questions. But actually this message is pending for approving ... I hope it comes in 2 ... 3 hours. --- Quote Start --- my feeling is that your problem has nothing to do with io paths but is rather internal immediately before/after io. --- Quote End --- You mean metastability issues ? I've just checked "io paths report": 16 violations on SDRAM data bus. In order to have more chances for this message to be posted immediately (i.e. avoid pending-approving), I don't attach TimeQuest screenshot. If my guess is correct (i.e. you mean metastability), how to apprehend from this TimeQuest report, that these violations are caused by metastability, but not by some other issues ? --- Quote Start --- You better identify what paths are failing. --- Quote End --- The 16 SDRAM data signals fail to pass TimeQuest analysis. - Altera_Forum
Honored Contributor
your failure reported (as per your previous post) violations from sdram_dq to za_data. So where is this path?
- Altera_Forum
Honored Contributor
The failed paths (if inputs to fpga) are clocked out by clk_ext_sdram according to sdc but are latched on divclk. This has resulted in a setup relationship of 3.5 instead of 6.667 and is the root cause of problem. Why not latch input with same clock as sdram clock
- Altera_Forum
Honored Contributor
--- Quote Start --- The failed paths (if inputs to fpga) are clocked out by clk_ext_sdram according to sdc but are latched on divclk. This has resulted in a setup relationship of 3.5 instead of 6.667 and is the root cause of problem. Why not latch input with same clock as sdram clock --- Quote End --- You mean why external sdram memory chip isn't clocked with the same clock as internal sdram controller ? This clocking schema I've picked from a reference design that was in support board package. By the way there was no any constraints on SDRAM interface I/O in the .sdc file. - Altera_Forum
Honored Contributor
--- Quote Start --- You mean why external sdram memory chip isn't clocked with the same clock as internal sdram controller ? This clocking schema I've picked from a reference design that was in support board package. By the way there was no any constraints on SDRAM interface I/O in the .sdc file. --- Quote End --- You are sending a clock to sdram chip as you have done (isn't it the clk_ext_sdram as named in your sdc). That is ok I am referring to your sdc constrains of set_input_delay/set_output_delay for sdram_dq. You are telling Timequest that sdram_dq data is clocked out from sdram chip on clk_ext_sdram. That is ok But you are latching it on divclk: is it also 150MHz and then why have you changed its phase. Although this clock of clk_ext_sdram is opposte data input but that is a trivial issue for now... - Altera_Forum
Honored Contributor
--- Quote Start --- But you are latching it on divclk: is it also 150MHz and then why have you changed its phase. Although this clock of clk_ext_sdram is opposte data input but that is a trivial issue for now... --- Quote End --- Yes, data that comes into FPGA (SDRAM controller IP to be precise) is latched by u0|pll|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk (which is PLL-derived clock with 0 phase shift). And the data launch clock is PLL-derived clock with -3.5ns phase shift, so the launch clock is about half-period "advanced" with respect to latch clock and respectively the latch clocks is half-period delayed with respect to launch clock. Correct ? Probably this half-period shift is intended to account for board propagation delay ? Anyway, if I properly understood, you propose to remove phase shift in launch clock. Correct ? - Altera_Forum
Honored Contributor
From your sdc commands I assume your sdram IF is not DDR. Hence why reduce available clock period by half?
- Altera_Forum
Honored Contributor
--- Quote Start --- From your sdc commands I assume your sdram IF is not DDR --- Quote End --- Sorry, I didn't understand, what is "sdram IF" - Altera_Forum
Honored Contributor
SDRAM interface
- Altera_Forum
Honored Contributor
No, according to SDRAM datasheet, it's clocked on positive edge. So, you propose to remove phase shift on u0|pll|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk and consequently on clk_ext_sdram ?