29 STA时序分析 补充

文章详细阐述了Setup和Hold时间的概念,特别是在同一时钟下对两个寄存器数据传输的分析。它强调了slack在判断信号是否满足时序要求中的作用,并通过计算示例解释了如何确定setup和holdslack。此外,文章还讨论了输入和输出延迟对设计时序的影响,以及如何考虑这些延迟来计算最高时钟频率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. Setup/Hold分析补充

1.1两个寄存器的时钟是同一个时钟

2.slack大于零通过/否则不通过

3.计算例子分析!!!

1.同一个时钟下的setup/hold check point——求setup/hold slack

2.题目补充——求最高时钟频率

4.input/output delay 补充

4.1 input delay

4.2 output delay


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就减小了!

STA分析是基于同步电路设计模型的,在数据输入端,假设外部也是同时钟的寄存器的输出并且经过若干组合逻辑进入本级,而输出也被认为是驱动后一级的同时钟的寄存器。在不设置约束的情况下,纯组合逻辑的输入-》输出不得超过一个T,否则也会被认为是TImingviolaTIon.   1.TImingpath TImingpath就是时间线。Timing就是从起始位置的时间点到终点位置的时间点之间的时间长度。Path是指跟位置相关,即时间起始或终点的位置。Timingpath就是某位置的某一时间点到另一位置的某个时间点。对于DFF来说,上升沿类似于一瞬间的脉冲,只有在这短短的一瞬间,数据才允许通过。对于DFF来说,有两个输入点:数据D和时钟CK,有一个输出点:数据Q。由于是时间比较,所以对于D和CK一定要有一个共同的起始时间点,如下图中的A点出现clk上升沿的时刻。如下图,假设我们分析DFF2的数据和时钟到达的时间。二者共同的出发点是A的上升沿,因为A位于时钟通路上,FF1的时钟经过A点到达FF1-C点,在FF1-C上升沿打开FF1,然后数据才能从FF1-Q输出,进而传递到FF2-D。在A点,FF2的时钟沿经过clocktree,达到FF2-C点。所以数据走过的路程是:   Datapath:A-》clk_tree_buf1-》FF1-C-》FF1-Q-》Comb_logic-》B   而对于FF2来说只要满足下个周期的上升沿能够采样即可,所以时钟到达FF2-C的路径是:   Clkpath:A-》clk_tree_buf2-》C.
### 关于 Tempus 工具的使用 Tempus 是一种用于静态时序分析Static Timing Analysis, STA)的工具,广泛应用于集成电路设计领域。它主要用于验证电路是否满足时序约束条件,并帮助工程师优化设计性能。 #### 配置环境 在启动 Tempus 前,通常需要配置工作目录以及加载必要的库文件和网表数据。这些文件可能包括延迟模型文件 `.lib` 或其他格式如 ECSM 和 LBR 文件[^3]。以下是基本流程: 1. **设置项目路径** 定义项目的根目录以便管理输入输出文件。 2. **导入标准单元库** 加载描述标准单元行为的标准延时格式(Standard Delay Format, SDF)或 Liberty 库文件: ```bash read_liberty -library my_standard_cells.lib ``` 3. **读取设计网表** 导入 RTL 合成后的网表文件(通常是 Verilog 或 VHDL 格式),这一步定义了逻辑连接关系。 ```bash read_verilog design_netlist.v ``` 4. **指定寄存器传输级约束** 使用 Synopsys Design Constraints (SDC) 文件来设定时钟周期、输入/输出延迟以及其他关键参数。 ```bash read_sdc constraints.sdc ``` #### 执行时序分析 完成上述准备工作之后,可以运行不同的命令来进行详细的时序检查。例如: - **报告最差路径** 显示违反时序的关键路径信息。 ```bash report_timing -delay_type min_max -path full -digits 3 ``` - **评估多角情况下的表现** 对多种工艺角落(Process Corners)、电压水平及温度变化的影响进行模拟测试。 ```bash set_operating_conditions {worst_case} -analysis_type on_chip_variation analyze_setup_and_hold ``` - **考虑制造偏差影响** 利用 Advanced On-Chip Variation (AOCV) 数据改进精度。 ```bash define_aocv_group aocv_data { setup 0.98 hold 1.02 } apply_aocv aocv_data ``` 以上操作展示了如何利用 Tempus 进行全面而精确的时序验证过程。 ```python def tempus_example(): commands = [ "read_liberty -library my_standard_cells.lib", "read_verilog design_netlist.v", "read_sdc constraints.sdc" ] analysis_steps = [ "report_timing -delay_type min_max -path full -digits 3", "set_operating_conditions {worst_case} -analysis_type on_chip_variation", "analyze_setup_and_hold", "define_aocv_group aocv_data {setup 0.98 hold 1.02}", "apply_aocv aocv_data" ] return "\n".join(commands + ["# Start timing analysis"] + analysis_steps) print(tempus_example()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sean--Lu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值