约束文件指定设计的时序和面积约束
#去除所有已有的约束
reset_design
#创建时钟,周期3.0ns(频率为333MHz),时钟端口clk
create_clock -p 3.0 [get_ports clk]
#指定DC综合时不要处理clk和rst_n网络,因为clk和rst_n属于全局网络,在后续步骤中有专门工具综合时钟树网络
set_dont_touch_network [list clk rst_n]
#时钟源延迟是实际的时钟源到设计时钟端之间传播时间
set_clock_latency -source -max 0.7 [get_clocks clk]
#The maximum internal clock network insertion delay or latency is 0.3ns
set_clock_latency -max 0.3 [get_clocks clk]
#uncertainty是不同时钟网络分支之间的延时的不同(成为时钟偏斜)
set_clock_uncertainty -setup 0.15 [get_clocks clk]
#时钟的跃迁时间
set_clock_transition 0.12 [get_clocks clk]
#用于约束输入路径的时序
set_input_delay -max 0.45 -clock clk [all_inputs]; #[get_ports portname]
#约束输出路径的时序
set_output_delay -max 0.5 -clock clk [all_outputs]
#面积约束,单位由target library定义:两输入与非门数目 晶体管数目 平方微米
set_max_area 0
#为所有输入端口(除去时钟和复位)设置驱动模式,从而指定驱动强度和转换时间
#set_drive 用于约束不是被库中的单元驱动的输入;set_driving_cell用于约束被库中的cell驱动的输入
set_driving_cell -lib_cell BUFX1 -library typical [remove_from_collection [all_inputs][get_ports "rst_n clk"]]
#set_driving_cell -lib_cell NAND2BX1 -pin Y [remove_from_collection [all_inputs][get_ports "rst_n clk"]]
#All input ports,except clk and rst_n, have the input transition of 0.12ns
set_input_transition 0.12 [remove_from_collection [all_inputs][get_ports "rst_n clk"]]
#指定所有输出端口的负载为0.025pf
set_load 0.025 [all_outputs]
#指明wrie_load_model由用户自己选择
set auto_wire_load_selection false
#指定wire_load_model的名称为tsmc18_wl10
set_wire_load_model -name tsmc18_wl10
#指定工作环境为typical
set_operating_condition -max typical