为了学习FPGA编程,我计划在FPGA中编写一个简单的神经网络(因为它是大规模并行的;它是FPGA实现可能比CPU实现更快的几件事之一).
虽然我熟悉C编程(10年以上).我对FPGA开发的东西不太确定.您能提供我应该做什么/学习/购买的指导清单吗?
谢谢!
Necroposting,但对于像我这样遇到这个问题的其他人来说,使用FPGA实现神经网络有一个深入的,虽然陈旧的处理方法
我发布这篇文章已有三年了,但它仍然被观看,所以我想我会在去年发现另外两篇论文.
第一部分讨论了卷积神经网络的FPGA加速.纳拉泰克完成了这项工作.它更像是一篇学术论文,但仍然是一本有趣的读物,可能是一个有趣的实验人员的起点.我没有以任何方式与Nallatech联系.
第二篇论文来自英国伯明翰大学,由余丰浩撰写.它介绍了FPGA上的通用神经网络硬件架构.
在FPGA上构建"文字"神经网络的大多数尝试都非常快地达到了路由限制,在P&R拉动需要更长时间才能完成比你的问题值得等待之前,你可能会得到几百个单元.大多数对NN和FPGA的研究采用了这种方法,专注于最小的"节点"实现,并建议缩放现在是微不足道的.
使合理大小的神经网络实际工作的方法是使用FPGA构建专用的神经网络数字运算机.获取内存芯片中的初始节点值,为下一个时间戳结果提供第二个内存芯片,以及存储连接权重的第三个区域.通过使用技术来泵送节点值和连接数据以保持存储器总线饱和(按CAS线顺序节点加载,使用管道预读).当您将权重与先前值配对时,将通过先前的数据集进行大量传递,通过DSP MAC单元运行它们以评估新节点权重,然后在评估所有连接后推送到结果存储区域.完成整个时间步后,反转流向,以便下一个时间步写回原始存储区.
我想指出在FPGA中实现神经网络的潜在问题.FPGA具有有限的路由资源.与逻辑资源(触发器,查找表,存储器)不同,路由资源难以量化.也许一个简单的神经网络可以工作,但是具有网状互连的"大规模并行"可能不会.
我建议从OpenCores.org的一个简单核心开始,只是为了熟悉FPGA流程,然后继续进行神经网络的原型设计.下载免费的Xilinx WebPack,包括ISIM模拟器,是一个良好的开端.稍后您可以购买便宜的开发.使用小型FPGA(例如Xilinx Spartan 3)来运行您的设计.
神经网络可能不是学习如何编程FPGA的最佳起点.我最初会尝试更简单的东西,如计数器驱动LED或数字显示器,并从那里建立起来.可能有用的网站包括:
http://www.fpga4fun.com/ - 简单项目和一些董事会的优秀示例.
http://opencores.org/ - 许多接口等非常有用的参考代码......
您可能还想考虑在FPGA中使用软处理器来帮助您从C转换到VHDL或Verilog.这将允许您将小代码模块从一个移动到另一个,以查看硬件的差异.语言的选择有点随意 - 我在大多数时候使用VHDL(在语法上类似于ADA)编码,但我的一些同事更喜欢Verilog(语法上类似于C).我们偶尔会讨论它,但它确实是个人选择.
至于买家/学员指南,您需要:
耐心:) - 由于构建中额外的"自由参数"数量,FPGA的设计周期比软件长得多,因此如果需要一段时间才能使设计按照您想要的方式工作,请不要感到惊讶.
开发板 - 为了学习,我会从三个更大的FPGA供应商之一购买一个:Xilinx,Altera或Lattice.我的偏好是Xilinx,但三者都很好.对于学习,不要购买基于高端部件的部件 - 开始使用FPGA时不需要.对于Xilinx,请根据Spartan系列获得一个,例如SP601(我自己有一个).对于Altera,购买一个Cyclone.开发板将比高端部件便宜得多.
编程电缆 - 大多数公司生产带有特殊连接器的USB编程电缆,用于对电路板上的器件进行编程(通常使用JTAG).有些电路板内置了编程接口(例如Xilinx的SP601),因此您无需花费额外的资金.
构建工具 - 这些工具有很多种,但大多数大型FPGA供应商都提供自己的解决方案.请记住,这些工具仅适用于较小的低性能FPGA,例如Xilinx ISE Webpack.
该软件包含您可能不熟悉的来自软件世界的阶段.工具流程的细节总是在变化,但您使用的任何工具都应该能够从您的代码到您的特定设备.该设计流程的最后一部分通常由FPGA供应商提供,因为它是特定于硬件和专有的.为了给您一个简短的例子,您需要的软件应该使用您的VHDL和Verilog代码(这是Xilinx版本):
将其"合成"为与特定FPGA内可用构建块匹配的构造.
将设计"翻译并映射"到部件中.
"将布局布线"放置在特定器件中,以满足您的时序要求(例如,您希望设计运行的时钟速度).
无论Charles Stewart说什么,Verilog都是一个很好的起点.它让我想起了C,就像VHDL让我想起ADA一样.没有人在工业中使用奥卡姆,这在大学中并不常见.
对于Verilog书,我推荐这些特别是Verilog HDL.与C不同,Verilog可以平行地完成并行工作.
要购买,请从[Altera]或Altera 3获得一个相对便宜的Cyclone III评估板(例如,这个Cyclone III与NIOS一起售价449美元或者这个售价199美元)或Xilinx.
我将给你第三个建议:使用VHDL.是的,从表面看它看起来像ADA.虽然Verilog与C有相似之处.但是,使用Verilog,您只能获得开箱即用的类型.使用VHDL,您可以定义自己的新类型,使您可以在更高级别进行编程(当然还是RTL).我很确定Xilinx和Altera免费工具同时支持VHDL和Verilog.Ashenden的"VHDL设计师指南"是一本很好的VHDL书籍.
VHDL有一个标准的定点数学包,可以使NN实现更容易.