中文 英语

如何集成嵌入式FPGA

在SoC中添加eFPGA比仅仅添加加速器要复杂得多。

受欢迎程度

选择在SoC中添加可编程逻辑eFPGA这只是个开始。接下来的其他选择包括有多少查找表(lut)、多少路由和哪种拓扑、数据将如何在结构内外传输、数据是否需要与系统内存一致、如何对其进行编程和测试,以及什么RTL功能需要嵌入到可编程结构本身?

其中一些决定将受到应用程序的影响。它会是一个计算加速器吗?它是在做传感器处理,还是流水线数据路径的一部分?eFPGA技术的供应商正试图使他们的产品尽可能灵活。但是,虽然进入eFPGA的内容可以推迟,但有关eFPGA的决定不能推迟。

影响还不止于此。的验证心流也必须改变。团队是否继续对整个设计使用ASIC验证流程,包括预计进入面料的内容,还是面料内容看起来更像一个FPGA流?可能会有一个新的团队成员,他开始看起来更像一个软件程序员,但在一个更类似于固件的级别上,可能需要更多的硬件和体系结构知识。

“将FPGA结构集成到可能已经复杂的ASIC设计中是一个不小的壮举,”Brian Mathewson说Mentor是西门子旗下的企业.“开发人员必须确保eFPGA结构正确实现,用于可编程结构的任何逻辑都具有适当的大小,并且可以与ASIC的其他部分接口。”

嵌入eFPGA和使用通用FPGA的双芯片解决方案之间存在显著差异。Menta董事总经理兼业务发展副总裁Yoan Dupret建议:“在集成eFPGA时,您需要考虑应用程序。“你必须探索设计的角落,这应该提前评估。我们不需要考虑通用FPGA的情况,你今天有一个设计,将来你想要一个完全不同的设计。”

面料内部
eFPGA与单独的FPGA使用方式不同。Quicklogic可编程IP高级工程总监Himanshu Sanghavi表示:“ASIC设计工程师的思维方式与FPGA设计工程师略有不同。“FPGA设计人员习惯于在FPGA的限制范围内工作,比如lut的数量、可用ram的大小、DSP/数学块的能力等,这些都是有限的资源。ASIC设计人员虽然明显受到整体SoC区域/功率限制的限制,但通常有更大的灵活性来设计他们所需的逻辑,而不是总是必须将其安装在预先设计的FPGA结构上。”

图1:织物内部的混合功能。来源:薄荷。

大多数eFPGA供应商允许可编程块与内存和固定功能块混合,如图1所示。可以选择每种纤维的数量以及它们在织物中的分布方式。一些供应商允许您提供自定义块,而其他供应商则提供可以合并的块列表。

还可以定义块的几何形状。“人们通常想要方形或接近方形的东西,”公司首席执行官杰夫·塔特(Geoff Tate)说Flex Logix.“正方形倾向于最小化最长的潜在关键路径。在某些情况下,窄和瘦是有意义的,比如I/O函数。”

有几个变体用于连接块。有些使用类似于传统fpga的结构,如图2中左侧所示。其他的,如Efinix,以类似于可编程块的方式处理路由资源,因此可以将它们精确地放置在需要的地方。在逻辑功能和互连之间取得正确的平衡会显著影响获得高资源利用率的能力。

图2:连接逻辑功能。来源:Efinix。

eFPGAs的另一个选择是利用NoC,如图3所示。

图3:将片上网络集成到FPGA结构中。来源:Achronix。

Achronix刚刚在其独立的FPGA产品中宣布了这一功能。Achronix的系统架构师Kent Orthner表示:“NoC使用一系列高速行和列网络导管在FPGA结构中分布数据,在整个FPGA结构中水平和垂直分布数据流量。

使用NoC还可以提供与SoC其余部分的连接。

连接面料
在某种程度上,可编程结构必须集成到SoC中。在图4中,Quicklogic演示了执行该集成的各种方法。虽然这张图是一个概念框图,但所示的每个接口都代表了实际SoC设计中使用的接口。

图4:集成eFPGA织物。来源:QuickLogic。

许多应用程序最可能采用的方法是将结构连接到系统总线。Menta的杜普雷特说:“大多数解决方案都是让织物坐在公交车上。“我们也看到了更加深入的解决方案。有些人想要与cpu共享内存,甚至是一些缓存。然而,大多数解决方案将在数据路径中有内存。

像AXI这样的接口提供了进入fabric的高带宽通道。Flex Logix的泰特说:“大多数人都想要一个比现在更快、更便宜的版本。“大多数人不会考虑根本性的架构变化。他们习惯了FPGA工作静态存储器芯片形式的内存,当它变成芯片中的块时,他们就是这么想的。FPGA将是某种形式的加速器或挂在AXI或AHB总线上的I/O块。”

也可以使用不同的接口。Quicklogic的Sanghavi补充说:“eFPGA至少需要一个AXI从接口,如果潜在的用例需要总线管理功能,那么主接口也需要。”“使用AXI只是为了说明问题,但根据整体SoC数据传输需求和IP可用性,它可能是一种不同的总线协议。”

记忆是如何连接的会产生很多复杂的问题。“假设你有一个结构,其中嵌入式FPGA有一个紧密相关的内存,这是一个更大的背景下的子系统,”Frank Schirrmeister说,高级集团主管产品管理和营销节奏.“你现在有了一个记忆层次。嵌入式FPGA有一个缓存,那么如何处理一致性呢?这就是为什么他们正在创建缓存相干互连,如CCIX.”

另一个复杂的问题与接口的速度和eFPGA可以运行的速率有关。“系统的AXI接口可能以相对较高的频率进行计时,而eFPGA上的逻辑可能以相同的频率运行,也可能不以相同的频率运行,”Sanghavi说。因此,图中显示了用于FPGA结构和AXI主/从模块之间的时钟速率转换和同步的块。这是一个可选的块,只有在需要这样的时钟速率转换时才需要。”

eFPGA能跑多快?Tate说:“在他们编写RTL后,他们通过工具运行它,并获得他们所选择的PVT条件的最大频率数。”“如果他们想要更高的吞吐量,就需要对RTL进行一些优化。”

虽然这听起来像是一个问题,但操作频率的变化量可能是有限的。Dupret补充道:“他们可能会使用相同类型的应用,虽然他们可能会在未来更新它,但这是相当可预测的。”“应用程序永远不会完全改变。因此,我们不会看到未来的应用程序只以一半的速度运行。”

这可能需要定义一个静态关系。“如果SoC时钟是某个频率,而你可以在另一个频率上运行FPGA,你应该寻找两者的整数倍,”Tate建议。“如果系统时钟是1GHz,而FPGA能够以600MHz的频率运行,那么你很可能会以500MHz的频率运行FPGA,这样它就可以与系统时钟同步。如果客户想要块之间的异步接口——他们可以做到。这只会增加复杂性。”

有很多选择,但并不需要那么复杂。

“人们通常认为这是一个处理块,他们必须将数据输入和输出,并需要以特定的频率运行,”基于fpga的合成软件工具的高级产品营销经理Joe Mallett说Synopsys对此.“从综合的角度来看,你可能需要加大力度才能获得所需的数量。如果你有一个同步接口,它会变得更容易,因为你不再需要担心域之间的交叉和同步数据。”

Sanghavi讨论了其他一些接口选项。“除了高带宽数据通道外,eFPGA还可以连接到慢速串行外设,如传感器。SPI接口通常以eFPGA可能匹配的低时钟频率运行,因此通常不需要时钟频率转换。eFPGA在SoC上对CPU/DSP类型的处理块提出中断是非常有用的。例如,这将用于通知CPU eFPGA已经完成分配给它的数据处理任务,并且处于空闲状态。”

这就是可编程性变得特别重要的地方。

“大多数soc包括几个固定功能块,这些块是定制的RTL块,旨在有效地执行某种计算,”Sanghavi说。“虽然这个固定功能模块完成的数据处理是预先已知的,但很可能需要各种预处理或后处理任务,其中一些在SoC设计时还不知道。eFPGA可能是执行这些任务的最佳选择,在这种情况下,eFPGA与固定功能块之间的直接连接可能是有利的。这可以是一个自定义的点对点接口,不会为这个专用的数据传输任务耗尽AXI总线带宽。”

在某些情况下,分配给eFPGA的任务可能需要它访问SoC中的一个或多个主I/ o或引脚。例如,这可以通过通用I/O引脚通信状态信息,或者在eFPGA中实现与SoC外部逻辑通信的附加串行接口。这很可能会使用与其他功能共享的引脚,通过在SoC级别配置的一些I/O muxing结构。

Sanghavi解释说:“SoC上的eFPGA需要一个编程接口来加载要在其上实现的设计。类似地,在eFPGA上实现的功能可能需要一些额外的运行时配置位,例如为FPGA上实现的逻辑设置各种模式和其他控制寄存器位。这个任务可以通过APB之类的外围接口来完成。eFPGA子系统中的APB从接口连接到系统APB总线,系统APB主接口通过该接口对eFPGA进行编程。再一次,APB的使用是说明性的,类似的功能可以通过串行总线,如SPI或各种其他手段来实现。”

系统编程
eFPGA的添加为编程任务增加了一个新的维度。Synopsys的Mallett说:“使用嵌入式fpga,它变得更具挑战性,但在其他意义上更容易。eFPGA块已经连接到总线上,并将中断、信号和数据流连接到内存中。他们只需要考虑我在里面放了什么。更困难的部分是,许多这些芯片更以软件为中心,这意味着SoC的可编程部分是软件。你将有驱动程序、操作系统和应用程序,现在你有了一个可编程的部分,是可配置的硬件。”

谁将编码eFPGA内容?Mallett补充道:“你增加了一个用户群体,他们通常是软件开发人员,他们希望使用这个硬件加速器。”“他们可能只是像编写固件一样对其进行编程,并期望达到一定的操作级别,并能够编写api。新用户可能不太懂硬件。支持这类用户的压力越来越大。”

这可能需要改变编程模式。简化编程模型的一种方法是在更高的层次上进行设计抽象这样就有了一个通用的基于软件的设计入口方法,”Max Odendahl说Silexica.”然后用高级合成(HLS)将软件代码转换为FPGA实现。需要一个工具来帮助工程师定义软件和硬件是如何划分的,它应该提供可操作的设计依赖关系的见解,并指导HLS编译器有效地实现硬件。”

对于一些设计团队来说,需要新的技能。Odendahl说:“一些团队已经在系统级使用fpga连接到他们的asic。“他们对芯片形式的FPGA有很多知识,他们了解FPGA编程。其他不使用fpga的团队习惯于使用RTL进行硬连线逻辑,他们的学习曲线更陡峭。使用fpga,为了获得高性能,你需要做更多的流水线工作。FPGA对所有lut的输出都有触发器,所以流水线基本上是免费的。但你不能把现有的硬连接ASIC RTL扔到FPGA中,并期望得到良好的结果。他们的学习曲线更长。”

这就是FPGA专业知识的用武之地。Sanghavi建议:“在设计团队中拥有一位熟悉FPGA位置和路由工具使用的工程师是有帮助的。“许多SoC设计团队将其ASIC的物理实现外包给其他团队,因此可能在该领域没有任何内部专业知识。”

验证系统
验证流程也必须改变。fabric、fabric与SoC之间的接口以及映射的功能都必须经过验证。Mentor的Mathewson说:“EDA流程已经扩展到eFPGAs需求的配置空间的急剧增加。“不仅必须验证eFPGA的实例化,而且必须探索eFPGA的潜在用途。”

团队必须决定是要验证未编程的结构,还是使用几种可能的映射进行验证。Mallett说:“从基本硬件的角度来看,我将编写进入织物的加速器,并对这些部件进行测试和验证。”“这与现有的独立FPGA世界观点类似。我将模拟它,调试它,我将使用现有的工具。但如果你的芯片中有几个处理块和加速器,并且这些块之间相互作用,你必须运行足够长的时间来发现它是否在功能上做它应该做的事情。”

FPGA验证通常落后于SoC方法。Cadence的Schirrmeister表示:“FPGA对编码、映射、打开、调试、重复的态度并没有太大变化。“FPGA部分的设计变得更加复杂,可以从更自上而下、有序的方法中受益,但并没有太大改善。”

这部分是由于eFPGAs可以用于各种应用。SmartDV董事长Deepak Kumar Tala表示:“虽然嵌入式FPGA资源供应商将支持其提供的IP,但它无法预见它将如何与目标SoC中的其他功能集成和连接。”“VIP在验证嵌入式FPGA和SoC中其他块之间的标准互连和通信协议是否符合预期或规范方面发挥着重要作用。”

形式验证能帮上忙。“FPGA结构必须经过两次验证,首先由供应商进行验证,然后由用户对其进行编程,”Tobias Welp解释道OneSpin解决方案.“形式等价性检查是一个关键的验证步骤,当涉及到fabric时,它就更加重要,因为FPGA合成工具提供了高级优化来满足要求功率、性能和面积(PPA)的目标。其中一些优化改变了设计的状态空间,并跨寄存器边界移动逻辑,因此需要进行顺序等价性检查。这应该分多个阶段执行,以确保输入RTL、合成后的网络列表、放置和路由的网络列表以及编程比特流都是功能等效的。”

结论
将FPGA结构集成到SoC中需要在设计和验证流程中进行重大更改,并且只有在了解所有风险时才应该进行。它需要组建一个拥有所有必要技能的团队。这可能需要不同的架构思维来获得优化的解决方案。但那些管理它的人将获得一定程度的灵活性和优势,使他们的产品能够经得起未来的考验,这将提供一个显著的拥有成本优势。

相关文章
eFPGA &FPGA知识中心
FPGA设计权衡越来越困难
随着芯片尺寸的增长,优化性能和功耗需要一系列新的选项和方法的改变。
嵌入式fpga的案例增强和扩大
将FPGA的灵活性与SoC的性能和成本优势相结合,正将这项技术推向主流。



1评论

Lydell亚伦 说:

我喜欢你的观点:

“可能会有一个新的团队成员,他开始看起来更像一个软件程序员,但在一个更类似于固件的层面上,可能需要更多的硬件和架构知识。”

留下回复


(注:此名称将公开显示)

Baidu