How to make phase compensation between two clocks
Hi all,
fpga type : 10ax115n3f45i1sg
quartus : quartus 18.0.0 standard
I have one design as below:
pll pll_inst(.rst(), .refclk(), .outclk1(), .outclk2(),.outclk3(),.outclk4());//the output clocks all use global clock routing.
outclk1 = 2* outclk2; outclk2 = 2*outclk3; outclk3 = 2* outclk4;
the output phase of these clk are all alignment (0 phase).
clk_fast = sel = 2 ? outlck1 : sel = 1 ? outclk 2 : sel = 0 ? outclk3;
clk_slow = sel = 2 ? outclk2 : sel = 1 ? outclk3 : sel = 0 ? outclk4;
clk_buffer clk_buf_inst(.inclk(clk_fast), outclk(clk_fast_gl));//global
clk_buffer clk_buf_inst1(.inclk(clk_slow),outclk(clk_slow_gl));//global
Now there's transfer from A register (in clk_fast) to B register (in clk_slow).
and there's transfer from C register (in clk_slow) to D register (in clk_fast).
I made sdc constranins as follow:
set_multicylce_path -from [get_clocks {clock_fast_gl}] -to [get_clocks [clock_slow_gl]} -setup -start 1
set_multicylce_path -from [get_clocks {clock_fast_gl}] -to [get_clocks [clock_slow_gl]} -hold-end 1
set_multicylce_path -from [get_clocks {clock_slow_gl}] -to [get_clocks [clock_fast_gl]} -setup -start 1
set_multicylce_path -from [get_clocks {clock_slow_gl}] -to [get_clocks [clock_fast_gl]} -hold -end 1
And all timing analisis all passed.
But on board test, I found clk_fast_gl and clk_slow_gl could not keep phase align for some sel item. How could I make sure this point? Could you please provide some help about this?
BRs,
Lambert