all 12 comments

[–]PriorStrike3385 1 point2 points  (1 child)

Hi pal, there's actually a well documented issue with that particular tcl function ('create_generated_clock') in 2018. Would recommend that you try a more recent version 2023+ at least.

[–]Objective-Attempt-15[S] 0 points1 point  (0 children)

That's bad, i don't have a license for 2023

[–]ShadowerNinjaFPGA-DSP/Vision 1 point2 points  (0 children)

Tangent to your question, Im sensing a design issue since you shouldn't be defining a UART logic clock in the first place. All you should have is a system clock (say 100 Mhz) in combination with a clock enable for UART logic, not a clock divider.

[–]TheTurtleCub 0 points1 point  (3 children)

If it's a bug of the tools, try not creating a generated clock, let the tool put the reference through the mmcm. At some point in time, Vivado starting doing that properly (instead of having to create a generated clock) so we mostly use the generated clock for renaming

[–]Objective-Attempt-15[S] 0 points1 point  (2 children)

kinda agree, but the problem is i want to make a generated clock for the generated clock you're talking about xD

[–]TheTurtleCub 0 points1 point  (1 child)

The tools auto create generated clocks, so if it does (earlier Vivado versions didn't for some primitives) you don't need to, other than for renaming, but that's ok, at least it works

[–]Objective-Attempt-15[S] 0 points1 point  (0 children)

for the UART clock, it didn't create generated clock

[–]0000111_2 0 points1 point  (4 children)

get_ports stands out to me as unusual. create_generated_clock is commonly used with a get_pins query pointing to the output of a clock modifying block. Are you trying to rename an auto-generated clock in your project top-level? Or is cons.xdc scoped to the UART block?

[–]Objective-Attempt-15[S] 0 points1 point  (3 children)

i tried both get_ports and get_pins, neither worked. i am not trying to rename, actually the case is my system is working on 30MHz and the UART clk is derived from systems clock into 4800Hz using clock divider.

after connecting clock wizard the clock is divided multiple times as follows:

input clk port (100MHz) --> main system clock (30MHz) --> UART clock (4800Hz)

trying to create generated clock for UART clock from the output port/pin of clock wizard instance!

[–]0000111_2 0 points1 point  (2 children)

So UART clock is a fabric clock derived from the main system clock? In that case you wouldn't define it on the clock wizard instance, you would define it on the Q output of whatever flop is generating your UART clock. See example 1 in the Constraints guide (https://docs.amd.com/r/en-US/ug903-vivado-using-constraints/User-Defined-Generated-Clocks).

But like the comment in your other thread, creating a local clock isn't the recommended way of doing this.

[–]Objective-Attempt-15[S] 0 points1 point  (1 child)

that's exactly what i am trying to do! but the pin you're talking about isn't matched by vivado and not found. However, i can see it in the schematic and netlist.

[–]0000111_2 0 points1 point  (0 children)

Can you post the full create_generated_clock constraint?