FPGA原型验证手册:第三章-今天的FPGA技术:芯片和工具(一)

今天的FPGA技术:芯片和工具

本章的重点是基于FPGA的原型的可用硬件和软件技术。它描述了fpga作为核心技术的主要特点和相关的合成软件技术。以下章节将更详细地描述如何使用这些技术。

首先,描述了当前的FPGA技术,但重点是Xilinx®Virtex®-6家族。我们将强调每个特性对于基于FPGA的原型设计的实用性,这不仅取决于其功能,还取决于其在相关EDA工具中的支持。

3.1.今天的FPGA设备技术

FPGAs设备是基于FPGA的原型物理实现的核心。这是SoC设计将被映射和实现的地方,所以我们真的应该仔细看看它们以及我们使用与它们合作的工具。

多年来,fpga已经从适度的(按照今天的标准)可编程逻辑设备发展到具有多功能架构特性的非常大的逻辑阵列,以令人印象深刻的时钟速度运行。从图20中可以特别看出,随着架构的改进和硅技术按照摩尔定律的发展,FPGA能力的不可阻挡的进步。事实上,那些与为主要的FPGA供应商生产FPGA设备相关的生产线,都是无晶圆厂的,已经受益于生产非常大的FPGA模具的经验,并能够相应地调整他们的工艺。

因此,FPGA的进展与硅技术的整体进展保持同步也就不足为奇了,我们应该期望它至少会继续这样做。事实上,在撰写本文的时候,一些令人兴奋的新发展正在发生,使用3D IC技术,允许一些fpga超越摩尔定律。

在这里插入图片描述
投资于基于FPGA的原型设计方法不应被视为由于FPGA技术本身的稀缺而涉及任何风险。

让我们仔细看看今天的前沿技术;来自Xilinx的Virtex®-6家族。

3.1.1.Virtex®-6家族:最新fpga的一个例子

作为我们在本章中的示例,我们将重点关注Xilinx®FPGAs,因为在撰写本章之时,它们是整个行业中基于FPGA的原型设计的最流行的选择。Xilinx®Virtex-6系列是Xilinx最新的FPGA系列,由Xilinx®Virtex®-5架构演变而来,但具有增强的功能、更大的容量、改进的性能和更好的功耗。

如表2所示,在较小的CMOS过程几何中制造,可以使最大的Virtex-5和Virtex-6设备之间的逻辑容量增加了一倍以上,但此外,FF(触发器)与逻辑资源的比例增加了一倍多,从而更好地支持流水线设计。

在这里插入图片描述
完整的设备和架构的细节是可以通过使用一些资源的参考书目和这本书的附录,但现在让我们花一些时间理解FPGA技术的每个一部分,从基本的逻辑块和每个可能对我们的任务FPGA-based原型。

3.1.2.FPGA逻辑块

顺序逻辑和组合逻辑是在称为切片的逻辑块中实现的。切片包含查找表(LUT)、存储元素和其他级联逻辑。

关于FPGA技术的更多细节可以在参考文献中找到,但由于LUT是大型FPGA的基本构件,因此值得在这里简单检查一下。

一个典型的4输入LUT的核心是一个16x1的RAM。RAM的任何特定位都将根据4位地址路由到LUT的输出。现在考虑用不同的1和0填充16位RAM,这样当地址改变时,LUT输出也会改变。我们已经创建了一个包含四个输入和一个输出的逻辑函数。剩下的就是命令16位RAM来模拟一个有用的逻辑函数。事实上,我们可以将16位的RAM视为卡诺地图,在早期,这实际上是用来编程它们的一个选项。

因此,逻辑功能,如奇偶校验、XOR、AND、OR等,可以有效地打包到最小数量的lut中,以执行所需的功能。算术函数也可以放置在LUT中,并且在设备中也有硬线携带展望逻辑,因此可以比单独使用LUT提高性能。

现在,我们有多达6个输入的LUT(因此64位RAM),它都是通过合成“编程”,这为我们从高级描述创建LUT内容。然后将LUT RAM加载到设备配置上,以从仅64位的RAM创建一个复杂的6输入函数。LUT被嵌入到其他结构中,包括FFs、携带链、算术、存储器和其他复杂的结构。

在Xilinx®Virtex-6设备中,LUTs用于实现6个独立输入的函数生成器。每个六个输入的LUT都有两个输出。这些函数生成器可以实现任何任意定义的布尔函数,其中第一个输出最多6个输入,而同一LUT的第二个输出最多5个输入。

两个切片被组合成一个可配置的逻辑块(CLB)。clb以阵列的形式排列在不同的FPGA中,并通过互连资源相互连接到其他类型的块。

在Virtex-6设备中,有两种类型的切片:

  • SLICEM - 一个切片,它的lut可以用来实现组合函数,一个小的RAM块或一个移位寄存器
  • SLICEL - 它的lut只能用于实现组合逻辑的一个切片。

图21显示了SLICEM框图,我们可以看到每个切片包含4个6输入lut(左侧)、8个存储元素(4个FFs和4个FF/Latche)和级联逻辑。CLB中的各种路径可以被编程来连接或绕过LUTs和FFs的各种组合。进一步的检查还显示了针对特定的携带和级联功能的附加逻辑门,这些功能连接了clb内外的资源。

SLICEL类似,除了lut只有6个输入信号和两个输出信号。这些资源可以配置为内存,最常见的是RAM,下面的3.1.3节将简要描述。

如果工具能够最优地使用CLB来实现设计,那么原型可能会使用更少的FPGA资源,运行得更快。这意味着工具必须了解可以配置切片的所有方式,以及对切片的使用可能有哪些限制。例如,如果四个FF/LAT存储元件被配置为锁存器,那么其他四个FFs就不能被使用,因此首选不使用锁存器的设计。此外,寄存器的控制信号是共享的,因此如果设计中存在许多不同的不相关的控制信号,包装设计寄存器对于位置和路径工具来说是一项复杂的任务。

在这里插入图片描述
作为原型程序,我们通常不关心切片的各种特性的最终使用,因为实现工具应该自动使用适当的配置,以满足时间约束。然而,有时拥有这种详细程度的专业知识可能是必要的,所以我们建议在这本书的最后提供参考文献,以获得进一步的信息。

原型化工具:非常高,最基本的构建块。综合将自动或在RTL和/或约束文件中的指导下充分利用上述所有特性。

3.1.3.FPGA内存: LUT内存和块内存

SoC设计包括各种类型的多种存储器,例如,RAM、ROM、内容可寻址等。在绝大多数情况下,这些内存将从单元格库或内存生成器实用程序实例化内存。重要的是,FPGA能够尽可能有效地表示这些记忆。在大多数高端fpga中,都可以选择一些内存类型,从小的寄存器文件和移位寄存器,到大规模的ram。正如我们在第3.1.2节中看到的,Xilinx®Virtex-6 SLICEM逻辑块中的LUT可以用作一个小的本地内存,例如,作为一个32位位的RAM。这使得实现在SoC设计中的许多地方发现的小内存的功能有了极大的自由。

在这里插入图片描述
对于最大的SoC内存,需要外部内存资源。FPGA自己的块内存资源对于较小的内存非常有用,从原型设计的角度来看,它们是FPGA中第二关键的资源。在Virtex-6家族中,这种内存资源被称为BlockRAM,在一个Virtex-6 FPGA设备中分布了156到1064个BlockRAM。

Xilinx®Virtex-6块RAM的示图如图22所示,

块RAM具有以下主要特征:

  • 可配置性:每个块是专用的、双端口的同步36 Kbits RAM块,可配置为32K×1、16K×2、8K×4、4K×9(或8)、2K×18(或16)、1K×36(或32)或512x72(或64)。每个端口都可以独立地进行配置。

  • 同步操作:blockram可以实现任何单一或双端口的同步内存。当配置为双端口RAM时,每个端口可以以不同的时钟速率运行。

  • FIFO逻辑:专用的-但可配置的-FIFO逻辑可以与blockram结合使用来实现地址点和握手标志。FIFO逻辑的深度和宽度可以可配置,但写边和读边必须是相同的宽度。

  • ECC:当配置为64位宽时,每个BlockRAM可以存储和利用8个额外的汉明码位,并在读取过程中执行单位错误纠正和双位错误检测(ECC)。ECC逻辑也可用于写入或从外部64/72位宽存储器中读取

FPGA中的blockram可以组合来建模更深或更宽的SoC内存。这通常由合成工具来执行,它会自动将较大的内存分区到多个blockram中。需要对从SoC实例化到最终的FPGA块ram的设计进行一些操作,这将在第7章中详细介绍。

原型实用程序:blockram是主要的构建块,由合成工具自动推断。然而,在编写本文时,FIFO逻辑不会被合成工具自动支持,但可以通过核心实例化包括在内。有关内存实现的更多细节,请参阅第7章。

3.1.4.FPGA DSP资源

SoC设计通常包含算术函数,如乘法器、累加器和其他DSP逻辑。高端fpga,如Xilinx®Virtex-6设备,通过提供有限数量的专用DSP块来满足这些需求;在Virtex-6家族这些被称为DSP48E1块。这些都是专用的、可配置的和低功耗的DSP片,结合了高速和小尺寸,同时保留了系统设计的灵活性。图23详细显示了DSP48E1的方框图。

在这里插入图片描述
如框图所示,每个DSP48E1切片由一个专用的25×18位2补乘法器和一个48位累加器组成,两者都能在600 MHz吞吐量下运行。乘法器可以动态绕过,两个48位输入可以提供单指令多数据(SIMD)运算单元(双24位加减/加或四12位加减),或者可以生成两个操作数的10个不同逻辑函数中的任何一个的逻辑单元。

DSP48E1包括一个附加的预加法器,通常用于对称滤波器。该特性提高了密集包装设计中的性能,并有助于减少在DSP块之前或之后完成特定拓扑所需的逻辑切片的数量。

DSP48E1切片提供了广泛的流水线和扩展功能,如宽动态总线移位器、内存地址生成器、宽总线多路复用器和内存映射的IO寄存器文件。该累加器也可以用作一个同步的上下计数器。乘法器可以执行逻辑功能(AND、OR)和桶移位。

原型实用程序:非常高,一个主要的构建块。除了模式检测工具中的特征外,大多数特性都是通过合成工具自动推断的。

3.1.5.FPGA时钟资源

时钟资源和时钟网络是FPGA和SoC技术之间的一个主要区别。尽管SoC设计者几乎有完全的自由来指定他们能想象到的尽可能多的时钟网络,但是在FPGA中可以实现多少有一个真实的和有限的限制。如果SoC团队不能妥善将SoC时钟映射到FPGA时钟资源,可能会导致严重的项目延迟,例如提供SoC时钟的简化版本。

在任何时钟树合成之前,在树分割以进行测试之前和在时钟操作以减少功率之前,最好在设计的RTL上进行原型设计。然而,即使是来自SoC设计的原始RTL也可能包括一些非常复杂的时钟网络,而FPGA设备将需要处理这些问题。事实上,在某些设计中,在FPGA中有限数量的时钟资源是限制因素,而不是设备的容量或性能。因此,有必要找到一种方法来将FPGA时钟资源与SoC的资源相匹配。这可以通过简化原始的时钟网络(参见第9章中的原型设计建议)或通过最大限度地使用可用的FPGA时钟(参见第7章)来实现。

时钟资源可以分为时钟生成和时钟分配。

3.1.5.1.FPGA时钟生成

时钟是在名为CMT(时钟管理贴图)的可配置单元中生成的,在Xilinx®Virtex-6家族中,它包括两个混合模式的时钟管理器(mmcm)。MMCM是一个基于锁相环(PLL)架构的多输出频率合成器,具有增强的功能和能力。CMT内的每个MMCM可以单独处理;然而,mmm之间存在专用路由,以允许更复杂的频率合成。CMT的图表如图24所示,它给出了各种时钟输入源和MMCM-to-MMCM连接之间的连接的高级视图。

PLL中的压控振荡器(VCO)能够在400MHz到1600MHz范围内运行,最小输入频率低至10MHz,并具有可编程分频器和相位选择寄存器,以45°间隔提供输出抽头。

其他可编程特性包括PLL带宽选择、反馈路径中的分数计数器(使PLL可以作为时钟乘法器)或一个输出路径,以及小增量中的固定或动态相移。

在这里插入图片描述
所有这些加起来是一个非常强大的时钟生成块,在每个FPGA中有多达9个。因此,当我们将SoC时钟网络映射到原型中时,我们不应该缺少各种选择。

原型实用程序:非常高的,主要的构建块。许多时钟特性不是自动推断出来的,必须实例化到RTL的FPGA版本中。

3.1.5.2.FPGA时钟分布

几十年来,FPGA供应商一直在投入大量精力生产尽可能多的时钟设备,同时又不浪费区域资源。因此,fpga非常好地用于实现具有有限数量时钟网络的常规同步电路。为了提高效率,在大多数设备上都有一个不同的时钟资源的层次结构,从全球低倾斜时钟一直到本地低倾斜时钟。同样,确保这些资源的良好利用是综合和地点和路径的任务,但有时可能需要人工干预来减轻任务,这将在第7章中讨论。

在Xilinx®Virtex-6家族的情况下,每个FPGA提供了五种不同类型的时钟线,以解决高风扇输出、短传播延迟的不同时钟要求,并实现了整个设备的低偏斜。

Xilinx®Virtex -6时钟分配资源包括:

  • 全局时钟线:每个Virtex-6 FPGA有32条全局的、高扇出的时钟线,可以到达每个FF时钟、时钟启用、设置/重置,以及许多逻辑输入。在任何地区内都有12条全球时钟线。全局时钟线可以由全局时钟缓冲器驱动,它也可以执行无故障的时钟多路复用和时钟启用功能。全球时钟通常由CMT驱动,这可以完全消除基本的时钟分布延迟。

  • 区域时钟:可以驱动他们的地区以及上下地区的所有时钟目的地。区域定义为40 IOs和40clb高,芯片宽一半的任何区域。Virtex-6 FPGAs有6到18个区域。在每个地区都有6个区域的时钟轨道。每个区域时钟缓冲器可以从四个支持时钟的输入引脚中的任何一个驱动,其频率可以选择性地除以从1到8的任何整数。

  • IO时钟:特别是只提供IO逻辑和序列化器/反序列化器(SERDES)电路的快速时钟。Virtex-6设备具有从MMCM到IO的高性能直接连接,可用于低抖动、高性能的接口。

    原型实用程序:非常高的,主要的构建块,由合成工具自动推断。如果需要区域时钟,那么位置约束通常是必要的,以便将时钟负载与特定的区域关联起来。

3.1.6.FPGA的输入和输出

我们将看到稍后讨论multi-FPGA-based原型硬件,能够通过同步信号FPGA设备之间,甚至复用不同的信号到同一条线,取决于快速和灵活的IO引脚和时钟资源在FPGA边界。与时钟一样,有限数量的IO针通常比设备容量或内部性能更具限制因素。

在Xilinx®Virtex-6设备中,有240到1200个IO引脚,这取决于设备和软件包的大小。每个IO引脚都是可配置的,并可以符合许多IO标准,使用高达2.5V。除了电源引脚和一些专用配置引脚外,所有其他软件包引脚都具有相同的IO功能,仅受某些银行/分组规则的约束。

所有的IO引脚都组织在银行中,每个银行有40个引脚。每个发电机组都有一个通用的VCCO输出电源电压引脚,它也为某些输入缓冲器提供动力。一些单端输入缓冲器需要一个外部施加的参考电压基准每个配置组有两个VREF引脚(配置配置组0除外)。一个组只能有一个VREF电压值。

  • 特点:单端输出采用传统的CMOS推拉输出结构,高向VCCO驱动或低向地驱动,可进入高z状态。此外,旋转率和输出强度也是可编程的。输入总是处于活动状态,但在输出处于活动状态时通常会被忽略。每个销可以选择有一个弱下拉向上或一个弱下拉电阻器。IO针脚单端操作的进一步细节包括:
    • IO逻辑:每个IO引脚都有一个相关的逻辑块,在其中可以选择许多选项:
    • 配置:所有的输入和输出都可以配置为组合或注册。所有输入和输出都支持双数据速率(DDR)。
    • 延迟:任何输入或输出都可以单独延迟多达32个~78ps的增量。这被实现为碘延迟。延迟步骤数可以通过配置来设置,也可以在使用时动态地增加或减少。碘延迟的工作频率接近200MHz。每个32个抽头的总碘延迟由该频率控制,因此不受温度、电源电压和处理变化的影响。
    • 驱动器电流:fpga可能需要连接到各种各样的外设,其中一些需要安装在尚未创建的子卡上。Virtex-6 FPGA IO引脚可以配置为支持从2 mA到24 mA的不同驱动强度。

任何一对IO引脚都可以配置为差分输入对或输出对。差动输入引脚对可选择用100Ω内部电阻终止。所有Xilinx®Virtex-6设备都支持LVDS以外的差分标准: HT、RSDS、BLVDS、差分SSTL和差分HSTL。

  • ISERDES and OSERDES: SERDES块位于IO结构的内部。每个输入都可以访问自己的反序列化器(2、3、4、5、6的可编程并行宽度、7、8或10位,每个输出都可以访问自己的串行化器(串行转换器),并行宽度可达8位的单数据速率(SDR),或双数据速率(DDR)。我们将在第8章中看到SERDES块是如何在实现fpga之间信号的高速时分复用方面发挥作用的巨大效果的。

还有其他更复杂的IO块,如千兆收发器和PCIe块,在参考书目中有参考文献,读者可以找到更多关于将这些块用于特定目的的信息。

第10章还讨论了在FPGA中使用内置IP来模拟被测SoC中的IP。

原型实用程序: IOs是设计顶级IO和在FPGA间连接的主要构建模块。默认的单端端点和DDRio会被自动推断出来。通过合成约束管理器中的属性分配,不同的IO类型被选择,然后被传递到位置和路由工具。IODELAYs和IO SERDES只能通过核心实例化来包含。

3.1.7.千兆位收发器

在ASIC和SoC的设计中,越来越常见的是快速串行通信信道,用于通过背板或通过更长的距离连接集成电路。在RTL设计中,这些总是被实例化为黑盒子,并引用了最终硅布局中的物理IO元素。我们将在后面的章节中看到如何在基于FPGA的原型中处理此问题。要在FPGA中模拟这些超快串行收发器,需要专门的和专用的芯片电路,包括能够在这些高数据速率下处理信号完整性问题的差分IO。

在Xilinx®Virtex-6系列中,这种高速串行IO是通过存在千兆位收发器块,或简称GTX块来实现的。图25显示了GTX块的详细示意图,它显示,除了物理传输和接收缓冲区外,GTX块还能够实现物理媒体附件(PMA)和物理编码子层(PCS)。每个GTX收发器也有大量的用户可配置的特性和参数。

每个收发器是一个组合的发射器和接收器,能够在155Mb/s和6.5Gb/s之间的数据速率运行。发射机和接收机都是独立的电路,使用单独的pll将参考频率输入乘以2到25之间的特定可编程数字,成为位串行数据时钟。

首先考虑到发射机,这从本质上来说是一个并行到串行的转换器,转换比分别为8、10、16、20、32或40。变送器输出通过单通道差分电流模式逻辑(CML)输出信号驱动PC板。

反过来,接收机从本质上是一个串行到并行的转换器,将输入的位-串行差分信号转换为一个并行的字流,每个8、10、16、20、32或40位宽。接收机接收传入的差分数据流,通过可编程均衡器将其输入——以补偿PC板和其他互连特性——并使用FREF输入来启动时钟识别。

在这里插入图片描述
Xilinx®Virtex-6家族的不同成员各有8到36条(GTX)电路,除了最大的设备,LX760,它没有GTX的能力。因此,如果我们需要在设计中建立高速串行IP的原型,那么可能需要一些fpga的混合,我们将在第5章中进行探讨。

原型实用程序:虽然GTX是一个非常强大的功能,但由于它们的复杂性和可配置的选项,GTX和它们相关的逻辑不会被合成工具自动推断出来。但是,这些块可以通过核心实例化来包含在内。

3.1.8.内置IP(以太网、PCI快速®、CPU等)

通常,许多网络和通信SoC设计包括以太网或PCI快速通道,那么它们将如何在基于FPGA的原型中建模呢?fpga在MAC(媒体访问控制器)和PHY(物理接口收发器)上实现标准接口方面变得越来越强大。

如果所选的FPGA具有内置的这些功能,那么这些功能可以用来替代那些物理IP块,这些块最终将嵌入到SoC中,但可能在RTL中显示为黑盒子。在第10章中有关于这种替换的更多信息。

在Virtex-6 FPGAs的情况下,PCIe和以太网MAC和PHY被集成到FPGA结构中。

对于以太网,最多有四个针对IEEE Std 802.3-2005设计的三模式(10/100/1000 Mb/s)以太网MAC(TEMAC)块。这些数据可以连接到FPGA逻辑、GTX收发器和IO资源和支持速度上,其速度高达2.5Gbit/秒。

对于PCIe,所有Xilinx®Virtex-6 LXT和SXT设备都包含一个用于PCI快速技术的集成接口块,该技术可以配置为端点或根端口,专为PCIe基础规范版本2.0而设计。该块可以根据系统设计要求进行高度可配置,并且可以以2.5Gbit/s数据速率和5.0Gbit/s数据速率运行1、2、4或8个车道。

一些fpga包括CPU硬核,通常是某种类型的ARM IP核。这些都是针对FPGA进行优化的,当合成成FPGA时,其运行速度将比SoC等效物的RTL要快得多,通常为10:1倍。它们对原型设计的作用可能非常高,但只有当FPGA的核心与SoC中内置的实际核心相匹配时。此外,目前大多数SoC设计都运行多个CPU核心,通常具有不同的功能或配置。在每个FPGA中都有一个硬CPU核心,分区标准将由需要在每个FPGA中使用一个CPU来分割设计而驱动。这对于运行总线和其他通用的设计元素可能并不理想,因此在CPU速度上获得的优势可能不会转化为在总体原型速度上的显著提高。

如果用FPGA中有限的子集替换SoC核心有很多妥协,那么我们最好使用外部测试芯片,或者牺牲CPU速度而不是功能。在第10章中,对IP的原型设计有更多的讨论。在任何情况下,如果CPU核心在家族中最大的FPGA中可用,因此我们不损害总资源,那么CPU不会伤害我们,我们可能在未来的设计中使用它。在某些情况下,一个团队采用了原型设计程序,甚至可能选择SoC CPU,因为它在FPGA中有一个非常接近的对等程序。我们的关于为原型设计程序的宣言,这是公认的,这是一个极端的例子,包括在第9章中。

原型实用程序:虽然非常强大的功能,硬IP块不会被合成工具自动推断。但是,这些块可以通过核心实例化作为SoC块的替换。

3.1.9.系统监控器

原型设计可以在高速下运行很大比例的FPGA,因此功率消耗、加热、电压轨道等。可能会遇到压力,特别是如果设计没有达到预期的效果,或受到错误的影响。我们会参见关于选择或构建FPGA平台的章节,在工作原型中内置的FPGA监视器对于避免由于错误操作而造成的损坏至关重要。

每个Xilinx®Virtex-6 FPGA都包含一个系统监控电路,提供热电源和电源状态信息。传感器输出通过一个10位200k每秒采样的模数转换器(ADC)进行数字化。该ADC也可以用于数字化多达17个外部模拟输入通道。该系统监控器的ADC采用了一个片上的参考电路。此外,片上温度和电源的测量精度分别为±4°C和±1%。

默认情况下,系统监控器连续数字化所有芯片传感器的输出。最新的测量结果以及最大和最小读数一起存储在专用寄存器中,以便随时通过DRP或JTAG接口进行访问。报警限制可以自动指示超过温度事件和不可接受的电源变化。一个指定的限制(例如:125°C)可用于启动一个自动断电。

系统监视器在设计中不需要显式的实例化。一旦建立了适当的电源连接,测量数据可以在任何时候,甚至在配置之前或断电期间,通过JTAG测试访问端口(TAP)访问。

我们将在第5章中看到如何在原型板上使用。

原型实用程序:这个块主要是一个“管家”监视器,通常在实际设计之外,通常通过JTAG链来读取设备和系统的运行状况。然而,它确实提供了一个独特的机会来包括ADC,如果需要,可以通过核心实例化包含。有关核心实例化的更多细节,请参见第10章。

3.1.10.所有FPGA资源类型的摘要

在我们继续使用基于FPGA的原型设计中的工具和流程之前,让我们总结一下迄今为止我们所强调的不同的FPGA资源以及它们对原型设计的有用性。

表3总结了目前大多数大规模fpga中发现的不同块。所有的FPGA资源都是有用的,或者它们一开始就不会存在,然而,它们针对的是在现实生产应用中使用FPGA的广泛用户。它们在SoC原型设计中的用途将取决于SoC元素映射到它们的容易程度以及这样做所需要的妥协。现在,让我们仔细看看能够在基于FPGA的原型项目中充分使用这些FPGA资源的工具。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45264425/article/details/129908807