waljj

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

0
阅读(4862)

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

顶层程序如下:

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

 

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

 

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