本书介绍了4种基本时序路径分析、时钟约束、输入/输出延时约束、时序例外约束和其他时序约束。
本书共8章,第1章以生活场景时序例子开篇,介绍FPGA及Vivado编译工具,阐述时序分析和约束意义,描述FPGA时序约束整体框架; 第2章从建立/保持时间、启动沿/锁存沿等概念切入,分析4种基本时序路径; 第3章聚焦时钟分析与约束,涵盖主时钟、抖动、不确定性、延时、虚拟时钟和衍生时钟约束等内容; 第4章讲述输入/输出延时约束,依次分析输入延时约束和输出延时约束; 第5章阐述时序例外约束的意义,分析伪路径约束、时钟组约束、最大/最小延时约束、多周期路径约束,说明其优先级和逻辑设计方法; 第6章汇总其他时序约束,如Case Analysis、Disable Timing等; 第7章设计简单时序工程,涵盖前几章的时序路径并进行约束; 第8章总结时序约束技巧,分享作者学习历程。
本书适合作为FPGA开发工程师和研究人员的参考书籍,尤其适合希望全面理解FPGA时序的开发者,也可以作为高等院校相关专业FPGA课程的教材。
FPGA因具备可编程、并行处理及低功耗等独特优势,广泛应用于复杂数字逻辑、硬件加速、数字信号处理、边缘计算、深度学习算法加速等领域。当前时钟频率越来越快,数据带宽越来越大,FPGA逻辑设计中时序问题凸显,这使得FPGA时序分析和时序约束在高频且逻辑功能复杂的设计中越来越重要。
在交通领域,车辆行驶速度快、流量大,则易导致交通事故与拥堵; 车辆行驶速度慢、流量小,则浪费交通资源且通行效率低。交通安全不应仅靠限行限速,更需要合理调度公路资源、优化交通规则,实现快速、安全通行。城市之间可以设计高速公路,城市之内可以设计快速路,交叉路口设计智能红绿灯,区域可以设计绿波路段,不断提高交通资源的效率和利用率。
类比到FPGA逻辑设计中,高时钟频率和高带宽如同提高车速和路宽,提升效率则容易引发数据阻塞、追尾和刮蹭。若要打造更快速、更稳定的FPGA逻辑,不仅需要设计合理的逻辑功能,而且需要进行时序分析并设计时序约束。换言之,FPGA逻辑设计既要会修路,还要会当交警,时序分析和约束就是当交警。
然而,在学习 FPGA 时序分析和约束的过程中,我发现存在一些问题。互联网上虽然有大量官方手册、经验总结及论坛教程对其进行说明,但大多是针对某一时序问题展开分析和约束,不利于研究者了解完整的时序框架,完整且系统地对 FPGA 时序进行分析和约束的资料相对匮乏。同时对实际工程逻辑代码、时序分析公式、时序路径框图及时序报告进行分析的案例较少,能够将时序报告中各类延时绘制成时序图,以帮助研究者直观理解时序的资料更是寥寥无几。
我在学习过程中做了一些努力。首先,有意识地构建了一个时序框架把时序问题规范到一起,摒弃从网上照搬一知半解的解决方案,因为很多时序问题可以采用不同的约束方案,只有理解全局后解决问题才变得游刃有余。其次,为不同时序问题设计工程逻辑代码,依据时序分析公式、时序路径框图和时序报告对每一种时序问题进行分析和约束,理解问题最好的方法就是仿真和实践。最后,为了直观地呈现时序路径的延时,我将时序报告中的延时数据绘制到时序路径中,并绘制了时序图,使时序问题变得清晰、明确。
最初学习FPGA时序分析和约束的笔记是手写稿,随着整理内容的不断增多,我对时序问题也有了更多的心得与体会。为了方便阅读和规范化,我将其整理为电子稿,后来又编撰成册,希望能与广大读者产生共鸣。本书内容相对全面,几乎涵盖了Vivado 支持的所有时序约束指令,且每个时序分析案例都附有完整的逻辑代码、时序原理公式、时序图和路径图,清晰、直观且不枯燥。此外,书中还包含一些场景实例,能够帮助读者更好地理解时序概念和相关问题。
本书介绍了4种基本时序路径分析、时钟约束、输入/输出延时约束、时序例外约束和其他时序约束。读者既可以按照顺序依次阅读,也可依据研究需要针对具体约束进行查阅。需要强调的是,实践出真知,对于初学者来说,亲自对案例进行编译和分析,自行绘制时序路径和时序图,会比单纯阅读更有助于深入理解。
最后,非常感谢清华大学出版社杨迪娜老师,为本书的立项、编辑和出版做了很多工作。感谢清华大学出版社对本书的认可和支持。感谢天津大学董娜教授,在硕博6年的时间里对我精心指导,帮助我拓宽科研思路并提升写作能力。感谢刘星和常斐然同学对行文和绘图提出宝贵意见。
非常感谢单位领导张大钢、李红军、王进军、刘剑锋、朵慧智,在百忙之中抽出时间阅读本书初稿,并提出了宝贵的建议和修改思路。还要感谢邢立佳、高广杰、王高峰、杜金艳、李文健、梁志豪、秦法佳,他们是非常好的导师、朋友和工作伙伴,与他们共事十分愉快。
由于个人水平有限,书中难免存在缺陷或纰漏之处,恳请各位读者谅解并批评指正。
常建芳2025年7月
变量列表
第1章时序分析和约束
1.1什么是时序分析和约束
1.2什么是FPGA将时序分析和约束例子搬到FPGA中
1.3什么是Vivado2024.1逻辑设计/时序分析工具
1.4时钟频率和逻辑资源的影响
1.5FPGA的基本时序约束
第2章4种基本时序路径
2.1时钟与寄存器基本模型
2.2建立时间与保持时间
2.3启动沿、锁存沿与建立时间关系、保持时间关系
2.4基本时序路径的相关概念
2.5寄存器到寄存器的时序路径分析
2.6输入引脚到寄存器的时序路径分析
2.6.1系统同步接口输入引脚到寄存器路径分析
2.6.2源同步接口输入引脚到寄存器路径分析
2.7寄存器到输出引脚的时序路径分析
2.7.1系统同步接口寄存器到输出引脚路径分析
2.7.2源同步接口寄存器到输出引脚路径分析
2.8输入引脚到输出引脚的时序路径分析
第3章时钟约束
3.1主时钟约束
3.1.1主时钟约束语法
3.1.2主时钟与主时钟约束
3.1.3主时钟时序分析报告
3.2时钟抖动约束
3.2.1时钟抖动约束语法
3.2.2时钟抖动约束实例
3.3时钟不确定性约束
3.3.1时钟不确定性约束语法
3.3.2时钟不确定性约束实例
3.3.3时钟不确定性约束妙用
3.4时钟延时约束
3.4.1时钟延时约束语法
3.4.2时钟延时约束实例
3.5虚拟时钟约束
3.5.1系统同步接口输入引脚到寄存器路径的虚拟时钟约束
3.5.2系统同步接口寄存器到输出引脚路径的虚拟时钟约束
3.6衍生时钟约束
3.6.1衍生时钟约束语法
3.6.2衍生时钟约束实例
3.7关于Max at Slow Process Corner和Min at Fast Process Corner
第4章输入/输出延时约束
4.1输入延时约束
4.1.1输入延时约束语法
4.1.2输入延时约束实例
4.2输出延时约束
4.2.1输出延时约束语法
4.2.2输出延时约束实例
第5章时序例外约束
5.1时序例外约束的意义
5.2伪路径约束/时钟组约束
5.2.1伪路径约束语法
5.2.2伪路径约束实例
5.2.3时钟组约束语法
5.2.4时钟组约束实例
5.3最大/最小延时约束
5.3.1最大/最小延时约束语法
5.3.2最大/最小延时约束实例
5.4多周期路径约束
5.4.1多周期路径约束语法
5.4.2同频同相多周期路径约束
5.4.3同频异相多周期路径约束
5.4.4慢时钟域到快时钟域多周期路径约束
5.4.5快时钟域到慢时钟域多周期路径约束
5.5时序例外约束优先级
5.6时序例外约束对应的逻辑设计
第6章其他时序约束
6.1时钟约束
6.1.1Set Clock Sense约束
6.1.2Set External Delay约束
6.2时序断言
6.2.1Set Data Check约束
6.2.2Set Bus Skew约束
6.3其他约束
6.3.1Set Case Analysis约束
6.3.2Set Disable Timing约束
6.3.3Group Path约束
6.3.4set_max_time_borrow约束
第7章时序案例
7.1跨时钟域单脉冲传递
7.2跨时钟域电平信号传递
7.3多周期路径实例
第8章写在最后
8.1FPGA时序约束技巧
8.2FPGA学习之路
8.3引用文件