约束作为连接行为级代码和硬件实现的一种工具,他更好的弥补了行为级代码编写工程师,在描述行为时所忽略到的硬件实现细节。以下是几种常用的约束:
(1)全局时序约束
正常工作:Delay between FF1 and FF2 < clock_period - T_setup
亚稳态:clock_period - T_setup < Delay between FF1 and FF2 < clock_period + T_hold
错误:Delay between FF1 and FF2 > clock_period + T_hold
全局时钟的设置参数包括:时钟周期、时钟源(端口或者引脚)、占空因数(duty cycle)、相位偏移(offset/skew)。在数字IC前段设计一般只考虑上述参数,但在后端设计中则需要对物理布局(placement),进行时钟树综合。用来使skew,latency,transition,jitter参数满足性能目标。
(2)IO时序约束
全局时钟约束不考虑端口或者引脚的时序要求,所以需要对IC设计的输入和输出单独进行约束。此时,输入时序约束为了保证将输入数据满足建立时间要求,使ASIC顺利对输入采样。
输出时许约束为了保证将输出数据满足保持时间要求,使外部顺利对ASIC输出采样。
(3)环境约束
对于输出端,为了精确的计算输出电路的时间,DC需要知道输出单元所驱动的总负载电容。
对于输入端,为了精确的计算输入电路的时间,DC需要知道到大输入端口的转换(transition)时间。
在一些负载未知的情况下,需要进行负载预算,其原则如下:
a.保守起见,假设输入端口有驱动能力弱的单元驱动;
b.限制每一个输入端口的输入电容(负载)
c. 估算输出端口的驱动模块数目
环境约束还需要设置环境特性,通过设置环境温度,工作电压,得到不同的延时参数。
(4)多时钟域约束
采用虚拟时钟约束
(5)异步约束
多时钟域独立约束
Design Complier TCL指令:
设置时间目标命令:
set_input_delay
set_output_delay
create_clock
create_generated_clock
设置环境属性命令:
set_driving_cell
set_load
set_wire_load_model
set_operating_condition
set_wire_load_mode
设置设计规则命令:
set_max_capacitance
报告命令:
report_clock
report_port
report_design
清楚约束命令:
reset_path
reset_design