Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

vendor.xilinx_7series: Vivado TIMING-2 Warning #301

Closed
nmigen-issue-migration opened this issue Jan 8, 2020 · 6 comments
Closed

vendor.xilinx_7series: Vivado TIMING-2 Warning #301

nmigen-issue-migration opened this issue Jan 8, 2020 · 6 comments

Comments

@nmigen-issue-migration
Copy link

Issue by peteut
Wednesday Jan 08, 2020 at 19:35 GMT
Originally opened as m-labs/nmigen#301


Vivado issues TIMING-2 (default severity: CRITICAL) when create_clock uses a signal.
Here is a potential solution to please create_clock: peteut/nmigen@9e79a30 .

@nmigen-issue-migration
Copy link
Author

Comment by whitequark
Thursday Jan 09, 2020 at 09:56 GMT


Can you explain what does the filter expression in your commit does?

@nmigen-issue-migration
Copy link
Author

Comment by peteut
Thursday Jan 09, 2020 at 11:29 GMT


@whitequark this is indeed ugly and should be fixed, it's purpose is to filter negative ports of differential clock inputs, ending with __n. So it matches ports ending with __p or __io. Internal clocks are matched using ^.+/.+$, for signals like my_module/clk_out.

@nmigen-issue-migration
Copy link
Author

Comment by whitequark
Thursday Jan 09, 2020 at 11:39 GMT


You did explain why it's ugly, which is helpful (thanks!). Unfortunately, you didn't explain what it does, so I can't help you work out a nicer replacement. I don't have the Xilinx flavor of Tcl API memorized.

@nmigen-issue-migration
Copy link
Author

Comment by peteut
Thursday Jan 09, 2020 at 12:44 GMT


Here's an excerpt from UG906 explaining the TIMING-2 warning and how to use create_clock correctly:

image

The Tcl fragment does exactly that, it starts from the clock signal and determines it's startpoint using all_fanin -flat -startpoints_only. The returned could contains my-signal__p my-signal__n, therefore filter -regexp filters my-signal__n, so only a single item remain.

[filter -regexp [all_fanin -flat -startpoints_only \
                    [get_nets {{signal|hierarchy("/")}}]] {NAME =~{(^.*__p$)|(^.*__io$)|(^.+/.+$)}}]

Vivado Tcl reference is available here: Tcl Command Reference Guide, UG835.

@whitequark whitequark added this to the 0.2 milestone Feb 6, 2020
whitequark added a commit that referenced this issue Feb 6, 2020
This can expose important timing issues, such as #301.
@whitequark
Copy link
Member

@peteut Thank you for bringing this to my attention; I did not realize that the exact placement of the constraint is semantically important. I've added report_methodology to the Vivado scripts, and I've changed the core APIs so that the constraint can be appropriately placed without any ugliness.

@peteut
Copy link
Contributor

peteut commented Feb 8, 2020

@peteut Thank you for bringing this to my attention; I did not realize that the exact placement of the constraint is semantically important. I've added report_methodology to the Vivado scripts, and I've changed the core APIs so that the constraint can be appropriately placed without any ugliness.

@whitequark Thanks, much nicer indeed!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests

3 participants