[转] Clock Constraints in Design Compiler

出处:http://bb2hh.blogbus.com/logs/20373036.html
作者:pythonlong

一个比较全的例子,不过还有比较多的特殊情况。



create_clock -period 100 [get_ports Pclk]
create_clock -period 100/8 -name pclkx8 [get_pins BUF2X2/Y]

create_clock -period 10 [get_ports Sclk]
create_generated_clock -name clk_div2 -divide_by 2 -add -source [get_attribute [get_ports Sclk] sources] -master_clock Sclk [get_pins DIV/clk_div2]
create_generated_clock -name clk_div4 -divide_by 4 -add -source [get_attribute [get_ports Sclk] sources] -master_clock Sclk [get_pins DIV/clk_div4]
create_generated_clock -name clk_div8 -divide_by 8 -add -source [get_attribute [get_ports Sclk] sources] -master_clock Sclk [get_pins DIV/clk_div8]

create_generated_clock -name Sclk1_l -multiply_by 1 -add -source [get_attribute [get_clocks pclkx8] sources] -master_clock pclkx8 -combinational [get_pins MUX1/Sclk1]
create_generated_clock -name Sclk1_h -multiply_by 1 -add -source [get_attribute [get_clocks clk_div2] sources] -master_clock clk_div2 -combinational [get_pins MUX1/Sclk1]

create_generated_clock -name Sclk2_l -multiply_by 1 -add -source [get_attribute [get_clocks clk_div8] sources] -master_clock clk_div8 -combinational [get_pins MUX1/Sclk2]
create_generated_clock -name Sclk2_h -multiply_by 1 -add -source [get_attribute [get_ports Sclk] sources] -master_clock Sclk -combinational [get_pins MUX1/Sclk2]

对于Sclk1,Sclk2驱动的时钟树的输出port,应该如下设置
set_output_delay -max 3 -clock [get_clocks Sclk1_l] [get_ports xx_out1]
set_output_delay -max 3 -add_delay -clock [get_clocks Sclk1_h] [get_ports xx_out1]

set_output_delay -max 3 -clock [get_clocks Sclk2_l] [get_ports xx_out2]
set_output_delay -max 3 -add_delay -clock [get_clocks Sclk2_h] [get_ports xx_out2]

对于Pclkx8需要的约束如下:

set_input_delay -max 2 -clock [get_clocks Pclk] [get_pins BUF2X2/Y]

红色圈圈出的设计要注意的,因为低速Pclkx8作为数据输入,对于Pclkx8又做时钟,又做数据,所以在时钟树前加buffer,然后用buffer的输出pin做create_clock。
记住:时钟会向后穿过任何组合逻辑,直到endpoint!
pll是macro,会被astro,或者dc作为black box。对于工具来说信号传输到黑盒子就算终止了,但是内部还要用到黑盒子产生的时钟,所以要create_clock .对于pll输出的clock的input_delay,output_delay约束却要用到外部的Pclk来约束。

澄澄的近况

说话越来越利索了,经常语出惊人,比如:

  1. 爸爸,饭快凉了,你快吃吧 ......
  2. 爸爸很凶,妈妈很凶,阿爹(爷爷)不凶 ......
  3. 爸爸,我们聊聊天吧 ......
大便没问题,小便依然不叫人,目前真没办法。天气冷了,只能纸尿裤伺候了。

自从上个月生病以来,现在只要凉到一点儿就会抽鼻子,幸好马上就能扛过去。小子的身体真的不能算强啊。不过令爸爸妈妈欣慰的是现在小脸蛋又开始圆起来了,身上的肉肉也多了起来。目前毛重16KG。

上幼儿园情况也还算好:不是特别愿意,但也不抵制。

幼儿园学的第一首歌

一天,澄澄对着妈妈唱起了他在幼儿园学的第一首歌,这一天距离开学还不到一个月。

两个小宝宝呀…
正在打电话呀…
喂、喂、喂…
我在幼儿园呀。

如何让csh像bash那样按Tab键列出无法补齐的候选文件

标准的方法是:按Ctrl+D

如果一定要用Tab键,在.cshrc中加入set autolist

Get the Most Significant Bit

wire [15:0] data;
wire [3:0] msb;

wire or_15_14 = |data[15:14];
wire or_13_12 = |data[13:12];
wire or_11_10 = |data[11:10];
wire or_9_8 = |data[9:8];
wire or_7_6 = |data[7:6];
wire or_5_4 = |data[5:4];
wire or_3_2 = |data[3:2];
wire or_1_0 = |data[1:0];

wire or_15_14_13_12 = or_15_14 | or_13_12;
wire or_11_10_9_8 = or_11_10 | or_9_8;
wire or_7_6_5_4 = or_7_6 | or_5_4;
wire or_3_2_1_0 = or_3_2 | or_1_0;

wire or_15_14_13_12_11_10_9_8 = or_15_14_13_12 | or_11_10_9_8;
wire or_7_6_5_4_3_2_1_0 = or_7_6_5_4 | or_3_2_1_0;

assign msb[3] = or_15_14_13_12_11_10_9_8;

assign msb[2] = msb[3] ? or_15_14_13_12 : or_7_6_5_4;

assign msb[1] = msb[3:2] == 2'b11 ? or_15_14 : msb[3:2] == 2'b10 ? or_11_10 : msb[3:2] == 2'b01 ? or_7_6 : or_3_2;

assign msb[0] = msb[3:1] == 3'b111 ? data[15] : msb[3:1] == 3'b110 ? data[13] : msb[3:1] == 3'b101 ? data[11] : msb[3:1] == 3'b100 ? data[9] : msb[3:1] == 3'b011 ? data[7] : msb[3:1] == 3'b010 ? data[5] : msb[3:1] == 3'b001 ? data[3] : data[1];