### 通向FPGA之路——七天玩转Altera之时序篇 #### 一、时序分析基本概念 ##### 1.1 同步逻辑时延模型 **1.1.1 时钟抖动与偏斜** 时钟抖动(Jitter)是指时钟信号在理想时钟边缘上出现的时间偏差,它主要由噪声和电源波动引起。时钟偏斜(Skew)则是指同一个时钟在网络的不同位置到达时间上的差异。这两种现象都会对同步电路的性能产生重要影响。 **1.1.2 建立时间/保持时间** 建立时间(Setup Time)是指数据有效之前时钟上升沿到达的最晚时间,而保持时间(Hold Time)则是指数据在时钟上升沿后仍需保持有效的最短时间。这些参数是确保数据正确捕获的关键指标。 **1.1.3 恢复时间/移除时间** 恢复时间(Recovery Time)定义为数据在时钟下降沿后必须保持稳定的最长时间;移除时间(Removal Time)则是在时钟下降沿之前数据必须保持稳定的最短时间。这两项对于时序设计同样至关重要。 **1.1.4 Launch Edge & Latch Edge** Launch Edge 和 Latch Edge 是指触发器的时钟边沿,在上升沿触发的情况下,分别是数据被锁存前的时钟边沿和数据被锁存后的时钟边沿。 **1.1.5 Data & Clock Time** 数据时间和时钟时间分别指的是数据有效的时间窗口和时钟有效的时间窗口,这两个时间窗口的配合决定了数据能否被正确地捕获。 ##### 1.2 时序分析基本公式 **1.2.1 建立时间(Setup Time)检查** 建立时间检查公式为:`Tsu = Tck - Tdata - Tsu_min`。其中,`Tck` 表示时钟到达时间,`Tdata` 表示数据到达时间,`Tsu_min` 表示最小建立时间。为了满足建立时间要求,`Tck - Tdata` 必须大于 `Tsu_min`。 **1.2.2 保持时间(Hold Time)检查** 保持时间检查公式为:`Thold = Thold_min - (Tck - Tdata)`。为了满足保持时间要求,该值必须大于或等于零。 **1.2.3 恢复时间(Recovery Time)检查** 恢复时间检查公式为:`Trec = Trec_min - (Tck - Tdata)`。同保持时间一样,为了满足恢复时间要求,该值也必须大于或等于零。 **1.2.4 移除时间(Removal Time)检查** 移除时间检查公式为:`Trem = Trem_min - (Tck - Tdata)`。同样,为了满足移除时间要求,该值必须大于或等于零。 **1.2.5 多周期路径(Multicycle Paths)检查** 多周期路径是指数据经过多个时钟周期才能从输入到达输出的路径。这种情况下,需要对每个周期进行时序检查,并确保所有路径都能满足时序要求。 ##### 1.3 Altera 器件时序模型 Altera 器件的时序模型包括了器件内部的各种延迟和时序特性,例如存储单元的延迟、寄存器到寄存器路径的延迟以及各种特殊功能模块的时序特性。 ##### 1.4 基本单元与 paths FPGA 设计中的基本单元包括寄存器、查找表、乘法器等,而 paths 则是由这些基本单元组成的信号传递路径。理解这些基本单元的特性和它们之间的连接方式对于进行时序分析至关重要。 ##### 1.5 关键路径与时序优化方法 关键路径是指从输入到输出的所有可能路径中延迟最长的路径。时序优化的目标是缩短关键路径的延迟,常用的方法包括资源重用、流水线设计、寄存器复位等。 ##### 1.6 FPGA 时序约束的几种方法 时序约束用于指导综合工具如何优化设计以满足时序要求。常见的约束类型包括最大/最小时钟频率、路径延迟、I/O 端口延迟等。 **1.7 对 Tsu 和 Tco 的简单约束** Tsu 和 Tco 分别代表了输入数据的建立时间和输出数据的传播延迟。通过对这些参数设置约束,可以确保设计满足时序要求。 #### 二、使用 TimeQuest 时序分析器约束分析设计 TimeQuest 是一种用于分析和约束 FPGA 设计时序的工具。 ##### 2.1 TimeQuest 基础 **2.1.1 时序约束和分析流程** TimeQuest 的使用流程通常包括以下几个步骤:创建时钟、定义时钟关系、设置路径组、分析时序并解决违规。 **2.1.2 TimeQuest GUI** TimeQuest 提供了一个图形用户界面(GUI),方便用户进行时序分析和约束设置。 **2.1.3 看懂时序波形图** 时序波形图能够直观展示信号的变化情况,通过观察这些波形可以帮助理解设计中的时序问题。 **2.1.4 图解时序余量计算** 时序余量(Slack)是实际时序与要求时序之间的差值。正余量表示满足要求,负余量则表示存在时序违规。 **2.1.4.1 图解 Setup Time 时序余量** Setup Time 时序余量的计算公式为:`Slack = Tck - Tdata - Tsu`。 **2.1.4.2 图解 Multicycle Path 时序余量计算** 对于多周期路径,需要对每个周期进行单独的时序检查,然后计算总的时序余量。 ##### 2.2 时序约束 **2.2.1 Clocks** **2.2.1.1 Create clock** 在 TimeQuest 中创建时钟约束,包括定义时钟周期、相位偏移等属性。 **2.2.1.2 Create generated clock** 生成时钟约束适用于 PLL 或 DLL 产生的时钟信号。 **2.2.1.3 PLL clocks** PLL 时钟约束考虑了 PLL 的特性,包括输入时钟的频率范围、相位偏移等。 **2.2.1.4 Automatic clock detection & creation** 自动检测时钟信号,并创建相应的约束。 **2.2.1.5 Default constraints** 默认约束用于没有特定约束的路径。 **2.2.1.6 Clock latency** 时钟延迟是指时钟信号在网络中传播的时间。 **2.2.1.7 Clock uncertainty** 时钟不确定性反映了时钟网络中可能存在的不确定因素,如抖动和偏斜。 **2.2.1.8 Common clock path pessimism removal** 去除公共时钟路径的悲观假设,有助于更准确地评估时序。 **2.2.1.9 检查** 检查时序约束是否正确应用,并确保设计满足所有时序要求。 **2.2.2 I/O** **2.2.2.1 Combinatorial I/O interface** 组合逻辑 I/O 接口的约束关注输入信号到达和输出信号离开的延迟。 **2.2.2.2 Synchronous I/O interface** 同步逻辑 I/O 接口的约束则涉及时钟和数据之间的关系。 **2.2.2.3 Source synchronous interface** 源同步接口约束关注发送端和接收端之间时钟和数据的同步。 **2.2.2.4 检查** 检查 I/O 端口的约束是否满足要求。 **2.2.3 False paths** **2.2.3.1 set_false_path** 设置虚假路径约束,用于排除某些不可能的路径,避免误报时序违规。 **2.2.3.2 set_clock_groups** 设置时钟组约束,用于处理不同时钟组之间的相互影响。 **2.2.4 Multicycle paths** **2.2.4.1 单时钟域的多时钟周期** 在单一时钟域内,数据需要经过多个时钟周期才能完成一次完整传输的情况。 **2.2.4.2 多时钟域的多时钟周期** 当数据在不同时钟域间传输且需要多个时钟周期完成时,需要特殊处理。 #### 结语: 本文详细介绍了 FPGA 设计中时序分析的基本概念、时序约束的设置方法以及使用 TimeQuest 进行时序分析的具体流程。通过理解这些概念和技术,读者可以更好地掌握 FPGA 设计中的时序分析技术,提高设计质量和效率。
剩余97页未读,继续阅读
- 粉丝: 0
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助