FPGA在业界广泛使用,通过在FPGA而不是软件上实现程序来获得更好的性能。
这些公司如何有效地将FPGA集成到他们的系统中?
我对FPGA的经验非常有限,并且只使用USB和串口连接它们,我想这不是最好地利用FPGA实现的方法。
那么这些公司做了什么?,例如他们是否使用了一些可以插入计算机系统PCI插槽的特殊FPGA,或者他们是否可以购买一些带有集成FPGA的特殊SoC,这些FPGA很容易被覆盖程序员?
我在远离硬件的高级语言编程方面经验最丰富,所以如果问题听起来很愚蠢我很抱歉 - 我对下层没有太多的知识和经验: )。但是我曾经有过使用FPGA的课程,这是一次非常开放的经历。所以现在我梦想有一个计算机系统,我可以用高级语言编写部分代码,然后与我上传了一些合成VHDL的集成FPGA进行一些通信。
也许有人甚至可以编写由高级代码和一些VHDL组成的程序,这些程序在程序启动时自动合成并上传到FPGA板上......那真是太棒了!
答案 0 :(得分:8)
<强>的PCIe 强>
通常要求FPGA与系统主处理器之间具有更高的带宽,因此FPGA通常作为PCIe设备连接到主CPU。
电子白板
所有最近的FPGA都可以与高速I / O接口连接,因此不需要“特殊”FPGA将其连接到DDR3,PCI或PCIe,只有电子板需要PCIe连接器。
如果没有可用的FPGA devkit板真正适合系统,可能需要设计定制电子板。
传感器与CPU之间
请注意,FPGA通常位于外部接口和主处理器之间。
然后负责处理来自外部传感器或传输系统(摄像机,光纤,以太网,无线电......)的数据,通过低级实时处理卸载处理器。
嵌入式系统
但所有系统都不是“基于PC的”。有些嵌入式系统使用FPGA作为主要的“处理器”。在这样的系统中,您可能有一个以FPGA作为系统核心的电子板(对于评论系统,不允许使用普通处理器和相关的软件错误。)
在其他嵌入式系统上,电子板配备了处理器和FPGA。
<强>软芯强>
对于某些嵌入式系统,需要一个小型微控制器。它不是将它放在FPGA旁边的电子板上,而是可以作为软核在FPGA内部实现。
FPGA SoC
但是最近的FPGA(xilinx zynq,altera cyclone V soc)包括一个“硬核”双核A9 ARM。它就像一个SoC,具有“FPGA”部分,在ARM和可编程逻辑部件(PL)之间具有高速连接。因此处理器和FPGA在同一芯片中。
希望这有帮助。
答案 1 :(得分:4)
FPGA系统集成
由于FPGA的灵活性,公司如何将FPGA集成到系统中,从一个系统到另一个系统可能会有很大差异。不需要“特殊”FPGA,因为FPGA具有固有的可编程性。无论是PCI之类的复杂总线还是SPI或I2C之类的简单接口,公司都可以自由地编程到任何最适合其需求的接口。 FPGA外部可能需要一些额外的IC来支持所需的接口,但这是一个温和的观点。
问题有点像询问软件公司如何将他们的软件集成到操作系统中。它是否与数据库接口?如果是这样,它可能会使用SQL查询。它有在线功能吗?如果是这样,也许它将访问Web服务。无论如何,这是一个非常开放的场景。
然而,最新的趋势是将处理器和FPGA集成在同一个SoC上。在这种情况下,在处理器和可编程逻辑之间使用名为AXI (Advanced eXtensible Interface)的接口。 AXI使用类似于PCIe的拓扑结构,但专门用于高性能片上通信。
高级编程
这是可能的。它被称为high-level synthesis (HLS),允许从C代码编程FPGA。然而,HLS有它的局限性。一方面,它已经存在了十年,而且最近才开始获得更大的牵引力。但最终,带有FPGA的系统倾向于使用高级语言(C / C ++)和RTL(Verilog / VHDL)的组合。高级语言用于对处理器进行编程,而RTL用于对FPGA进行编程。现在,可选地,C也可用于通过HLS对FPGA进行编程。
答案 2 :(得分:2)
有很多作品朝你的方向发展。
例如,我设法将Ruby和Python(一个很大的子集)编译为ARM + FPGA(Xilinx,但我们生成的VHDL旨在可移植)。例如,高级迭代器可以在嵌入式C代码或FPGA上的VHDL上合成。
我认识其他同事work on Haskell,lisp或Smalltalk。
对于这个非常小的社区,你的梦想已经成真!
答案 3 :(得分:1)
免责声明:我为SRC Computers工作,SRC Computers是一家可重新配置的系统开发商/制造商。
16年前,在SRC计算机上,我们创建(并获得专利)一个接口,允许FPGA及其相关存储器位于微处理器的存储器总线上。这使我们的FPGA“处理器”和微处理器能够作为系统存储器上的对等体一起工作。在该硬件架构之上,我们创建了一个C和Fortran系统编程环境,性能库和一个系统运行时将它们组合在一起。