27

为了学习 FPGA 编程,我计划在 FPGA 中编写一个简单的神经网络(因为它是大规模并行的;它是 FPGA 实现可能比 CPU 实现更快的少数事情之一)。

虽然我熟悉 C 编程(10 年以上)。我不太确定 FPGA 开发的东西。你能提供一份我应该做什么/学习/购买的指导清单吗?

谢谢!

4

8 回答 8

19

Necroposting,但对于像我这样遇到这个问题的其他人来说,使用 FPGA 实现神经网络有一个深入的、虽然古老的处理方法

我发布这篇文章已经三年了,但它仍在被查看,所以我想我应该再添加两篇我最近发现的去年的论文。

第一篇是关于卷积神经网络的 FPGA 加速。Nallatech 完成了这项工作。与学术论文相比,它更像是营销,但仍然是一本有趣的读物,对于有兴趣进行实验的人来说,这可能是一个起点。我与 Nallatech 没有任何关系。

第二篇论文来自英国伯明翰大学,作者是郝宇峰。它提出了基于 FPGA 的通用神经网络硬件架构

于 2015-08-28T11:18:05.817 回答
16

大多数在 FPGA 上构建“字面”神经网络的尝试都很快达到了路由限制,在 P&R 拉取完成之前,您可能会获得几百个单元,而不是您的问题值得等待。大多数对 NN 和 FPGA 的研究都采用这种方法,集中在一个最小的“节点”实现上,并表明现在可扩展性是微不足道的。

让合理规模的神经网络真正发挥作用的方法是使用 FPGA 构建专用的神经网络数字运算机。在内存芯片中获取您的初始节点值,为您的下一个时间戳结果提供第二个内存芯片,以及用于存储连接权重的第三个区域。通过使用技术来泵送节点值和连接数据以保持内存总线饱和(按 CAS 行排序节点负载,使用管道预读)。当您将权重与先前的值配对时,它将对先前的数据集进行大量传递,通过 DSP MAC 单元运行它们以评估新的节点权重,然后在评估所有连接后将其推送到结果存储区。完成整个时间步后,反转流向,以便下一个时间步写回原始存储区域。

于 2012-10-05T13:30:49.803 回答
10

我想指出在 FPGA 中实现神经网络的一个潜在问题。FPGA 的路由资源数量有限。与逻辑资源(触发器、查找表、存储器)不同,路由资源难以量化。也许一个简单的神经网络可以工作,但一个带有网状互连的“大规模并行”网络可能不行。

我建议从 OpenCores.org 的一个简单内核开始,以熟悉 FPGA 流程,然后继续进行神经网络的原型设计。下载包含 ISIM 仿真器的免费 Xilinx WebPack 是一个好的开始。稍后您可以购买便宜的开发人员。带有小型 FPGA(例如 Xilinx Spartan 3)的板来运行您的设计。

于 2010-02-12T01:49:06.580 回答
10

神经网络可能不是学习如何对 FPGA 进行编程的最佳起点。我最初会尝试一些更简单的东西,比如驱动 LED 的计数器或数字显示器,然后从那里开始构建。可能有用的网站包括:

您可能还想考虑在 FPGA 中使用软处理器来帮助您从 C 转换到 VHDL 或 Verilog。这将允许您将小代码模块从一个移动到另一个,以查看硬件的差异。语言的选择有些随意——我大部分时间都用 VHDL(语法类似于 ADA)编写代码,但我的一些同事更喜欢 Verilog(语法类似于 C)。我们偶尔会讨论它,但实际上这是个人选择。

至于买家/学习者指南,您需要:

  1. 耐心 :) - 由于构建中额外的“自由参数”的数量,FPGA 的设计周期比软件的设计周期长得多,所以如果需要一段时间才能让设计完全按照您想要的方式工作,请不要感到惊讶。

  2. 开发板——为了学习,我会从三大 FPGA 供应商之一购买:Xilinx、Altera 或 Lattice。目前我的首选是赛灵思,但三者都很好。为了学习,不要购买基于更高端的部件——开始使用 FPGA 时不需要。对于 Xilinx,获得一个基于 Spartan 系列的,例如 SP601(我自己也有一个)。对于 Altera,请购买 Cyclone。开发板将比高端部件便宜得多。

  3. 编程电缆- 大多数公司生产带有特殊连接器的 USB 编程电缆,用于对板上的设备进行编程(通常使用 JTAG)。有些开发板内置了编程接口(例如 Xilinx 的 SP601),因此您无需在上面花费额外的钱。

  4. 构建工具- 这些工具种类繁多,但大多数大型 FPGA 供应商都提供自己的解决方案。请记住,这些工具仅对较小的性能较低的 FPGA 是免费的,例如 Xilinx ISE Webpack。

    该软件包含来自软件世界的您可能不熟悉的阶段。工具流程的细节总是在变化,但您使用的任何工具都应该能够从您的代码获取到您的特定设备。该设计流程的最后一部分通常由 FPGA 供应商提供,因为它是特定于硬件且专有的。给你一个简单的例子,你需要的软件应该包含你的 VHDL 和 Verilog 代码和(这是 Xilinx 版本):

    • 将其“综合”成与特定 FPGA 中可用的构建块相匹配的结构。
    • 将设计“翻译并映射”到零件中。
    • “布局和布线”特定器件中的逻辑,使其满足您的时序要求(例如,您希望设计运行的时钟速度)。
于 2012-02-17T02:30:39.840 回答
7

不管 Charles Stewart 怎么说,Verilog 都是一个不错的起点。它让我想起了 C,就像 VHDL 让我想起了 ADA。没有人在工业中使用奥卡姆,在大学中也不常见。

对于 Verilog 书籍,我特别推荐这些Verilog HDL。与 C 不同,Verilog 可以轻松地进行并行工作。

要购买,请从 [Altera] 或 Altera 的3购买相对便宜的 Cyclone III 评估板(例如,这款带有 NIOS的 Cyclone III 评估板售价 449 美元或这款售价 199 美元)或 Xilinx。

于 2010-02-04T14:22:17.537 回答
6

我会给你第三个建议:使用 VHDL。是的,表面上它看起来像 ADA。虽然 Verilog 与 C 有一些相似之处。但是,使用 Verilog,您只能获得开箱即用的类型。使用 VHDL,您可以定义自己的新类型,让您在更高级别进行编程(当然仍然是 RTL)。我很确定 Xilinx 和 Altera 免费工具支持 VHDL 和 Verilog。Ashenden 的“A Designers Guide to VHDL”是一本很好的 VHDL 书籍。

VHDL 有一个标准的定点数学包,可以使 NN 实现更容易。

于 2010-02-05T04:33:02.277 回答
2

它很老了,因为近 20 年来我对 FPGA 没有太多思考,而且它使用一种相当晦涩的并发编程语言,但是 Page & Luk,1991,将 Occam 编译到 FPGA中以一种很好的方式涵盖了一些关键主题,足够了,我想,为了你的目的。两个试用链接:

  1. KRoC是一个积极维护的、基于 linux 的 Occam 编译器,我知道它有一个活跃的用户群。
  2. Roger Peel 有一个逻辑综合页面,其中包含一些关于他的基于 linux 的工作流程的文档,从 Occam 代码综合到 FPGA I/O。

Occam->FPGA 不是行动所在,但它可能是比 Verilog 更好的起点。

于 2010-02-03T09:46:20.130 回答
2

我建议您研究一下xilinx 高级综合,特别是如果您有 C 背景。它抽象了使用 hdl 的技术细节,因此设计人员可以专注于算法实现。

您可以编写的 C 代码类型受到限制。例如,您不能使用动态大小的数据结构,因为这会推断出动态大小的硬件。

于 2017-12-04T23:48:29.377 回答