参考http://www.cnblogs.com/IClearner/p/6624722.html,写得很好
一:时序约束
1:分类
时钟的约束(寄存器-寄存器之间的路径约束),输入延时的约束,输出延时的约束
2:时序约束对电路的要求
综合工具现在不能很好地支持异步电路,甚至不支持异步电路;
single clock,single cycle,单个时钟,单延触发,不要一会posedge,一会negdege
3:同步电路常见结构
具体路径如下图
起点定义:
输入端口;(input port)
触发器或寄存器的时钟引脚
输出端口:
输出端口;
时序器件的除时钟引脚外的所有输入引脚
如在下面这个电路图中:
有4条路径:
*从输入端口A到FF1的D端口
*从FF1的CLK端到FF2的D端
*从FF2的CLK端到输出端口out1
*从输入端口A到输出端口out1
路径的特性是存在延时,也就是说,路径1、2、3、4都存在有延时,延时最长的一条路径称为关键路径。一般情况下,路径1、2、3是最常见的,路径4比较少见。
二:常见的时序路径约束
1:建立时间,保持时间,亚稳态
*建立时间: 时钟有效沿到来之前的某段时间内,数据必须稳定,否则触发器锁存不住数据,这段时间称为建立时间,用Tsetup或者Tsu表示
*保持时间: 时钟有效沿到来之后的某段时间内,数据也必须稳定,否则触发器锁存不住数据。这段时间称为保持时间,用Thold或者Th表示
在第二个时钟上升沿的时候,要锁存住输入端D的高电平,D1是满足了建立时间和保持时间的情况;而D2则是建立时间没有满足,因此不能成功锁存住输入的高电平;D3保持时间不满足,也不能成功锁存输入的高电平。
*亚稳态:每个触发器都有其规定的建立(setup)和保持(hold)时间参数,该参数存放在由半导体厂商所提供的工艺库中。假如触发器由时钟的上升沿触发,在这个时间参数内,输入信号是不允许发生变化的。否则在信号的建立或保持时间中对其采样,得到的结果是不可预知的,有可能是0或者1,即亚稳态。
2:路径2寄存器到寄存器间的约束(从FF1的CLK端到FF2的D端)
为什么要约束时序路径?是为了满足寄存器的建立时间和保持时间。对于路径2,数据从FF1的D端口传输到FF2的D端口,主要需要经历触发器的翻转时间/转换延时、寄存器与寄存器之间的组合逻辑延时、连线延时这些种延时。因为数据是随着时钟的节拍一拍一拍往后传的,因此这里的寄存器与寄存器之间的路径约束,就是对时钟的建模,或者是说对时钟的约束。下面进行说明
为了满足FF2建立时间的要求,也就是数据从FF1的CLK端口到达FF2的D端口再加上FF2的建立时间,不能超过时钟周期;也就是说(触发器的翻转时间/转换延时、寄存器与寄存器之间的组合逻辑延时、连线延时这些种延时)不能过大。例如: