关于FPGA原型验证以及芯片验证

可编程逻辑

1349人已加入

描述

信号在FPGA之间传输的固定时间通常比留在给定FPGA内的信号线传输时间长,因此FPGA间固定时间可能成为整个原型验证系统时钟速率的限制因素,特别是在使用TDM的情况下。如果我们专注于FPGA的IO和关键路径的时序约束,将对原型性能产生更大的影响。

SoC的顶层的约束适用于FPGA到其各自时钟域中的各个Flip_Flop,如果定义了跨时钟域,也适用于FPGA之间。当我们可以确保每个FPGA边界都有一个IOFF,它与SoC中相应的元素对齐时,这一点对于性能而言非常重要。

在这里不会详细说明FPGA工具中的时序约束,因为原型验证供应商的用户指南才是此类信息的最佳来源,以下是最相关的简短说明:

综合工具将使用相应FPGA的估计时序和最大延迟模型。

布局布线工具使用精确的时间模型来获得最大时间,使用统计估计来获得最小时间。

综合、布局布线工具是时序驱动的,因此FPGA中的所有路径都受到约束,即使仅受全局默认值的约束,除非使用错误的路径约束或其他方法来中断定时路径,明确给出宽松的定时。

黑盒将打断时序路径,因此建议为所有黑盒提供时序信息,以限制任何连接路径。

FPGA IO引脚被认为受到适用时钟约束的约束。

一般来说,任何FPGA设计都得益于大量准确的时序约束,但有时设计者可能对最终环境或时钟域关系没有足够的理解来创建它们,这对于IO约束尤其如此。在基于FPGA的原型设计中,我们的优势在于:        对每个FPGA引脚的边界和外部条件有很好的理解。例如,我们知道电路板trace性能、电路板上采取的确切路线,甚至驱动信号的源FPGA中的逻辑。这些边界条件可以自动转换为驱动每个FPGA的综合、布局布线所需的时间约束。这个过程叫做预估时间。

FPGA时序边界的预估时间

可以通过确保路径上的FPGA引脚处有FF来改善任何FPGA间路径的时序。这是因为源FPGA输出引脚上的时钟到输出延迟和目标FPGA输入引脚上的设置时间被最小化。 每个FPGA的IO板都有多个嵌入式FF,这些FF“免费”提供给我们,所以为什么不使用它们呢?如果我们可以在原型中使用这些IO FF,那么它们还将提供一个额外的好处,即SoC顶级约束将默认应用于所有FF。

使用上述理想映射的FPGA到FPGA的时序受到顶层约束的约束,除非本地覆盖,否则顶层约束会自动传播到任何路径(内部或外部)两端的FF。因此,应用于映射到IO 的FF的SoC FF的约束被简化,FPGA可以更容易地被隔离约束。这有助于我们的EDA工具流程,因为顶层约束将在每次设计迭代期间自动重新应用于FPGA。

如果分割软件或SoC设计不提供可轻易放置在FPGA IO 中的FF,那么手动或通过脚本化网表编辑添加这些FF是否可行?将额外的FF添加到SoC路径中,以便将其映射到IO FF中,当然,这会在该路径中引入流水线延迟,从而改变其系统级调度。出于原型设计的目的,我们不能随意添加这些额外的FF,因为这可能是为了提高性能,而不与原始设计人员进行检查,也可能在其他地方添加补偿FF,以保持整个设计的进度。因此,最好在每个SoC的模块边界处都有FF,并且仅在这些块边界处作为分割边界。  

FPGA组合边界的预估时间

如果在FPGA边界处插入FF或将现有FF移动到这些边界对于所有信号都是不可能的,则必须对跨越FPGA边界的组合路径进行仔细的时序约束。在这种情况下,我们需要根据路径的每个部分的复杂性来评估和划分FPGA之间的预估时间。

考虑到一个FPGA上的内部FF中的典型路径起始于另一个FPGA中的内部FF,我们需要打破适用的FF到FF约束,可能源自上述顶层SoC约束。由于只有总路径受系统级约束控制,我们需要确定映射到两个FPGA的路径的两部分应应用多少约束。然后,生成的IO约束将传递给每个FPGA的后续综合、布局布线工具。

这对于要求最高性能的设计尤为重要,因为存在或不存在精确的IO约束将导致位置和路线工具中的结果截然不同。默认情况下,分割后在隔离FPGA上工作的综合、布局布线都将假设各个时钟的整个周期可用于将信号从IO引脚传播到内部FF。然而,这种假设几乎肯定是不正确的。

例如,如果信号来自另一个FPGA中的内部FF,则数据必须经过该FPGA的内部布线、其输出焊盘延迟加上电路板跟踪延迟,才能到达接收FPGA的引脚。接收FF的时钟可能已经在接收FPGA内部生成。因此,我们可以看到,为了满足其设置定时要求,可用于将信号通过输入焊盘传播到接收FF的时间大大少于整个时钟周期。依赖默认值是有风险的,因此我们需要在组合边界处提供更好的IO约束,但这些值应该是什么?

值得注意的是,可以采用半手动方法:从第一遍FPGA时序分析中提取延迟信息,然后使用电子表格计算更精确的IO约束。然而,在组合分区边界处为数百甚至数千个信号创建IO约束将是一种长期且可能容易出错的方法。它还需要在每次设计迭代中重复。

另一种解决方法是应用接收FF时钟的半个时钟周期的默认值,并且该粗略值对于低性能目标可能是足够的。时序驱动

好消息是,在组合分区边界上进行自动和精确的预测时间是可能的。例如,使用一个简单的算法,根据总FF到FF的间隙来预算IO约束。该综合以快速通过模式运行,以估计考虑IO焊盘延迟甚至跟踪延迟的路径的时间。路径中的多个FPGA边界和不同的时钟域也包含在时序计算中。结果是每个多FPGA路径的松弛值,我们可以看到FPGA之间共享的路径延迟的比例。这方面的一个例子如图所示,为了便于求和,用了夸张的数字。我们看到,时序预算合成已经估计,100ns的总时钟约束中的40ns用于遍历第一FPGA,而10ns用于第二FPGA。FPGA之间的轨迹上也有“飞行时间”的时间余量。

允许的总路径延迟(通常是时钟周期)在设备之间按照每个FPGA在总路径延迟中所占的比例进行预算。因此,如果启动或捕获FPGA在总路径延迟中占有更大的份额,那么该FPGA的布局布线也将受到更宽松的IO定时约束,即路径被给予更多的时间。对于EDA工具来说,这是一个相对简单的过程,但只有在工具对整个路径具有自上而下的知识时才能完成。这一切都假设我们的板上的源FPGA和目标FPGA之间存在理想的时钟关系,我们可能需要采取额外的步骤来确保这一点。

 

编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分