目录
1.同一个时钟下的setup/hold check point——求setup/hold slack
1. Setup/Hold分析补充
1.1两个寄存器的时钟是同一个时钟
Setup check point——A寄存器在0ns第一个上升沿放出数据,B寄存器在第二个上升沿10ns,且在B寄存器的setup require之前,过来的数据就需要稳定!此时B寄存器就能成功抓到数据。 Hold check point——A寄存器在10ns(第二个上升沿)放出的数据,B寄存器用同一个上升沿10ns(第二个上升沿)要抓不到
通过setup/hold check point —— 保证 数据在B寄存器的 setup/hold 的 窗口之内,数据都是稳定的!
至于为什么setup用 N-1个上升沿,hold用N 个上升沿,来源如下图:
结论:
2.slack大于零通过/否则不通过
之前的公式是比较左右时间的大小,然后判定meet / violate!——这里引入变量!——因为最后的报告中都会有一个slack的报告参数
3.计算例子分析!!!
1.同一个时钟下的setup/hold check point——求setup/hold slack
分析:
1.首先,对于setup,目的是让FF2在第二个时钟上升沿看到D端口已经有了数据,所以满足setup的要求(即slack为正)的前提是 data_arrive_time数据到来时间 < data_required_time数据需要时间。
2.由1,考虑最坏的情况——即数据来的最晚的时间——data_arrive_time最大,如果能够满足setup check,那就是满足的——而且setup_slack 就是此情形下的结果
因此data_arrive_time = 0.3 + 0.55 + 0.65 = 1.5ns
说明:1.5ns后能够给数据端提供稳定的数据
3.对于data_required_time,首先一定不要忘了加上一个 clk_period = 10ns(100MHZ)的时间! 4.且需要数据满足DFF2的setup时间(即Tsetup = 0.25ns)—— 即数据在这个0.25ns以前就要稳定——即数据到达时间还要进一步早0.25ns稳定——对于等式左端的data_arrive_time 要+0.25ns——对于等式右端data_required_time -0.25ns (在setup的窗口有0.25ns,在这个窗口内要看到数据,说明数据需求的时间还要早0.25ns,所以-0.25ns)
因此data_required_time = 10 + 0.5 - 0.25 = 10.25ns
说明:10.25ns这个时间点以前,需要D端能够有稳定的数据
5.综合以上4点分析 setup_slace = data_required_time - data_arrive_time = 10.25ns - 1.5ns = 8.75 ns 说明:综合1、2的说明,能够推导出数据满足要求,所以slace肯定是正数!!!
同理,对于hold:
1.目的是让FF2在第一个时钟上升沿看不到D端口的数据
2.data_arrive_time = 0.3 + 0.25 + 0.35 = 0.9ns —— 找最快路径
3.data_required_time = 0.5 + 0.1 = 0.6ns —— 同一个沿,hold窗口有0.1s,在这个窗口内要看不到数据,要求数据需求时间还要晚来0.1s,+0.1s——所以是符合hold_check_point要求的——slace为正——所以是data_arrive_time - data_required_time
4.hold_slace = data_arrive_time - data_required_time = 0.3 ns
2.题目补充——求最高时钟频率
4.input/output delay 补充
4.1 input delay
如果设计的外部存在input delay —— 这个delay是端口D相对时钟clk有一个延迟 理解:理解为相当于D口的前面还有一堆组合逻辑产生了延时——对于等式的左端data_arrive_time变大了——对于等式的右端data_required_time进一步减小——即对于design内部:delay变为T-input_delay
4.2 output delay
还是一样的,外面的存在delay,那么留给内部的delay就减小了!