文章目录
1. SDC概述
sdc(synopsys design constraints)是后端芯片设计的命脉,对电路的时序、面积和功耗进行约束。该约束与芯片规格相匹配才能发挥自己的作用。约束不能松也不能紧,太松了达不到芯片的功能要求。太紧了对成本,布局布线都不太友好。所以需要寻找个适中的点,也是很多工作的难点都是找到一个平衡点。
1. 时钟相关
1.1 create_clock
- 简单语法实例
create_clock -period 10 -name clk_100 [get_ports clk]
- 语法说明
创建一个时钟周期为10ns,名字为clk_100的时钟放在了模块端口clk上。需要保证clk在顶层端口中能找到;
- 其他参数说明
- -waveform:指明创建时钟的变化沿时间点
create_clock-period 10 -waveform {4 6} -name clk [get_ports clk]
创建一个周期为10的时钟,上升沿在4这个点上,下降沿在6这个点上。由于这个选项第一个时间点为上升沿的时间点,若希望在第一个10单位时间内下降沿在前面,参考 -waveform疑难杂症说明 - -add:一个端口声明多个时钟;
1. create_clock-period 10 -waveform {4 6} -name clk [get_ports clk] 2.create_clock-period 8 -waveform {4 6} -name clk2 -add [get_ports clk]
若第二句约束没有添加-add说明,则会覆盖掉1约束。此约束语句约束了两个时钟在一个端口; - 其它说明
1. create_clock-period 10 -waveform {4 6} -name clk
语句也可不加get_ports选项,说明这个为虚拟时钟,内部未使用到。仅用于后续约束方便所以创建的时钟。
1.2 create_generated_clock
- 语法实例
create_generated_clock -name CLKdiv2 -divide_by 2 -source CLK [get_pins U_xxx/Q]
创建一个CLK进行2分频的时钟CLKdiv2,并将该时钟放到pin U_xxx/Q上; - 参数说明
-
-master:当定义的时钟点有很多源时的说明;(如三个时钟mux后再分频)
-
-edge:说明生成时钟与源时钟(-source 指定的)之间的关系;
-
-source:距离生成时钟点最近的上级;
-
关于master要是还不清楚可参阅:-master说明
1.3 set_clock_group
- 语法实例
set_clock_groups -asynchronous -group {ClkA ClkB} -group {ClkC}
声明clkA,clkB时钟为同步时钟,并与clkC异步; - 重要说明点:
- 当set_clock_groups指明时若只有一个group时,则说明这个group里头的时钟与其它未说明的时钟均为异步关系;
- ** 当set_clock_groups指明时若有两个或两个以上group时,则这些group之间为异步关系,各group与其它未说明的时钟则为同步关系;**
- 参数说明可参考:logic_exclusive & physically_exclusive
- -asynchronous :指明异步关系;
- -logically_exclusive
- -physically_exclusive