可编程逻辑
当SoC的规模在一片FPGA中装不下的时候,我们通常选择多片FPGA原型验证的平台来承载整个SoC系统。而多片FPGA系统的一个最重要的痛点就是如何将这些SoC的逻辑功能原型正确的移植到多片FPGA中。
通常,如果选择了商业的FPGA原型验证供应商,而不自己做多片的平台,那么供应商都会提供一个辅助分割的自动分割工具,自动分割工具的最终目标与我们工程师的工作目标相同,即最小化FPGA之间的IO连接并平衡FPGA内部的资源利用率,但值得重视是,自动分割工具不具备在找到最佳解决方案替代经验丰富的原型的能力,或许当下AI技术是一种可以尝试的方向。
然而,自动分割工具一般具备的是尝试很多策略,直到成功。理想的组合可能是使用我们的技能和知识分配一组初始块,然后让自动工具完成其余部分。
对于用户而言,当然是希望一键成功,按一个按钮,或者执行一段脚本,啥也不用做就能完成原型移植工作,而实际上,工程师需要指导工具做的更好更合理。以下是一些需要工程师手动完成的任务,以帮助自动分区更加合理:
将需要连接到非FPGA资源(例如,存储器或外部接口)的引脚分组在一起。如果没有将引脚保持在一起的约束条件,分割工具可以将引脚分割到所有FPGA上。这是一个很关键的问题,因为像存储器这样的典型外部资源通常只连接到一个FPGA,因为假如分布到多个FPGA,那么数据在存取的时候就存在跨FPGA的操作,会大大降低平台效率,并且这样的分割显然不合理。
限制每个FPGA器件的资源使用:自动分区器可能具有默认值,但在任何情况下,FPGA内部的可用资源(门、逻辑、内存)都应限制在50%到70%之间,这样对于布局布线而言压力会小很多,也就是说布局布线的成功率会提升。
填充黑盒(black box)或手动分配资源数量,以便即使是黑盒也具有一定的大小,然后分割软件将为该黑盒保留空间。自动分割工具无法拆分黑盒。
手动分配时钟和复位:就像我们手动分区一样,时钟、复位和启动等特殊组件应该复制到所有FPGA中,这通常必须手动完成。
将模块尽量分组在一起以获得最高性能:这里的一个示例是手动划分块,这些块应该留在一个FPGA中以获得最高的性能。
允许自动分割器执行复用:结果的质量因工具而异,但在需要IO复用的设计中,自动分割工具可能能够找到一种解决方案,该解决方案允许较低的复用率,从而提高系统性能。
不同的FPGA原型验证平台供应商通常都会提供自动分割工具,每个工具都有不同的方法。然而,我们不能将这些工具视为一键解决所有问题或者自动实现最佳解决方案。唯一接近此按钮理想状态的分区工具旨在快速通过、低利用率和低性能结果,最适合模拟器平台。
对于基于FPGA的原型设计而言,性能是我们的主要目标,这种完全自动化的分区是不可行的,对我们工程师来说,始终参与这个过程是必要的,也是有益的。或许AI技术的引入,会使自动分割工具越来越智能,甚至有一天会超越人工手动分割。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !