对于分频时钟产生的多频率时钟的约束分析
0赞对于分频时钟产生的多频率时钟的约束分析:
顶层程序如下:
`timescale 1ns/100ps
module mulclk_constrain
(
input clk_50mhz,rst_n,
input [8:0]datain,
output [8:0]dataout
);
wire clk1,clk_div;
//wire [8:0]data_tst;
wire [8:0]div_fre;
assign div_fre = datain;
spll mypll(
.inclk0(clk_50mhz), // clk_50mhz为外部输入时钟50M
.c0(clk1) // clk1为PLL输出时钟100M
);
div_frequency_logic mul_fre( //对clk1进行可变分频
.clk_i(clk1),
.reset_i(rst_n),
.div_fre_i(div_fre), //div_fre为外部输入的一个可变变量
.clk_o(clk_div) //输出的分频频率—根据div_fre不同,
); //其输出的频率也不同
example exa( //应用可变频率进行实际应用
.clk_i(clk_div),
.reset_i(rst_n),
.data_i(datain),
.data_o(dataout)
);
endmodule
对可变分频进行时序约束:
create_clock -name clka -period 200.000 -waveform {0 100} [get_registers {div_frequency_logic:mul_fre|clk_o}]
create_clock -name clkb -period 1000.000 -waveform {0 500} [get_registers {div_frequency_logic:mul_fre|clk_o}] -add
create_clock -name clkc -period 800.000 -waveform {0 400} [get_registers {div_frequency_logic:mul_fre|clk_o}] –add
意思约束是在寄存器输出端div_frequency_logic:mul_fre|clk_o产生三个不同频率的时钟,clka,clkb,clkc。这三个时钟对于的源头都是div_frequency_logic:mul_fre|clk_o
同时还要进行如下约束:
set_clock_groups -exclusive -group {clka} -group {clkb} -group {clkc}
说明三个时钟域并不关联,不存在其中任何两时钟之间的路径传递。
然后就可以进行各个时钟对于相应的寄存器,管脚等进行约束。