1.时序是FPGA工作的基础,好比人的心脏。
2.网上的的时序教程有一个原则就是,把你看懵逼为止,现状就是80%的FPGA工程师被问时序就是一脸懵逼。说不懂吧,懂点;说懂吧,人家一问怎么约束,又懵逼。
3.时序约束本质而言是利用时序约束语言对你自己的设计做解释,解释告诉编译器你的时序情况。你需要解释的东西是两个;
(1)是解释你的代码,你的各大时钟的运行频率、跨时钟域时你已经做了处理,你得告诉编译器这个事情,我已经处理了,你就不要管了、这个数据不需要在这个时钟内被采集,你也得通过设置多周期约束告诉编译器等等。
(2)是解释你的FPGA上下游环境,大概包括,输入主时钟、数据输入外设(ADC、乃至按键/18B20)、数据输出外设(DAC/屏幕驱动/LED)、双向数据交互(DDR/PCIE/SRAM/NAND FLASH等等)
4.约束的前提,你得知道什么是保持时间、建立时间、恢复时间,能解释这几个名词,接着往下看。不知道如约束这句话也分层级的。
(1)不知道怎么要约束些什么,上面第三点已经说了,向编译器解释你的代码和FPGA环境,具体解释什么?如果不知道,那就再去网上冲浪。
(2)怎么约束(怎么写),约束文件格式各大FPGA大同小异,反正你要做的就是形成一个约束文件,约束文件你可以自己手写(熟悉时序约束指令),也可以利用软件帮你写(Quartus的TimeQuest、Xilinx的Timing)
(3)怎么知道约束好了,直接点就是时序报告没有红色(没约束完、约束不合理都会冒红),具体的时序分析需借助TimeQuest软件。
5.约束过程有一个名字叫时序收敛,时序收敛即为让你的工程满足时序要求的过程,这个过程不仅仅包含时序约束文件的编写、也包括引脚约束、以及你为了满足工程(时序)需求而调整代码的过程。
6.其实有大部分人不会做时序约束的原因,不是因为不知道时序约束理论,相反,记得很熟,数据到达、时钟到达时间都记得溜溜的,反正我是没记到。而是缺少一个demo,就是利用自己手边的软件环境就能实打实的实现,能看到效果。
这篇日志屁话不多,都是自己摸出来的,其实时序不复杂,不复杂的前提是这个工程代码是你写的,就是你要足够的熟悉代码,不熟悉代码,不要给我说时序约束、时序收敛。后面我将梳理几个手把手的时序约束的例子。