waljj

对于分频时钟产生的多频率时钟的约束分析

0
阅读(4776)

对于分频时钟产生的多频率时钟的约束分析:

顶层程序如下:

`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}

说明三个时钟域并不关联,不存在其中任何两时钟之间的路径传递。

然后就可以进行各个时钟对于相应的寄存器,管脚等进行约束。

Baidu
map