例4-2(将ddfs设计的mode输入端的输入延时最大值设为1ns,最小值设为0,参考(关联)时钟为clk): current_design ddfs
set_input_delay –clock clk –max 1 find (port, “mode”) set_input_delay –clock clk –min 0 find (port, “mode”) 在图形界面中,进入ddfs的符号描述,选中mode端口,选择Attribute -> Operating Environment -> Input Delay菜单。在弹出的Input Delay对话框的关联时钟选择框中选择clk,在Max域中填入1.00,在Min域中填入0.00,并选中Same Rise and Fall复选框即可(如图4-4所示)。
4.1.3 设置输出延时
输出延时的概念可以用图4-5来说明。
在图4-5中,假设时钟周期为Tc,外部逻辑中,触发器的建立时间为TS,组合逻辑M的延时为TM,待综合的逻辑中,组合逻辑N的延时为TN,触发器的传输延时为Td。则有: Tc = Td + TN + TM + Ts (1) 即:
Td + TN = Tc – (TM + Ts ) (2)
当系统时钟设置完毕后,Tc已经确定,对待综合模块的输出部分加以约束(即设定Td+TN的值),可以通过设定TM + Ts来实现。这里的TM + Ts就是DC定义的(对于待综合模块的)输出延时。若待综合模块是寄存器直接输出,则TN = 0,又由于触发器的传输延时(Td)基本固定,所以待综合模块的输出部分可以不必约束,既可以不设输出延时。
在DC中,可以使用set_output_delay命令来设置输出延时(该命令对当前设计有效),其命令格式如下: set_output_delay -clock <时钟名> -max -min
<延时值> <端口名列表>
所有参数、开关含义均与set_input_delay命令相同
例4-3(将ddfs设计所有输出端的输出延时最大、最小值设为4ns,参考时钟为clk): current_design ddfs
set_output_delay –clock clk 4 all_outputs()
在图形界面中,进入ddfs的符号描述,选中一组输出端口,选择Attribute -> Operating Environment -> Output Delay菜单。弹出Output Delay对话框后,在关联时钟选择框内选择clk,在Max和Min域中填入9.00,并选中Same Rise and Fall复选框即可(如图4-6所示)。对另外一组输出端口可同样设置。
4.2 组合电路的时延约束
由于组合电路中不带有时钟,所以对它的时延约束主要是规定其输出端到输入端的最大时延,这可以通过set_max_delay来实现(该
命令对当前设计有效),该命令的格式如下: set_max_delay <延时值> -from <起点列表> -to <终点列表>
<延时值>:延时的大小,单位一般为ns -from <起点列表>:延时约束的起点 -to <终点列表>:延时约束的终点
例4-4(将16位加法器设计所有输入端到所有输出端的最大延时设为2ns):
read adder_16.v /*读入16位加法器的设计源文件*/ set_max_delay 2 –from all_inputs() –to all_outputs() 在图形界面中,读入源文件后进入设计的符号描述,选中所有的输出端口,选择Attributes -> Optimizations Constraints -> Timing Constraints菜单,弹出Timing Constraints对话框后,在Maximum -> Rise域中填入2.00,并选中Same Rise and Fall复选框即可(如图4-7所示)。
4.3 设计的面积约束
使用set_max_area命令可以对设计的最大面积进行约束(该命令对当前设计有效),其命令格式为: set_max_area -ignore_tns <面积值>
-ignore_tns:忽略负时延裕量总和(TNS)来优化面积。DC的缺省优化算法是先使TNS最小,在此基础上优化面积。使用该开关将使得DC忽略TNS而优先考虑面积优化
<面积值>:约束面积的大小,其单位由不同的工艺库决定 例4-5(将ddfs设计的面积约束设为0,这将指示DC尽可能的优化面积):
current_design ddfs set_max_area 0
在图形界面中,选中ddfs设计,选择Attributes ->