FPGA中的神经网络模拟器?

时间:2010-02-03 08:01:56

标签: neural-network fpga

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

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

谢谢!

8 个答案:

答案 0 :(得分:18)

Necroposting,但对于像我这样遇到这个问题的其他人来说,有an in-depth, though old, treatment of implementing neural networks using FPGAs

我发布此消息已经过去了三年,但它仍然被观看,所以我想我还会在去年发现另外两篇论文。

第一次谈到FPGA Acceleration of Convolutional Neural Networks。纳拉泰克完成了这项工作。它更像是一篇学术论文,但仍然是一本有趣的读物,可能是一个有趣的实验人员的起点。我没有以任何方式与Nallatech联系。

第二篇论文来自英国伯明翰大学,由余丰浩撰写。它呈现A General Neural Network Hardware Architecture on FPGA

答案 1 :(得分:16)

在FPGA上构建“文字”神经网络的大多数尝试都非常快地达到了路由限制,在P& R拉动需要更长时间才能完成比你的问题值得等待之前,你可能会得到几百个单元。大多数关于NN和NN的研究FPGA采用这种方法,专注于最小的“节点”实现,并建议缩放现在是微不足道的。

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

答案 2 :(得分:10)

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

我建议从OpenCores.org的一个简单核心开始,只是为了熟悉FPGA流程,然后继续进行神经网络的原型设计。下载免费的Xilinx WebPack,包括ISIM模拟器,是一个良好的开端。稍后您可以购买便宜的开发。使用小型FPGA(例如Xilinx Spartan 3)来运行您的设计。

答案 3 :(得分:9)

神经网络可能不是学习如何编程FPGA的最佳起点。我最初会尝试更简单的东西,如计数器驱动LED或数字显示器,并从那里建立起来。可能有用的网站包括:

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

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

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

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

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

  4. 构建工具 - 这些工具有很多种,但大多数大型FPGA供应商都提供了自己的解决方案。请记住,这些工具仅适用于较小的低性能FPGA,例如Xilinx ISE Webpack。

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

    • 将其合成为与特定FPGA内可用构建块匹配的构造。
    • '翻译&将'设计映射到零件中。
    • 'Place&路由'特定设备中的逻辑,以满足您的时序要求(例如您希望设计运行的时钟速度)。

答案 4 :(得分:7)

无论Charles Stewart说什么,Verilog都是一个很好的起点。它让我想起了C,就像VHDL让我想起ADA一样。没有人在工业中使用奥卡姆,这在大学中并不常见。

对于Verilog书籍,我建议these,尤其是Verilog HDL。与C不同,Verilog可以平行地完成并行工作。

要购买,请从[Altera]或Altera 3获得相对便宜的Cyclone III评估板(例如此Cyclone III one with NIOS仅需449美元,或this仅需199美元)或Xilinx。

答案 5 :(得分:7)

我会给你第三个推荐:使用VHDL。是的,从表面看它看起来像ADA。虽然Verilog与C有相似之处。但是,使用Verilog,您只能获得开箱即用的类型。使用VHDL,您可以定义自己的新类型,使您可以在更高级别进行编程(当然还是RTL)。我很确定Xilinx和Altera免费工具同时支持VHDL和Verilog。 Ashenden的“VHDL设计师指南”是一本很好的VHDL书。

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

答案 6 :(得分:2)

它已经过时了,因为近20年来我对FPGA的考虑并不多,而且它使用了一种相当模糊的并发编程语言,但是Page& Luk,1991,Compiling Occam into FPGAs以一种很好的方式涵盖了一些重要的主题,我认为,这足以达到你的目的。尝试填充的两个链接:

  1. KRoC是一个积极维护的基于Linux的Occam编译器,我知道它有一个活跃的用户群。
  2. Roger Peel a logic synthesis page有一些基于Linux的工作流程的文档,从Occam代码综合到FPGA I / O.
  3. Occam-> FPGA不是行动的地方,但它可能是比起Verilog更好的起点。

答案 7 :(得分:1)

我建议调查xilinx high-level synthesis,特别是如果你来自C背景。它使用hdl抽象出技术细节,因此设计人员可以专注于算法实现。

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