引言
自从几十年前首次推出fpga以来,每种新架构都继续在采用按位(bit-wise)的布线结构。虽然这种方法一直是成功的,但是随着高速通信标准的兴起,总是要求不断增加片上总线位宽,以支持这些新的数据速率。这种限制的一个后果是,设计人员经常花费大量的开发时间来尝试实现时序收敛,牺牲性能来为他们的设计布局布线。
传统的fpga布线基于整个fpga中水平和垂直方向上运行的多个独立分段互连线(segment),在水平和垂直布线的交叉点处带有开关盒(switch box)以实现通路的连接。通过这些独立段和开关盒可以在fpga上构建从任何源到任何目的地的通路。fpga布线的这种统一结构为实现任何逻辑功能提供了极大的灵活性,可用于fpga逻辑阵列内的任何数据路径位宽。
尽管在fpga中的按位来布线非常灵活,但其缺点是每个段都会给任何给定的信号通路增加延迟。需要在fpga中进行长距离传输的信号会导致分段之间的连接延迟,从而降低了功能的性能。按位布线的另一个挑战是拥塞,它要求信号路径绕过拥塞,这会导致更多的延迟,并造成性能的进一步降低。
achronix将此挑战视为一个开发全新架构的机会,以消除传统fpga的设计挑战并提高系统性能。achronix的解决方案是在传统分段式fpga布线结构之上,再为其全新的speedster7t fpga系列器件创建一个革命性的二维(2d)高速片上网络(noc)。speedster7t noc连接到所有片上高速接口:400g以太网、pcie gen5、gddr6和ddr4 / 5的多个端口。
noc的内部由一组行和列组成,它们在整个fpga逻辑阵列中将网络数据流量从水平和垂直方向上进行分发。主noc接入(nap)点和从noc接入点位于noc的每一行和每一列交叉的位置。这些nap可以是noc和可编程逻辑阵列之间的源或目的地。
图1:speedster7t的片上网络(noc)和接口
ethernet:以太网
security:安全性
configuration:配置
each direction:每个方向
speedster7t的noc似乎只对fpga内部的布线总线有所帮助;但是,这种新型架构可以显着提高设计人员的工作效率,实现全新的设计功能,并提供了轻松实现密集型数据处理应用的能力。下面列举了在效率提高、设计变更和性能提升方面最显著的八种应用场景。
在整个fpga的逻辑阵列中简化高速数据分发
在传统的各种fpga架构中,对连接到fpga的片外存储器以及与之相连的外部高速数据源进行双向的读/写操作,需要数据在fpga逻辑架构中经过一条较长且分段的路由路径。这种制约不仅限制了带宽,而且还会消耗在逻辑阵列中的用户设计所需的布线资源,这给fpga设计人员在时序收敛方面带来了挑战,尤其是其他逻辑功能对器件利用率提高的时候。
使用speedster7t的noc将数据从外部源传输到fpga和存储器,比使用传统的fpga架构完成同样的工作要容易得多。speedster7t noc增强了fpga阵列中传统的可编程互连,其中的noc就像一个叠加在城市街道系统上的高速公路网络。虽然speedster7t fpga中传统的、可编程互连矩阵仍然适用于较慢的本地数据流量,但noc可以处理更具挑战性的、高速的数据流。
noc中的每一行或每一列都被实现为两个256位的、以2 ghz固定时钟速率运行的单向数据通道。行具有东/西通道,列具有北/南通道,从而允许每个noc行或列可以同时处理每个方向上512 gbps的数据流量。总而言之,这些通道可以通过编写简单的veriog或vhd代码,在fpga阵列中传输大量的数据,这些代码支持fpga与nap通信并连接到noc高速公路网络上。
下图显示了noc中各个点之间的数据传输。点1和点2的逻辑分别实例化了一个水平nap。nap可以发送和接收数据,但是每个单独的数据流都只是朝向一个方向。类似地,点3和点4的逻辑实例化了一个垂直nap,并且可以在彼此之间发送数据流。
图2:noc上跨越器件逻辑阵列的数据流
自动将pcie接口连接到存储器
在现在的fpga中,设计人员在将高速接口连接至连有fpga的存储器件进行读写时,必须考虑在器件内由于连接逻辑、进行布线、以及输入和输出信号的位置而产生的延迟。为了实现基本的接口功能,在设计过程中构建一个简单的存储接口通常就要花费大量的时间。
在speedster7t架构中,将嵌入式pcie gen5接口连接到已连接的gddr6或ddr4存储器这项工作,可由外围noc自动处理,不需要设计人员编写任何rt来建立这些连接。由于noc连接到所有的外围ip接口,因此设计人员在将pcie连接到gddr6或ddr4的任何一个存储器接口时,都具有极大的灵活性。在下面的示例中,noc能够提供足够的带宽,以持续支持pcie gen 5通信流连接到gddr6内存的任意两个通道。这种高带宽连接无需消耗任何fpga逻辑阵列资源即可实现,并且设计所需时间几乎为零。用户只需要启用pcie和gddr6接口即可在noc上发送事务。
图3:将pcie直接连接到gddr6接口
在独立的fpga逻辑阵列模块上实现安全的局部重新配置
与其他基于静态随机存取存储器(sram)的fpga一样,speedster7t fpga必须在通电时进行配置。speedster7t fpga具有一个片上fpga配置单元(fcu),用于管理fpga的初始配置和任何后续的局部重新配置。fcu还被连接到noc,从而在配置fpga时提供了更高的灵活性。使用noc将配置位流传输到speedster7t fcu,可以使用以前不可用的新方法来对fpga进行配置。
在器件配置之前,speedster7t noc可用于某些读/写事务:pcie至gddr6、pcie至ddr4、最后是pcie至fcu。一旦pcie接口被设置好,fpga就可以通过pcie接口接收配置比特流(bitstream),并将其发送给fcu以配置器件的其余部分。一旦到达fcu,配置比特流被写入fpga可编程逻辑以配置器件。在器件被配置完成后,设计人员可以灵活地重新配置fpga的某些部分(局部重新配置),以增加新的功能或提高加速性能,而无需关闭fpga。
新的局部重新配置比特流可以通过pcie接口发送到fcu,来重新配置器件的任何部分。当部分器件被重新配置时,通过在所需的区域中实例化一个nap与noc进行通信,任何进出新配置区域的数据都可以在speedster7t1500器件中被轻松访问。noc消除了传统fpga局部重新配置的复杂性,因为用户不必担心围绕现有逻辑功能进行布线并影响性能,也不必担心由于该区域中的现有逻辑而无法访问某些器件的引脚。该功能节省了设计人员的时间,并在使用局部重新配置时提供了更大的灵活性。
此外,局部重新配置允许设计人员在工作负载变化时调整器件内的逻辑。例如,如果fpga正在对输入的数据执行压缩算法,并且不再需要压缩,则主机cpu可以告诉fpga重新配置,并加载经过优化的新设计以处理下一个工作负载。在器件仍处于运行状态时,局部重新配置可以在逻辑阵列集群(custer)级别上独立完成。一个聪明的用例是开发一个具有自我感知的fpga,该fpga通过使用一个软cpu来监测器件操作以实时启动局部重新配置,来关闭逻辑从而节省功耗,或在fpga架构中添加更多加速器模块,以临时处理大量的输入数据。这些功能为设计人员提供了前所未有的配置灵活性。
轻松支持硬件虚拟化
speedster7t noc通过利用nap及其axi接口,为设计人员提供了在单个fpga中创建虚拟化安全硬件的独特能力。将可编程逻辑设计直接连接到noc只需要在逻辑设计中实例化一个nap及其axi4接口即可。每个nap还具有一个相关的地址转换表(att),该表将nap上的逻辑地址转换为noc上的物理地址。nap的att允许可编程逻辑模块使用本地地址,同时将noc定向事务映射到noc全局存储映射所分配的地址。此项重新映射功能可以以多种方式使用。例如,它可以用于允许加速引擎的所有相同副本使用基于零的虚拟寻址,同时将数据流量从每个加速引擎发送到不同的物理存储位置。
每个att条目还包含一个访问保护位,以防止该节点访问被禁止的地址范围。该功能提供了一种重要的进程间安全机制,可防止同时在一个speedster7t fpga上运行的多个应用或多个任务干扰分配给其他应用或任务的存储模块。这种安全机制还有助于防止由于意外、偶然甚至是故意的存储地址冲突而导致系统崩溃。此外,设计人员可以使用此方案阻止逻辑功能访问整个存储设备。
图4:使用speedster7t noc实现硬件虚拟化
memory space:存储空间
简化团队协同设计
基于团队的协同化fpga设计并不是一个新的概念,但是底层架构和布线依赖于fpga的其他部分,从而使得实现这个简单概念非常具有挑战性。一旦一个团队完成了设计的一部分,另一个设计其他部分的团队在尝试访问设备另一端的资源时,通常会遇到挑战,因为需要在已经完成的设计部分进行布线。同样,对一部分已进行设计布线的fpga的区域或大小进行更改,可能会对所有其他fpga设计模块产生连锁影响。
使用speedster7t noc,可以将设计模块映射到fpga的任何部分,并且可以对资源分配进行更改,而不会影响其他fpga模块的时序、布局或布线。由于器件中所有的nap都支持每个设计模块无限制地访问noc进行通信,因此使得基于团队的设计成为可能。因此,如果一个设计的某个部分在规模上有所增大,只要有足够的fpga资源可用,数据流就会由noc自动管理,从而使设计人员不必担心是否满足时序,以及对其他团队成员正在进行的设计的其他部分可能带来的后续影响。
图5:致力于开发同一个fpga的多个设计团队
design team:设计团队
通过独立的接口和逻辑验证加快设计速度
speedster7t noc的另一个独特功能是支持设计人员独立于用户逻辑去配置和验证i/o连接。例如,一个设计团队可以验证pcie至gddr6的接口,而另一个设计团队可以独立地验证内部逻辑功能。这种独立操作之所以能够实现,是因为noc的外围部分连接了pcie、gddr6、ddr4和fcu,而不会消耗任何fpga资源。这些连接可以在不使用任何hd代码的情况下进行测试,从而可以同时独立地验证接口和逻辑。该功能消除了验证步骤之间的依赖关系,并实现了比传统fpga架构更快的总体验证速度。
图6:独立的i/o和逻辑验证
design team 1: i/o verification:设计团队1:i/o验证
design team 2: ogic verification:设计团队2:逻辑验证
采用分组模式(packet mode)简化400 gbps以太网应用
在fpga中实现高速400 gbps以太网数据通路所面临的挑战是找到一种能够满足fpga性能要求的总线位宽。对于400g以太网,全带宽运行的唯一可行选择是运行在724 mhz的1,024位总线,或运行在642 mhz的2,048位总线。如此宽的总线难以布线,因为它们在fpga架构内消耗了大量的逻辑资源,即使在最先进的fpga中也会在这样的速率要求下产生时序收敛挑战。
但是,在speedster7t架构中,设计人员可以使用一种称为分组模式(packet mode)的新型处理模式,其中传入的以太网流被重新排列为四个较窄的32字节数据包,或者四条独立的以506 mhz频率运行的256位总线。这种模式的优点包括:当数据包结束时减少了字节的浪费,并且可以并行传输数据,而不必等到第一个数据包完成后才开始第二个数据包的传输。speedster7t fpga架构的设计旨在通过将以太网mac直接连接到特定的noc列,然后使用用户实例化的nap从noc列连接到逻辑阵列中,从而启用分组模式。使用noc列,数据可以沿着该列被发送到fpga架构中的任何位置,以便进一步处理。使用ace设计工具配置分组模式,可大大简化用户设计,并在处理400 gbps以太网数据流时提高了效率。
图7:分组模式下的数据总线重排
packet:数据包
byte:字节
图8:使用分组模式的400 gbps以太网
降低逻辑占用并提高整体fpga性能
与以前的传统fpga相比,speedster7t noc具有更大的灵活性和更简单的设计方法。一个潜在的好处是noc会自动减少给定设计所需的逻辑量,设计可以使用noc代替fpga逻辑阵列来进行模块间布线。ace设计工具自动管理将设计单元连接到speedster7t noc的复杂性,因此设计人员无需编写hd代码即可实现生产率。这种方法简化了实现时序收敛的耗时挑战,同时又不会由于fpga逻辑阵列内的布线拥塞而降低整体应用性能。noc还可以在不牺牲fpga性能的情况下提高器件利用率,并且可以显着增加可用于计算的查找表(ut)数量。
为了强调这一优势,我们创建了一个支持二维输入图像卷积的示例设计。每个模块都使用speedster7t机器学习处理器(mp)和bram模块,每个mp在一个周期内执行12次int8乘法。将40个二维卷积模块链接在一起,以利用器件中几乎所有可用的bram和mp资源。总共有40个二维卷积示例设计实例并行运行,使用了94%的mp、97%的bram、但仅使用了8%的ut。在总的可用ut中,其余92%的ut仍可被用于其他功能。
随着更多的实例被内置于器件中,单个单元模块的最高频率(fmax)不会降低。该设计能够保持性能,因为进出每个二维卷积模块的数据可以直接从连接到noc的nap访问gddr6内存,而无需通过fpga逻辑阵列进行布线。
图9:一个带有40个二维卷积模块实例的speedster7t器件
结论
speedster7t noc实现了fpga设计过程的根本转变。achronix是第一家实现二维片上网络(2d noc)的fpga公司,该2d noc可以连接所有的系统接口和fpga逻辑阵列。这种新型架构使achronix公司的fpga特别适用于高带宽应用,同时显著提高了设计人员的生产率。由于noc管理了fpga中设计的数据加速器和高速数据接口之间的所有网络功能,因此设计人员只需要设计其数据加速器并将其连接到nap原语即可。ace和noc负责其他所有事务。通过使用noc,fpga设计人员将受益于:
在整个fpga逻辑阵列中简化高速数据分发
自动将pcie接口连接到存储器
在独立的fpga逻辑阵列模块上实现安全的局部重新配置
编辑:muyan来源:eeworld