作为ASIC领域中一种半定制电路,FPGA的发展不但解决了定制电路不足,并且能够克服可编程器件门电路数有限的特点。再加上FPGA自身具有的设计周期短、开发成本低和设计灵活等特点,基于FPGA的开发越来越流行。为了帮助大家解决FPGA开发中碰到的相关问题,电子发烧友网和FPGA资深工程师吴厚航(网名“特权同学”)进行了深入的交谈,希望能为工程师群体在电子设计道路上提供参考。
大家知道在FPGA设计中,时序设计是至关重要的,通过时序设计去满足每一个触发器的建立和保持时间的要求,是FPGA设计中的重点。大家虽然知道这是很重要的,但对于时序设计为什么在FPGA设计中如此重要,或许知其然而不知其所以然。
电子发烧友网就此事咨询了特权同学。特权同学认为,如果想了解一个人的FPGA设计开发水平,只需要看他们所作的FPGA设计中是否进行了时序约束、如何约束及其相关的细节便可八九不离十的得出结论。由此可见,时序设计在整个FPGA开发过程中的重要性不言而喻。特权同学从FPGA的设计出发,给我们阐述了时序设计的重要性。
如图所示,这是一个典型的FPGA开发流程图,当然并不是一个非常全面完整的流程图,但是至少我们可以从这些箭头关系得知FPGA设计一个特有的迭代性。这和大多数以往我们所接触过的纯软件或纯硬件开发都不一样。FPGA开发的迭代性,意味着设计过程中的每一个环节出现差错,都可能导致整个系统推倒重来,回到起点。
就拿当前我们所讨论的时序设计来说,在时序约束阶段,如果我们得到的时序报告中很多时序路径违规,无法达到既定要求,那么我们会一步一步往回找问题的解决办法,先是确认时序约束本身的合理性(尤其不要有过约束);接着在实现阶段和综合阶段找办法,主要是通过工具选项进行一些特定的优化设置;再搞不定就要修改代码,从根本上进行设计逻辑和路径的优化;有人关心还是搞不定怎么办,只能告诉你需求分析不到位,你的器件选型恐怕有待商榷了。这么看下来,FPGA设计还真是环环相扣,每个步骤都来不得一点马虎。
特权同学通过FPGA设计入手,给我们初步解析了为什么时序设计会是这么重要。但作为工程师的我们,既然已经更明白到其重要性,那就要去深入了解其中的问题,为我们日后的开发提供需要注意的参考。
根据特权同学的看法,时序设计通常可以大致的分为时序分析、时序约束、时序报告、时序收敛(这在笔者所著的《爱上FPGA开发——特权和你一起学NIOS II》一书第4章有详细介绍)四个阶段。每个阶段都很关键,都不能够随意敷衍了事。
尤其是时序分析阶段,虽然对于基础理论知识,我们可能都能够理解和领会,但工程实践中遇到的各种情况恐怕要比理想公式的关系复杂得多。因此,在掌握了理想时序分析模型的理论知识之后,要能够活学活用,遇到各种复杂的情况要能够灵活变通,特别是FPGA和外部芯片接口的时序设计上,不同的外部芯片给出的时序信息良莠不齐,就很考验我们的分析能力。
当然了,话说回来,实际情况虽然不同,但是我们将这些复杂情况提炼出来的基本模型都是“万变不离其宗”的,最终考验的还是我们“化繁为简”的能力。所以,每位做时序分析的工程师,都需要特别注意锻炼自己在这一方面的功力。
我们之前有提过,如何从实际出发了解时序分析的问题。接下来特权同学会给我们介绍他在FPGA时序设计中碰到的问题。
特权同学说到在刚刚开始做FPGA的项目时,由于经验所限,很多陷阱和弯路都走了个遍。这里举一个跨时钟域的时序问题:
这是一个FPGA内嵌硬核CPU的系统,它的软件代码在每次上电时从一颗外部的FLASH中加载。CPU本身只有一组总线接口,这个总线接口的逻辑都是自己设计的,FLASH运行软件的代码是直接使用了官方给出的源代码。因此,一开始只是想当然的将FLASH和CPU按照实例“对接”上了。却忽视了例化中供给二者的时钟不同,CPU跑得频率是FLASH频率的3倍多。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)