技术论坛

创客圈

  • 创客小组(项目集散地)

    这里不仅有灵感与创意,更有实践、激情、与同道。创者无畏!

    发帖数

    23
    nexys video ov5640 vga display
    Thisrojectisov5640datacacheDDR3(A7)andVGAdislay.ThedevelomentboardisnexysvideoofDigilent.Softwareisvivado2016.4
    发布于 05-02
  • 竞赛 & 活动

    DIGILENT全可编程创新创业设计大赛(DDC)、江苏省虚拟仪器竞赛、极客DIY限时挑战等

    发帖数

    15
    特别活动 | Python on Everything 硬件项目挑战赛
    PythonforEverything!「Python+开源硬件」·创客项目设计主题活动▼PythonAI时代的头牌语言web开发、游戏开发、客户端开发...当这些软件应用领域逐渐被Python“玩坏了”之后凭借“语言简洁,无需编译,开发高效”的特性一场Python与开源硬件的邂逅悄然已成趋势人生苦短,我用Python当DIGILENT已为你准备好多款主流Python开发板当你的情敌暑期已在用Python加速项目设计开发不要告诉我们你还在家打王者荣耀暑期8月,DIGILENT有一个大胆的想法管它当讲不当讲「Python+开源硬件」·创客项目设计挑战赛Let'smakePythonforEverything!1先来一波DIGILENTPython支持开发板▼PYNQ世界上第一款支持Python的FPGA嵌入式开发板●主芯片:XilinxZynq-7020●Python开发战斗值:★★★★★●战力简介:支持开源的PYNQ项目,它直接对硬件底层进行的封装,用户借助封装库文件可以直接使用ython语言操作硬件I/O管脚等功能,不需要再使用复杂繁琐的开发工具,使用基于浏览器的JuyterNotebook工具就可以直接编辑工程代码。同时可轻松搭建开源的机器学习二值神经网络(BNN)。●了解详情:www.digilent.com.cn/roducts/ynq-z1▼Zedboard世界上第一款也是最为经典的XilinxZynqAPSoC开发板●主芯片:XilinxZynq-7020(双核ARMCortex™-A9)●Python开发战斗值:★★★★●战力简介:在Linux系统中配置Python3或Python2.7(如果使用的是Ubuntu,Python2,3已被预安装),即可用Python进行应用设计。调用驱动控制外设。环境配置步骤:1)安装Linux系统;2)安装Python;更新系统:$sudoat-getudate检查版本:$ython3-V3)安装所需的库;$iinstall$sc●了解详情:www.digilent.com.cn/roducts/roduct-zedboard-zynq-7000-arm-fga-soc-develoment-board▼Zybo享有“MiniZedboard”美誉的Zynq入门级训练板●主芯片:XilinxZynq-7010(双核ARMCortex™-A9)●Python开发战斗值:★★★★●战力简介:在Linux系统中配置Python3或Python2.7(如果使用的是Ubuntu,Python2,3已被预安装),即可用Python进行应用设计。调用驱动控制外设。环境配置步骤:1)安装Linux系统;2)安装Python;更新系统:$sudoat-getudate检查版本:$ython3-V3)安装所需的库;$iinstall$sc●了解详情:www.digilent.com.cn/roducts/roduct-zybo-zynq-7000-arm-fga-soc-trainer-board▼Arty-Z7全新问世兼容Arduino接口的Zynq-7000开源创客开发板●主芯片:XilinxZynq-7020/10(双核ARMCortex™-A9)●Python开发战斗值:★★★★●战力简介:在Linux系统中配置Python3或Python2.7(如果使用的是Ubuntu,Python2,3已被预安装),即可用Python进行应用设计。调用驱动控制外设。环境配置步骤:1)安装Linux系统;2)安装Python;更新系统:$sudoat-getudate检查版本:$ython3-V3)安装所需的库;$iinstall$sc●了解详情:www.digilent.com.cn/roducts/roduct-arty-z720-asoc-zynq-7000-develoment-board-for-makers-and-hobbyists▼树莓派2为Python编程而生的Geek最爱嵌入式开发板●主芯片:900MHz双核ARMCortex-A7CPU●Python开发战斗值:★★★★★●战力简介:在早先BBC的一篇采访中,RasberryPi的创始人之一EbenUton就曾提到,RasberryPi的命名中,Pi所指的就是Python。树莓派基金会提供了基于ARM的Debian和ArchLinux的发行版供大众下载。还计划提供支持Python作为主要编程语言,支持Java、BBCBASIC(通过RISCOS映像或者Linux的"BrandyBasic"克隆)、C和Perl等编程语言。●了解详情:www.digilent.com.cn/roducts/roduct-labview-for-rasberry-i-2▼BeagleBoneBlack为数不多可以在10秒内启动Linux的开发板,三大开源硬件平台之一●主芯片:AM335x1GHzARMCortex-A8●Python开发战斗值:★★★★★●战力简介:不可多得的支持Python编程的实战力器,默认安装有Python2.7.3以及相应的Python库。●了解详情:www.digilent.com.cn/roducts/roduct-labview-for-beaglebone-black2活动参与方式与福利01挑战任务基于任意一款DIGILENTPython支持开发板,在为期四周的时间内(9月8日前)使用Python语言编写一个应用设计。应用主题不限,但需要利用硬件外设,如Pmod模块、摄像头,或板上自带的IO/WiFi模块/传感器等。02奖项设置●最佳「Python+开源硬件」设计作品奖【1名】获赠全新DigilentPYNQ开发板一块受邀参与2017DIGILENT创客夏令营●优秀创意作品奖【2名】获赠全新DigilentchiKITWF32嵌入式开发板一块受邀参与2017DIGILENT创客夏令营●实际作品提交参与奖【若干】所有最终按照活动要求提交作品的挑战者,都将获得人气FPGA教材一套03参与方式&am;项目提交●参与方式:加入“PythonforEverything”创客小组传送门:www.digilent.com.cn/makerhubs/ython-on-everything.html●项目提交:项目完成后,进入上述页面”发布项目”●截止时间:9月8日中午12时04指定软硬平台指定硬件(优秀创意项目DIGILENT提供免费租借):●PYNQ/Zedboard/Zybo/Arty-Z7/RasberryPi2/BeagleBoneBlack指定软件:●XilinxVivado/Linux系统/Python语言05作品评分细则●所有最终提交的作品将由DIGILENT工程师依据以下评分项综合打分评选出最终的名次:1)作品创意20’2)作品完成度30’3)作品实现难度20’4)作品提交内容的完整度30‘5)额外加分项:使用Zedboard,Zybo,Arty-Z7参与活动,额外+10'3推荐阅读资料推荐阅读社区多篇热门Python阅读集结:1《项目教程|手把手教你如何在Zybo上跑Python制作一个LED呼吸灯》2《资源分享|基于Python的开源人脸识别库》3《学习笔记|PythonImage库(PIL)常用操作函数》4《知乎问答|你们都是怎么学Python的?》5《话题讨论|Python为何能坐稳AI时代头牌语言》6《机器学习|Zynq+PYNQ+Python:在PYNQ-Z1上搭建二值神经网络(BNN)》活动参与:1)www.digilent.com.cn/makerhubs/ython-on-everything.html2)申请加入部落3)9月8日前提交完成作品想要申请开发板租借,参与此次活动的童鞋(限在校学生),请在本帖内留言哟~~
    发布于 2017-08-08
  • 工科街(求职招聘区)

    一条纯粹属于在校工科生的话题街。尽情释放内心的小怪兽,海侃校园内外,闲聊天南地北

    发帖数

    52
    招聘|中国航天科技集团公司第八研究院第八O二研究所(2017.12.27发布)
    发布时间|2017.12.27招聘单位|中国航天科技集团公司第八研究院第八O二研究所公司简介是我国从事光电探测、数据通信、卫星有效载荷、电磁环境效应等技术研究、产品研发、研制、试验、生产的国家重点科研单位,科研条件、专业技术水平处于国内领先地位。建有十个专业研究室,一个国家级重点实验室、三个上海市级重点实验室,并与国内多所高校建立了联合研发中心。现有职工900余人,其中各类专业技术人才600余人,博士、硕士超过450人,高级工程师以上技术专家260余人,国家百千万人才工程专家、国务院政府特殊津贴专家等省部级以上专家约20余人。先后承担数百项国家级和省部级重点科研项目和生产任务,荣获省部级以上科技成果200余项,拥有专利400余项。先后荣获全国五一劳动奖状、“全国模范职工之家”、上海市职工最满意企业称号,蝉联上海市文明单位、集团公司文明单位、上海市高新技术企业。我所坚持“勤勉、专业、激情、包容”的企业文化,努力创造良好的工作环境和文化氛围。热诚欢迎广大优秀人才加盟,携手共创美好未来!招聘专业信息与通信工程仪器科学与技术信号与信息处理控制科学与工程通信与信息系统机械工程电子科学与技术材料科学与工程电磁场与微波技术计算机科学与技术电路与系统光学工程物理电子学电气工程航空宇航科学与技术招聘岗位雷达总体设计师信号处理设计师通信系统设计师数模电路设计师射频微波电路设计师目标特性研究师电磁环境效应研究师天线/天线罩设计师激光雷达(通信)设计师图像处理设计师计算机软件开发设计师FPGA开发工程师DSP开发工程师测试设备设计师智能制造工程师自动化设计师人工智能产品设计师结构工程师电源设计师电讯装配工艺师产品装配测试工程师薪酬福利为职工提供具有行业竞争力的薪酬待遇,薪酬与绩效挂钩,多劳多得,优劳优得。1、富有竞争力的年薪待遇:基本工资+绩效工资+项目奖金等,独立工作后年收入:博士:年薪20万元以上/年,享受一次性安家费(30-36万左右);硕士:年薪15万元以上/年;本科:年薪8万元以上/年;大专及以下:年薪6万元以上/年。2、五险二金、企业年金、大病保险、交通意外保险等;3、交通补贴、工作餐补贴、租房补贴、其他各类补贴等;4、医疗补贴、医疗基金、健康体检、职工疗休养等;5、带薪年休假、探亲假、其他各类假期、各类教育培训机会等;6、社会成熟人才及高层次人才,待遇从优,具体面议。联系方式联系人:骆欢(13817856987)、程冕之(13636527110)办公室电话:021-65666006-222,65662373联系地址:上海市杨浦区黎平路203号人力资源处邮政编码:200090E-mail地址:ht802hr@126.com(可将简历投递至本邮箱,注明“专业-学历-学校-姓名”)应聘时请注明:从DIGILENT中文技术论坛获悉招聘信息
    发布于 2017-12-27

干货热帖

  • 教程 | 从零开始在Zedboard上构建Linux环境(详细步骤)
    对于Zedboard的基本情况,不了解的可以点击官网产品页,在此就不再做赘述了,只是记录下本人如何在拿到开发板之后,怎么从零开始构建并运行linux系统,并在其上运行一个hello_world程序。先附上成功运行截图:第一步,安装arm-linux交叉编译器,在网站htts://code.google.com//zedboard-book-source/downloads/list上的download里下载红色所圈出的文件,如果不想安装双系统,可以在虚拟机VMware上安装Ubuntu10.04_i386,然后将打开将该文件复制到linux系统中,(笔者是放入了共享文件夹中,方法百度,很容易找然后,进入如下目录,安装xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin,具体步骤如下:(必须保证当前已经进入到该文件所在的文件夹)>sudo–s>输入密码>./xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin,附图如下出现图如下一路默认就好了,最终安装完成后如下所示:安装完成后,修改当前dash为bash,具体方法如下:弹出如下对话框,选择NO,即可。最后,修改/etc/bash.bashrc文件,在其中添加如下代码:方法如下:在命令行上输入gedit/etc/bash.bashrc第三个exort即为默认的软件安装路径。最后,关闭该文件,并使其立即生效,输入source/etc/bash.bashrc。此时,可以查看当前的PATH是否已经成功更新,在命令行上输入$PATH,若其中有上述PATH,则更新成功!在本帖附件中,下载Linux镜像。如红色线条所画文档,并解压,将解压后的文件夹sd_image中的文件复制到sd卡上(在这之前保证sd卡被格式化为FAT32格式)。然后将SD卡插入到开发板上,按如图所示连接线路,注意红色线条所示的部分:编写测试文件:hello_world.c#includeintmain(){rintf("Hello,ZedBoard!\nI'mjefby!\n");return0;}在命令行下如下编译(进入到该文件所在的文件夹)>arm-xilinx-linux-gnueabi-gcc-ohello_worldhello_world.c将生成的文件拷贝到U盘中,然后按图1所示连接电路,上电,出现如下问题:下载驱动,打开设备管理器,更新驱动程序(CyUSB2Serial_v3.0.11.0.zi,附件中下载),又出现如下问题,再次更新此驱动(同一个目录),至此驱动安装完成。使用超级终端(windowsSuerzd.rar,附件中下载)建立串行连接,如下设置串口参数:最后输出如下:(部分图)红线所示为笔者U盘的挂载名称在命令行下将其挂载到mnt下,并运行hello_world,具体如下,Ok,到此就大功告成了!
    亮了(0) 1007 0 01-05
  • 如何评价微软在数据中心使用 FPGA 代替传统 CPU 的做法?
    作者:李博杰链接:htts://www.zhihu.com/question/24174597/answer/138717507来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。问题「用FPGA代替CPU」中,这个「代替」的说法不准确。我们并不是不用CPU了,而是用FPGA加速适合它的计算任务,其他任务仍然在CPU上完成,让FPGA和CPU协同工作。本回答将涵盖三个问题:为什么使用FPGA,相比CPU、GPU、ASIC(专用芯片)有什么特点?微软的FPGA部署在哪里?FPGA之间、FPGA与CPU之间是如何通信的?未来FPGA在云计算平台中应充当怎样的角色?仅仅是像GPU一样的计算加速卡吗?一、为什么使用FPGA?众所周知,通用处理器(CPU)的摩尔定律已入暮年,而机器学习和Web服务的规模却在指数级增长。人们使用定制硬件来加速常见的计算任务,然而日新月异的行业又要求这些定制的硬件可被重新编程来执行新类型的计算任务。FPGA(FieldProgrammableGateArray)正是一种硬件可重构的体系结构,常年来被用作专用芯片(ASIC)的小批量替代品,然而近年来在微软、百度等公司的数据中心大规模部署,以同时提供强大的计算能力和足够的灵活性。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic3.zhimg.com/50/v2-71bb2d45032d3752ab64eb85e80b815c_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;2106&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;1147&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;2106&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic3.zhimg.com/v2-71bb2d45032d3752ab64eb85e80b815c_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;不同体系结构性能和灵活性的比较。FPGA为什么快?「都是同行衬托得好」。CPU、GPU都属于冯·诺依曼结构,指令译码执行、共享内存。FPGA之所以比CPU甚至GPU能效高,本质上是无指令、无需共享内存的体系结构带来的福利。冯氏结构中,由于执行单元(如CPU核)可能执行任意指令,就需要有指令存储器、译码器、各种指令的运算器、分支跳转处理逻辑。由于指令流的控制逻辑复杂,不可能有太多条独立的指令流,因此GPU使用SIMD(单指令流多数据流)来让多个执行单元以同样的步调处理不同的数据,CPU也支持SIMD指令。而FPGA每个逻辑单元的功能在重编程(烧写)时就已经确定,不需要指令。冯氏结构中使用内存有两种作用。一是保存状态,二是在执行单元间通信。由于内存是共享的,就需要做访问仲裁;为了利用访问局部性,每个执行单元有一个私有的缓存,这就要维持执行部件间缓存的一致性。对于保存状态的需求,FPGA中的寄存器和片上内存(BRAM)是属于各自的控制逻辑的,无需不必要的仲裁和缓存。对于通信的需求,FPGA每个逻辑单元与周围逻辑单元的连接在重编程(烧写)时就已经确定,并不需要通过共享内存来通信。说了这么多三千英尺高度的话,FPGA实际的表现如何呢?我们分别来看计算密集型任务和通信密集型任务。计算密集型任务的例子包括矩阵运算、图像处理、机器学习、压缩、非对称加密、Bing搜索的排序等。这类任务一般是CPU把任务卸载(offload)给FPGA去执行。对这类任务,目前我们正在用的Altera(似乎应该叫Intel了,我还是习惯叫Altera……)StratixVFPGA的整数乘法运算性能与20核的CPU基本相当,浮点乘法运算性能与8核的CPU基本相当,而比GPU低一个数量级。我们即将用上的下一代FPGA,Stratix10,将配备更多的乘法器和硬件浮点运算部件,从而理论上可达到与现在的顶级GPU计算卡旗鼓相当的计算能力。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/50/v2-ff703e77642f86b1789c57f9cf55777b_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1053&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;832&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1053&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/v2-ff703e77642f86b1789c57f9cf55777b_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;FPGA的整数乘法运算能力(估计值,不使用DSP,根据逻辑资源占用量估计)&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/50/v2-404dcbcf292c4e31b3e12ebc228963af_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1070&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;831&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1070&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/v2-404dcbcf292c4e31b3e12ebc228963af_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;FPGA的浮点乘法运算能力(估计值,float16用软核,float32用硬核)在数据中心,FPGA相比GPU的核心优势在于延迟。像Bing搜索排序这样的任务,要尽可能快地返回搜索结果,就需要尽可能降低每一步的延迟。如果使用GPU来加速,要想充分利用GPU的计算能力,batchsize就不能太小,延迟将高达毫秒量级。使用FPGA来加速的话,只需要微秒级的PCIe延迟(我们现在的FPGA是作为一块PCIe加速卡)。未来Intel推出通过QPI连接的Xeon+FPGA之后,CPU和FPGA之间的延迟更可以降到100纳秒以下,跟访问主存没什么区别了。FPGA为什么比GPU的延迟低这么多?这本质上是体系结构的区别。FPGA同时拥有流水线并行和数据并行,而GPU几乎只有数据并行(流水线深度受限)。例如处理一个数据包有10个步骤,FPGA可以搭建一个10级流水线,流水线的不同级在处理不同的数据包,每个数据包流经10级之后处理完成。每处理完成一个数据包,就能马上输出。而GPU的数据并行方法是做10个计算单元,每个计算单元也在处理不同的数据包,然而所有的计算单元必须按照统一的步调,做相同的事情(SIMD,SingleInstructionMultileData)。这就要求10个数据包必须一起输入、一起输出,输入输出的延迟增加了。当任务是逐个而非成批到达的时候,流水线并行比数据并行可实现更低的延迟。因此对流式计算的任务,FPGA比GPU天生有延迟方面的优势。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/50/v2-1ffb204e56f3d02b0cabdcd6f6c3fb34_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1435&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;476&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1435&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/v2-1ffb204e56f3d02b0cabdcd6f6c3fb34_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;计算密集型任务,CPU、GPU、FPGA、ASIC的数量级比较(以16位整数乘法为例,数字仅为数量级的估计)ASIC专用芯片在吞吐量、延迟和功耗三方面都无可指摘,但微软并没有采用,出于两个原因:数据中心的计算任务是灵活多变的,而ASIC研发成本高、周期长。好不容易大规模部署了一批某种神经网络的加速卡,结果另一种神经网络更火了,钱就白费了。FPGA只需要几百毫秒就可以更新逻辑功能。FPGA的灵活性可以保护投资,事实上,微软现在的FPGA玩法与最初的设想大不相同。数据中心是租给不同的租户使用的,如果有的机器上有神经网络加速卡,有的机器上有Bing搜索加速卡,有的机器上有网络虚拟化加速卡,任务的调度和服务器的运维会很麻烦。使用FPGA可以保持数据中心的同构性。接下来看通信密集型任务。相比计算密集型任务,通信密集型任务对每个输入数据的处理不甚复杂,基本上简单算算就输出了,这时通信往往会成为瓶颈。对称加密、防火墙、网络虚拟化都是通信密集型的例子。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic1.zhimg.com/50/v2-d74634adc21db32f6fafed538c7b91ca_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1434&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;478&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1434&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic1.zhimg.com/v2-d74634adc21db32f6fafed538c7b91ca_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;通信密集型任务,CPU、GPU、FPGA、ASIC的数量级比较(以64字节网络数据包处理为例,数字仅为数量级的估计)对通信密集型任务,FPGA相比CPU、GPU的优势就更大了。从吞吐量上讲,FPGA上的收发器可以直接接上40Gbs甚至100Gbs的网线,以线速处理任意大小的数据包;而CPU需要从网卡把数据包收上来才能处理,很多网卡是不能线速处理64字节的小数据包的。尽管可以通过插多块网卡来达到高性能,但CPU和主板支持的PCIe插槽数量往往有限,而且网卡、交换机本身也价格不菲。从延迟上讲,网卡把数据包收到CPU,CPU再发给网卡,即使使用DPDK这样高性能的数据包处理框架,延迟也有4~5微秒。更严重的问题是,通用CPU的延迟不够稳定。例如当负载较高时,转发延迟可能升到几十微秒甚至更高(如下图所示);现代操作系统中的时钟中断和任务调度也增加了延迟的不确定性。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/50/v2-b5b50a3c73cb770401d20a5223ada6c6_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;817&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;594&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;817&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/v2-b5b50a3c73cb770401d20a5223ada6c6_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;ClickNP(FPGA)与DellS6000交换机(商用交换机芯片)、Click+DPDK(CPU)和Linux(CPU)的转发延迟比较,errorbar表示5%和95%。来源:[5]虽然GPU也可以高性能处理数据包,但GPU是没有网口的,意味着需要首先把数据包由网卡收上来,再让GPU去做处理。这样吞吐量受到CPU和/或网卡的限制。GPU本身的延迟就更不必说了。那么为什么不把这些网络功能做进网卡,或者使用可编程交换机呢?ASIC的灵活性仍然是硬伤。尽管目前有越来越强大的可编程交换机芯片,比如支持P4语言的Tofino,ASIC仍然不能做复杂的有状态处理,比如某种自定义的加密算法。综上,在数据中心里FPGA的主要优势是稳定又极低的延迟,适用于流式的计算密集型任务和通信密集型任务。二、微软部署FPGA的实践2016年9月,《连线》(Wired)杂志发表了一篇《微软把未来押注在FPGA上》的报道[3],讲述了Catault项目的前世今生。紧接着,Catault项目的老大DougBurger在Ignite2016大会上与微软CEOSatyaNadella一起做了FPGA加速机器翻译的演示。演示的总计算能力是103万Tos,也就是1.03Exa-o,相当于10万块顶级GPU计算卡。一块FPGA(加上板上内存和网络接口等)的功耗大约是30W,仅增加了整个服务器功耗的十分之一。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/50/v2-de52ee704478410276b2acae767ec3a3_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1410&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;731&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1410&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/v2-de52ee704478410276b2acae767ec3a3_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;Ignite2016上的演示:每秒1Exa-o(10^18)的机器翻译运算能力微软部署FPGA并不是一帆风顺的。对于把FPGA部署在哪里这个问题,大致经历了三个阶段:专用的FPGA集群,里面插满了FPGA每台机器一块FPGA,采用专用网络连接每台机器一块FPGA,放在网卡和交换机之间,共享服务器网络&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic3.zhimg.com/50/v2-880465ced11d754f07f8edd225e48cab_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1077&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;1335&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1077&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic3.zhimg.com/v2-880465ced11d754f07f8edd225e48cab_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;微软FPGA部署方式的三个阶段,来源:[3]第一个阶段是专用集群,里面插满了FPGA加速卡,就像是一个FPGA组成的超级计算机。下图是最早的BFB实验板,一块PCIe卡上放了6块FPGA,每台1U服务器上又插了4块PCIe卡。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic1.zhimg.com/50/v2-8ed8783399c5b5cf4640c1450e73e1cf_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;2483&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;1101&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;2483&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic1.zhimg.com/v2-8ed8783399c5b5cf4640c1450e73e1cf_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;最早的BFB实验板,上面放了6块FPGA。来源:[1]可以注意到该公司的名字。在半导体行业,只要批量足够大,芯片的价格都将趋向于沙子的价格。据传闻,正是由于该公司不肯给「沙子的价格」,才选择了另一家公司。当然现在数据中心领域用两家公司FPGA的都有。只要规模足够大,对FPGA价格过高的担心将是不必要的。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/50/v2-a2257b21b10a8f6a91bfa87bd5db9165_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;714&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;599&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;714&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/v2-a2257b21b10a8f6a91bfa87bd5db9165_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;最早的BFB实验板,1U服务器上插了4块FPGA卡。来源:[1]像超级计算机一样的部署方式,意味着有专门的一个机柜全是上图这种装了24块FPGA的服务器(下图左)。这种方式有几个问题:不同机器的FPGA之间无法通信,FPGA所能处理问题的规模受限于单台服务器上FPGA的数量;数据中心里的其他机器要把任务集中发到这个机柜,构成了in-cast,网络延迟很难做到稳定。FPGA专用机柜构成了单点故障,只要它一坏,谁都别想加速了;装FPGA的服务器是定制的,冷却、运维都增加了麻烦。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/50/v2-70aa39ff215037213a8d70e46094464c_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;2534&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;1206&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;2534&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/v2-70aa39ff215037213a8d70e46094464c_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;部署FPGA的三种方式,从中心化到分布式。来源:[1]一种不那么激进的方式是,在每个机柜一面部署一台装满FPGA的服务器(上图中)。这避免了上述问题(2)(3),但(1)(4)仍然没有解决。第二个阶段,为了保证数据中心中服务器的同构性(这也是不用ASIC的一个重要原因),在每台服务器上插一块FPGA(上图右),FPGA之间通过专用网络连接。这也是微软在ISCA'14上所发表论文采用的部署方式。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/50/v2-7b73facc9e24d0fc6770a302de4eca7e_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;858&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;612&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;858&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/v2-7b73facc9e24d0fc6770a302de4eca7e_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;OenComuteServer在机架中。来源:[1]&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/50/v2-e23b8d5c807ad2ff8245d992d950fbec_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;2433&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;736&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;2433&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/v2-e23b8d5c807ad2ff8245d992d950fbec_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;OenComuteServer内景。红框是放FPGA的位置。来源:[1]&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic1.zhimg.com/50/v2-f0c08601b8b0a82beaa1389406ebbc15_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1034&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;594&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1034&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic1.zhimg.com/v2-f0c08601b8b0a82beaa1389406ebbc15_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;插入FPGA后的OenComuteServer。来源:[1]&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic3.zhimg.com/50/v2-6d0f7965b3064df2e59d9a4b579fc59c_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1002&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;1353&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1002&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic3.zhimg.com/v2-6d0f7965b3064df2e59d9a4b579fc59c_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;FPGA与OenComuteServer之间的连接与固定。来源:[1]FPGA采用StratixVD5,有172K个ALM,2014个M20K片上内存,1590个DSP。板上有一个8GBDDR3-1333内存,一个PCIeGen3x8接口,两个10Gbs网络接口。一个机柜之间的FPGA采用专用网络连接,一组10G网口8个一组连成环,另一组10G网口6个一组连成环,不使用交换机。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic1.zhimg.com/50/v2-90500731a6a932a37354ce1f16ac4cd8_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;2431&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;1218&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;2431&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic1.zhimg.com/v2-90500731a6a932a37354ce1f16ac4cd8_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;机柜中FPGA之间的网络连接方式。来源:[1]这样一个1632台服务器、1632块FPGA的集群,把Bing的搜索结果排序整体性能提高到了2倍(换言之,节省了一半的服务器)。如下图所示,每8块FPGA穿成一条链,中间用前面提到的10Gbs专用网线来通信。这8块FPGA各司其职,有的负责从文档中提取特征(黄色),有的负责计算特征表达式(绿色),有的负责计算文档的得分(红色)。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/50/v2-aaef099e0f6cf7aaf9e5be6bb3b0bc27_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1655&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;1155&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1655&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/v2-aaef099e0f6cf7aaf9e5be6bb3b0bc27_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;FPGA加速Bing的搜索排序过程。来源:[1]&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/50/v2-8bd4141da4973664abed27f2cbb8605f_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;963&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;638&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;963&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/v2-8bd4141da4973664abed27f2cbb8605f_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;FPGA不仅降低了Bing搜索的延迟,还显著提高了延迟的稳定性。来源:[4]&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic3.zhimg.com/50/v2-b81641c8231b29f3d4b687ce294b329c_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;963&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;647&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;963&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic3.zhimg.com/v2-b81641c8231b29f3d4b687ce294b329c_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;本地和远程的FPGA均可以降低搜索延迟,远程FPGA的通信延迟相比搜索延迟可忽略。来源:[4]FPGA在Bing的部署取得了成功,Catault项目继续在公司内扩张。微软内部拥有最多服务器的,就是云计算Azure部门了。Azure部门急需解决的问题是网络和存储虚拟化带来的开销。Azure把虚拟机卖给客户,需要给虚拟机的网络提供防火墙、负载均衡、隧道、NAT等网络功能。由于云存储的物理存储跟计算节点是分离的,需要把数据从存储节点通过网络搬运过来,还要进行压缩和加密。在1Gbs网络和机械硬盘的时代,网络和存储虚拟化的CPU开销不值一提。随着网络和存储速度越来越快,网络上了40Gbs,一块SSD的吞吐量也能到1GB/s,CPU渐渐变得力不从心了。例如Hyer-V虚拟交换机只能处理25Gbs左右的流量,不能达到40Gbs线速,当数据包较小时性能更差;AES-256加密和SHA-1签名,每个CPU核只能处理100MB/s,只是一块SSD吞吐量的十分之一。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/50/v2-5aeb1ccedd0b0f00cd1779d454b33382_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1842&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;546&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1842&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/v2-5aeb1ccedd0b0f00cd1779d454b33382_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;网络隧道协议、防火墙处理40Gbs需要的CPU核数。来源:[5]为了加速网络功能和存储虚拟化,微软把FPGA部署在网卡和交换机之间。如下图所示,每个FPGA有一个4GBDDR3-1333DRAM,通过两个PCIeGen3x8接口连接到一个CPUsocket(物理上是PCIeGen3x16接口,因为FPGA没有x16的硬核,逻辑上当成两个x8的用)。物理网卡(NIC)就是普通的40Gbs网卡,仅用于宿主机与网络之间的通信。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/50/v2-974d7118b5993fbd74756be5931fc14f_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1265&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;625&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1265&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/v2-974d7118b5993fbd74756be5931fc14f_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;Azure服务器部署FPGA的架构。来源:[6]FPGA(SmartNIC)对每个虚拟机虚拟出一块网卡,虚拟机通过SR-IOV直接访问这块虚拟网卡。原本在虚拟交换机里面的数据平面功能被移到了FPGA里面,虚拟机收发网络数据包均不需要CPU参与,也不需要经过物理网卡(NIC)。这样不仅节约了可用于出售的CPU资源,还提高了虚拟机的网络性能(25Gbs),把同数据中心虚拟机之间的网络延迟降低了10倍。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic3.zhimg.com/50/v2-061762f3dad5b8d8d6ac0e047a016924_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;2371&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;1316&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;2371&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic3.zhimg.com/v2-061762f3dad5b8d8d6ac0e047a016924_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;网络虚拟化的加速架构。来源:[6]这就是微软部署FPGA的第三代架构,也是目前「每台服务器一块FPGA」大规模部署所采用的架构。FPGA复用主机网络的初心是加速网络和存储,更深远的影响则是把FPGA之间的网络连接扩展到了整个数据中心的规模,做成真正cloud-scale的「超级计算机」。第二代架构里面,FPGA之间的网络连接局限于同一个机架以内,FPGA之间专网互联的方式很难扩大规模,通过CPU来转发则开销太高。第三代架构中,FPGA之间通过LTL(LightweightTransortLayer)通信。同一机架内延迟在3微秒以内;8微秒以内可达1000块FPGA;20微秒可达同一数据中心的所有FPGA。第二代架构尽管8台机器以内的延迟更低,但只能通过网络访问48块FPGA。为了支持大范围的FPGA间通信,第三代架构中的LTL还支持PFC流控协议和DCQCN拥塞控制协议。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic1.zhimg.com/50/v2-c1db4799f5fe34ecc85611211b568bb5_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;2209&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;993&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;2209&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic1.zhimg.com/v2-c1db4799f5fe34ecc85611211b568bb5_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;纵轴:LTL的延迟,横轴:可达的FPGA数量。来源:[4]&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic3.zhimg.com/50/v2-7ce4e13c6a60fe56684f1e2217923ceb_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;968&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;791&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;968&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic3.zhimg.com/v2-7ce4e13c6a60fe56684f1e2217923ceb_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;FPGA内的逻辑模块关系,其中每个Role是用户逻辑(如DNN加速、网络功能加速、加密),外面的部分负责各个Role之间的通信及Role与外设之间的通信。来源:[4]&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic1.zhimg.com/50/v2-b9d7f53b5125aecfd5d0b719b1a4179f_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1272&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;971&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1272&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic1.zhimg.com/v2-b9d7f53b5125aecfd5d0b719b1a4179f_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;FPGA构成的数据中心加速平面,介于网络交换层(TOR、L1、L2)和传统服务器软件(CPU上运行的软件)之间。来源:[4]通过高带宽、低延迟的网络互联的FPGA构成了介于网络交换层和传统服务器软件之间的数据中心加速平面。除了每台提供云服务的服务器都需要的网络和存储虚拟化加速,FPGA上的剩余资源还可以用来加速Bing搜索、深度神经网络(DNN)等计算任务。对很多类型的应用,随着分布式FPGA加速器的规模扩大,其性能提升是超线性的。例如CNNinference,当只用一块FPGA的时候,由于片上内存不足以放下整个模型,需要不断访问DRAM中的模型权重,性能瓶颈在DRAM;如果FPGA的数量足够多,每块FPGA负责模型中的一层或者一层中的若干个特征,使得模型权重完全载入片上内存,就消除了DRAM的性能瓶颈,完全发挥出FPGA计算单元的性能。当然,拆得过细也会导致通信开销的增加。把任务拆分到分布式FPGA集群的关键在于平衡计算和通信。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic1.zhimg.com/50/v2-5a17afc6d68df612e27e34778d0a0932_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1827&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;394&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1827&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic1.zhimg.com/v2-5a17afc6d68df612e27e34778d0a0932_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;从神经网络模型到HaaS上的FPGA。利用模型内的并行性,模型的不同层、不同特征映射到不同FPGA。来源:[4]在MICRO'16会议上,微软提出了HardwareasaService(HaaS)的概念,即把硬件作为一种可调度的云服务,使得FPGA服务的集中调度、管理和大规模部署成为可能。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/50/v2-e87fddf2b776f27c0d37cba5a521beed_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1025&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;950&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1025&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/v2-e87fddf2b776f27c0d37cba5a521beed_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;HardwareasaService(HaaS)。来源:[4]从第一代装满FPGA的专用服务器集群,到第二代通过专网连接的FPGA加速卡集群,到目前复用数据中心网络的大规模FPGA云,三个思想指导我们的路线:硬件和软件不是相互取代的关系,而是合作的关系;必须具备灵活性,即用软件定义的能力;必须具备可扩放性(scalability)。三、FPGA在云计算中的角色最后谈一点我个人对FPGA在云计算中角色的思考。作为三年级博士生,我在微软亚洲研究院的研究试图回答两个问题:FPGA在云规模的网络互连系统中应当充当怎样的角色?如何高效、可扩放地对FPGA+CPU的异构系统进行编程?我对FPGA业界主要的遗憾是,FPGA在数据中心的主流用法,从除微软外的互联网巨头,到两大FPGA厂商,再到学术界,大多是把FPGA当作跟GPU一样的计算密集型任务的加速卡。然而FPGA真的很适合做GPU的事情吗?前面讲过,FPGA和GPU最大的区别在于体系结构,FPGA更适合做需要低延迟的流式处理,GPU更适合做大批量同构数据的处理。由于很多人打算把FPGA当作计算加速卡来用,两大FPGA厂商推出的高层次编程模型也是基于OenCL,模仿GPU基于共享内存的批处理模式。CPU要交给FPGA做一件事,需要先放进FPGA板上的DRAM,然后告诉FPGA开始执行,FPGA把执行结果放回DRAM,再通知CPU去取回。CPU和FPGA之间本来可以通过PCIe高效通信,为什么要到板上的DRAM绕一圈?也许是工程实现的问题,我们发现通过OenCL写DRAM、启动kernel、读DRAM一个来回,需要1.8毫秒。而通过PCIeDMA来通信,却只要1~2微秒。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/50/v2-ade077e9ffe5e9babe8712621204b857_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1761&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;647&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1761&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/v2-ade077e9ffe5e9babe8712621204b857_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;PCIeI/Ochannel与OenCL的性能比较。纵坐标为对数坐标。来源:[5]OenCL里面多个kernel之间的通信就更夸张了,默认的方式也是通过共享内存。本文开篇就讲,FPGA比CPU和GPU能效高,体系结构上的根本优势是无指令、无需共享内存。使用共享内存在多个kernel之间通信,在顺序通信(FIFO)的情况下是毫无必要的。况且FPGA上的DRAM一般比GPU上的DRAM慢很多。因此我们提出了ClickNP网络编程框架[5],使用管道(channel)而非共享内存来在执行单元(element/kernel)间、执行单元和主机软件间进行通信。需要共享内存的应用,也可以在管道的基础上实现,毕竟CSP(CommunicatingSequentialProcess)和共享内存理论上是等价的嘛。ClickNP目前还是在OenCL基础上的一个框架,受到C语言描述硬件的局限性(当然HLS比Verilog的开发效率确实高多了)。理想的硬件描述语言,大概不会是C语言吧。&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/50/v2-3749426b53f0af9adc57613b4ec35093_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1647&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;618&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1647&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic4.zhimg.com/v2-3749426b53f0af9adc57613b4ec35093_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;ClickNP使用channel在elements间通信,来源:[5]&am;am;am;am;am;am;am;am;am;am;lt;imgsrc=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/50/v2-6364688b070e6ca6cdab83c6602b7c73_hd.jg&am;am;am;am;am;am;am;am;quot;data-rawwidth=&am;am;am;am;am;am;am;am;quot;1585&am;am;am;am;am;am;am;am;quot;data-rawheight=&am;am;am;am;am;am;am;am;quot;359&am;am;am;am;am;am;am;am;quot;class=&am;am;am;am;am;am;am;am;quot;origin_imagezh-lightbox-thumb&am;am;am;am;am;am;am;am;quot;width=&am;am;am;am;am;am;am;am;quot;1585&am;am;am;am;am;am;am;am;quot;data-original=&am;am;am;am;am;am;am;am;quot;htts://ic2.zhimg.com/v2-6364688b070e6ca6cdab83c6602b7c73_r.jg&am;am;am;am;am;am;am;am;quot;&am;am;am;am;am;am;am;am;am;am;gt;ClickNP使用channel在FPGA和CPU间通信,来源:[5]低延迟的流式处理,需要最多的地方就是通信。然而CPU由于并行性的限制和操作系统的调度,做通信效率不高,延迟也不稳定。此外,通信就必然涉及到调度和仲裁,CPU由于单核性能的局限和核间通信的低效,调度、仲裁性能受限,硬件则很适合做这种重复工作。因此我的博士研究把FPGA定义为通信的「大管家」,不管是服务器跟服务器之间的通信,虚拟机跟虚拟机之间的通信,进程跟进程之间的通信,CPU跟存储设备之间的通信,都可以用FPGA来加速。成也萧何,败也萧何。缺少指令同时是FPGA的优势和软肋。每做一点不同的事情,就要占用一定的FPGA逻辑资源。如果要做的事情复杂、重复性不强,就会占用大量的逻辑资源,其中的大部分处于闲置状态。这时就不如用冯·诺依曼结构的处理器。数据中心里的很多任务有很强的局部性和重复性:一部分是虚拟化平台需要做的网络和存储,这些都属于通信;另一部分是客户计算任务里的,比如机器学习、加密解密。我们首先把FPGA用于它最擅长的通信,日后也许也会像AWS那样把FPGA作为计算加速卡租给客户。不管通信还是机器学习、加密解密,算法都是很复杂的,如果试图用FPGA完全取代CPU,势必会带来FPGA逻辑资源极大的浪费,也会提高FPGA程序的开发成本。更实用的做法是FPGA和CPU协同工作,局部性和重复性强的归FPGA,复杂的归CPU。当我们用FPGA加速了Bing搜索、深度学习等越来越多的服务;当网络虚拟化、存储虚拟化等基础组件的数据平面被FPGA把持;当FPGA组成的「数据中心加速平面」成为网络和服务器之间的天堑……似乎有种感觉,FPGA将掌控全局,CPU上的计算任务反而变得碎片化,受FPGA的驱使。以往我们是CPU为主,把重复的计算任务卸载(offload)到FPGA上;以后会不会变成FPGA为主,把复杂的计算任务卸载到CPU上呢?随着Xeon+FPGA的问世,古老的SoC会不会在数据中心焕发新生?「跨越内存墙,走向可编程世界」(Acrossthememorywallandreachafullyrogrammableworld.)参考文献:[1]Large-ScaleReconfigurableComutinginaMicrosoftDatacenterhtts://www.microsoft.com/en-us/research/w-content/uloads/2014/06/HC26.12.520-Recon-Fabric-Pulnam-Microsoft-Catault.df[2]AReconfigurableFabricforAcceleratingLarge-ScaleDatacenterServices,ISCA'14htts://www.microsoft.com/en-us/research/w-content/uloads/2016/02/Catault_ISCA_2014.df[3]MicrosoftHasaWholeNewKindofComuterChi—andIt’llChangeEverything[4]ACloud-ScaleAccelerationArchitecture,MICRO'16htts://www.microsoft.com/en-us/research/w-content/uloads/2016/10/Cloud-Scale-Acceleration-Architecture.df[5]ClickNP:HighlyFlexibleandHigh-erformanceNetworkProcessingwithReconfigurableHardware-MicrosoftResearch[6]DanielFirestone,SmartNIC:AcceleratingAzure'sNetworkwith.FPGAsonOCSservers.
    亮了(0) 428 0 01-04
  • 论文 | 美国伯明翰大学团队使用Theano,Python,PYNQ和Zynq开发定点Deep Recurrent神经网络
    译文来源:xilinx.eetrend.com作者:Sleibso编译:csc57可编程逻辑(PLD)是由一种通用的集成电路产生的,逻辑功能按照用户对器件编程来确定,用户可以自行编程把数字系统集成在PLD中。经过多年的发展,可编程逻辑器件由70年代的可编程逻辑阵列器件(PLD)发展到目前的拥有数千万门的现场可编程阵列逻辑(FPGA),随着人工智能研究的火热发展,FPGA的并行性已经在一些实时性很高的神经网络计算任务中得到应用。由于在FPGA上实现浮点数会耗费很多硬件资源,而定点数虽然精度有限,但是对于不同应用通过选择合适的字长精度仍可以保证收敛,且速度要比浮点数表示更快而且资源耗费更少,已经使其成为嵌入式AI和机器学习应用程序的理想选择。最新的证明点是英国伯明翰大学电子电气和系统工程系的YufengHao和StevenQuigley最近发表的论文。论文标题为“在XilinxFPGA上实现深度递归神经网络语言模型“,介绍了使用Python编程语言成功实现和训练基于固定点深度递归神经网络(DRNN);Theano数学库和多维数组的框架;开源的基于Python的PYNQ开发环境;DigilentPYNQ-Z1开发板以及PYNQ-Z1板上的赛灵思ZynqZ-7020的片上系统SoC。Zynq-7000系列装载了双核ARMCortex-A9处理器和28nm的Artix-7或Kintex-7可编程逻辑。在单片上集成了CPU,DSP以及ASSP,具备了关键分析和硬件加速能力以及混合信号功能,出色的性价比和最大的设计灵活性也是特点之一。使用PythonDRNN硬件加速覆盖(一种赛灵思公司提出的硬件库,使用PythonAPI在硬件逻辑和软件中建立连接并交换数据),两个合作者使用此设计为NLP(自然语言处理)应用程序实现了20GOPS(10亿次每秒)的处理吞吐量,优于早期基于FPGA的实现2.75倍到70.5倍。论文的大部分讨论了NLP和LM(语言模型),“它涉及机器翻译,语音搜索,语音标记和语音识别”。本文随后讨论了使用VivadoHLS开发工具和Verilog语言实现DRNNLM硬件加速器,可以为PYNQ开发环境合成一个定制的硬件覆盖。由此产生的加速器包含五个过程元素(PE),能够在此应用程序中提供20GOPS的数据吞吐量。以下是设计的框图:DRNN加速器框图Vivado设计套件为下一代超高效率的C/C++和基于IP的设计提供了新的方法。融入了新的超快高效率设计方法集,用户可以实现10-15倍的效率的提升。VivadoHLS支持ISE和Vivado设计环境,可以通过集成C,C++和SystemC标准到赛灵思的可编程器件中而无需创建RTL模型,加快IP的创建。这篇论文中包括了大量深入的技术细节,但是这一句话总结了这篇博客文章的理由:“更重要的是,我们展示了软件和硬件联合设计和仿真过程在神经网络领域的应用“。对于PDF版论文原文有兴趣的小伙伴,可以点击本帖附件查看。
    亮了(0) 855 0 01-03
  • 想在SDSoC中用OpenCV搞事情?来,用Zybo-Z7传授你入门秘籍!
    用SDSoC在ZyboZ7上勾搭OenCV会是一种怎样的体验?...作为地球上最具性价比的嵌入式视觉应用开发平台,DigilentZybo-Z7去年一经推出,就凭借华丽丽升级的Zynq器件与各种板载外设接口,俘获了众多Zynq爱好者的芳心。这还不算这一业界标杆性的入门级Zynq-7000平台还免费附赠SDSoCVochuer!这一赠可谓激起千层浪,对于垂涎SDSoC已久的Digilent社区用户而言,识货者此等福利当然不会错过。然,作为版主,在下也因此收到了不少关于SDSoC开发的问题。继上一篇我们聊了聊“如何在Zynq开发板上入门SDSoC开发工具”,为响应Digilent开源社区用户的需求,今天我们就再来一发「SDSoC勾搭OenCV指南」,教你如何用Zybo-Z7创建一个基于OenCV的SDSoC项目。在开篇之前提醒一下:1.在本教程中,使用的SDSoC版本是2015.4。2.OenCV要求Linux易于使用,因为它会使用到许多库,例如thread...本文中不会介绍任何裸机配置方面的内容。01软硬件清单●SDSoC●ZyboZ7●包含Linux内核+根文件系统的平台●装有Linux系统的计算机02获取OenCV这一步你至少可以有两个选择,一种是下载并交叉编译库(docs.oencv.org/2.4/doc/tutorials/introduction/crosscomilation/arm_crosscomile_with_cmake);第二种是获取一个已经交叉编译好的库。在这一教程中,我们事先已经在SDSoC安装文件夹中建立好了OenCV2.4.5版本。03修改平台这里我们需要将编译好的库添加到你想要用于项目的SDSoC平台的根文件系统中。在这步操作之后,可执行文件(你的应用程序)将能够加载库。在ZyboZ7平台中使用的文件系统镜像类型是initramfs。如果你手头的是另一种镜像类型,你可以在Xilinxwiki上得到更多的所需信息:www.wiki.xilinx.com/Build+and+Modify+a+Rootfs3.1将根文件系统复制到临时文件夹中将位于平台的启动文件夹中名为“uramdisk.image.gz”的存档复制黏贴到一个临时文件夹中。打开终端,并进入该文件夹。3.2去掉U-BOOT头文件以获得CPIO存档ddif=uramdisk.image.gzbs=64ski=1of=ramdisk.gz3.3将新的CPIO存档压缩到一个新创建的文件夹中mkdirmy_rootgunzi-cramdisk.gz|sh-c'cdmy_root/&am;&am;sudocio-i'3.4复制库与头文件(-P保存链接)sudoc-/ot/Xilinx/SDSoC/2015.4/SDK/2015.4/data/embeddedsw/ThirdParty/oencv/lib/*my_root/lib/sudoc-r/ot/Xilinx/SDSoC/2015.4/SDK/2015.4/data/embeddedsw/ThirdParty/oencv/include/*my_root/usr/include/3.5压缩到CPIO和GUNZIPsudosh-c'cdmy_root/&am;&am;find.|cio-Hnewc-o'|gzi-9>my_ramdisk.image.gz3.6添加U-BOOT头文件mkimage-Aarm-Tramdisk-Cgzi-dmy_ramdisk.image.gzmy_uramdisk.image.gz这里需要确保文件的权限设置为755:sudochmod755./my_uramdisk.image.gz3.7在平台中更换新创建的镜像c./my_uramdisk.image.gz/athToZyboPlatform/boot/uramdisk.image.gz04在SDSoC中创建并配置一个新项目4.1添加包含路径创建一个新项目,选择你修改后的平台,然后选择你想要使用Linux。在rojectexlorer(左侧面板)中右键单击项目,然后点击属性。进入“C/C++build”->“设置”->“SDS++编译器”->“目录”,为所选的“build/debug/estimate配置”添加OenCV的包含路径(/ot/Xilinx/SDSoC/2015.4/SDK/2015.4/data/embeddedsw/ThirdParty/oencv/include),如下图所示:4.2链接库完成后,转到SDS++linker'sconfiguration,在“库”下,添加要在项目中使用的库及其所在的路径(我这里是:/ot/Xilinx/SDSoC/2015.4/SDK/2015.4/data/embeddedsw/ThirdParty/oencv/lib)4.3添加-RPATH-LINK最后,你需要指定路径,使得链接器能够搜索OenCV所需的依赖关系(libs)。转到SDS++linkerconfiguration,在“Miscellaneous”->“LinkerFlag”下添加以下行(-Wl,-rath-link=/ot/Xilinx/SDSoC/2015.4/SDK/2015.4/data/embeddedsw/ThirdParty/oencv/LIB)。-Wl选项向工具链表明选项-rath-link=...将被提供给链接器。05进行测试到这里,我们就要进行本文中最令人兴奋的部分:测试!以下代码将对一张图像进行FAST特征点检测:创建你的程序,完成之后将“sd_card”文件夹中的内容复制到目标SD卡中,这里不要忘记在根目录下添加一个测试图像(有兴趣尝试的朋友,可以点击本帖附件,获取本教程所使用的图像源文件)。boot操作完成后,使用以下命令在目标上运行可执行文件:cd/mnt./00_ocv_helloworld.elfBuildings.jgocv.jg如果一切顺利的话,则可执行文件会生成一个输出图像“ocv.jg”,如下所示:06总结我们将构建的库添加到SDSoC平台中使用的Linux根文件系统中。然后,我们基于这个新的SDSoC平台配置了一个新的项目,其中包含正确的包含路径和链接。到这里,你就可以随意使用OenCV啦!
    亮了(0) 1047 1 01-03
  • 干货 | 为Zynq SoC和Zynq UltraScale+ MPSoC实现SPI接口(以Arty Z7为例)
    最近,Digilent开源技术社区收到了两个关于如何在ZynqSoC和ZynqUltraScale+MPSoC上实现SPI接口的问题。在回答了这些问题之后,我认为有必要写一篇如何实现SPI的文章,在此分享。当我们在设计中使用ZynqSoC或ZynqUltraScale+MPSoC时,可以有两种方法来实现SPI接口:1.使用PS端的SPI控制器(PS端有两个SPI控制器)2.在PL端使用配置成标准SPI通信的AXIQuadSPI(QSPI)IP模块我们可以根据应用的要求来选择使用哪种方法实现SPI控制器。两种SPI的实现方式都支持四种SPI模式,并且都可以作为SPI主设备或SPI从设备。下表列出了它们之间的一些差异:首先,我们演示一下如何使用PS端的SPI控制器进行SPI传输。在ZynqMIOconfiguration选项卡中选中SPI控制器,这就将SPI包含在了设计中。在这个例子中,我将把SPI信号连接到DigilentARTYZ7开发板的SPI接口,这需要通过PLI/O使用EMIO。图:启用SPI并将端口映射到EMIO在选择好相应的选项后,唯一要做的就是连接SPI端口的I/O。具体要如何进行连接取决于我们是需要配置一个SPI主设备还是从设备。在SPI控制器上,每个SPI端口都有对应的可用输入(xxx_i)输出端口(xxx_o)。端口的正确连接十分关键,如果连接错误,当运行应用程序时,将得到完全错误的运行结果,这可能需要花费我们几个小时的时间来寻找问题的源头。另外,当配置成SPI从设备时,有一个名称为SlaveSelect的输入;而当用作SPI主设备时,将有三个选择引脚。当正确配置好I/O并创建了工程,我们就可以使用应用软件中的SPI配置选项将SPI控制器配置成为主设备或从设备。使用PSSPI控制器配置和传输数据,需要使用由XSPIs.H定义的BSP(板卡支持包)所提供的API接口。在第一个例子中,我们将SPI控制器配置为SPI主设备。默认情况下,SPI使用8位传输。但是,我们也可以将传输配置成更大的16或32位。对于8位传输,我们在C程序中可以使用u8数据类型。对于16位或32位传输,分别使用16位或32位对数据进行读写缓存。一开始,这可能会导致一些问题或生成编译器警告,因为执行如下所示的两个数据传输API函数都需要发送和接收缓冲区的数据类型为u8:s32XSiPs_Transfer(XSiPs*InstancePtr,u8*SendBufPtr,u8*RecvBufPtr,u32ByteCount);s32XSiPs_PolledTransfer(XSiPs*InstancePtr,u8*SendBufPtr,u8*RecvBufPtr,u32ByteCount);为了解决使用u16和u32数据类型的问题,我们需要将缓冲区转换为u8指针,如下所示:XSiPs_PolledTransfer(&am;SiInstance,(u8*)&am;TxBuffer,(u8*)&am;RxBuffer,8);这样设置将就使得我们能够传输大小为8,16或32位的数据了。为了演示这一设置,我将SPI主设备IO连接到DigilentDigitalDiscovery口袋仪器来测试传输的数据。在应用软件中使用上述方法将数据宽度从8位变为16位。图:ArtyZ7开发板与DigitalDiscovery口袋仪器图:ZynqSoCPSSPI主设备发送四个8位字图:PSSPI主设备发送四个16位字另一个实现SPI接口的方法是使用AXIQSPIIP核,使用这种方法需要在Vivado中进行的设置比较多,需要花费比较长的时间。在AXIQSPI配置对话框中,我们可以配置传输的宽度、频率和从设备的数量。最重要的一个选项就是选择AXIQSPIIP核是作为SPI主设备还是从设备。如果要配置成SPI主设备,就必须选中enablemastermode选项。如果要配置成为从设备,则必须取消该选项以确保SPISel输入引脚的存在。当SPIIP核作为从设备时,该引脚需要连接到主设备的slaveselect.端口。图:配置AXIQuadSPI与PSSPI控制器一样,BSP也为SPIIP提供一个API接口。我们可以用它来开发应用软件,这个API是在文件XSPI.h中定义的。作为例子的第二部分,我将使用这个API来配置AXIQSPI作为SPI从设备。为了演示创建软件后AXIQSPI核可以正确的以SPI从设备方式进行工作。我再次使用DigilentDigitalDiscovery口袋仪器作为SPI主设备,使数据在两者之间传输。图:SPI从设备收发数据(蓝色的数据由ZynqSPISlave输出)有兴趣的朋友,可以点击「本贴附件」,下载参考上述两个演示例程的Vivado设计文件。图:最终的blockdiagram当然,如果使用XilinxFPGA代替ZynqSoC或ZynqUltraScaleMPSoC,则可以使用具有相同AXIQSPI配置的MicroBlaze软核来实现SPI接口。只要正确地将其定义为主设备或从设备即可。希望这篇文章能够帮助你了解如何使用这两种不同的方法创建主/从SPI接口。
    亮了(0) 597 0 2017-12-28
  • 只需一招,Zynq搭配Pmod开发,没驱动也不怕
    没有直接可用的Pmod驱动?传授你一招填坑秘籍之前我们提到过「Pmod传感模块」,这一搭配FPGA开发板进行快速原型系统开发的利器。事实上,除了Pmod标准定义接口的专利方——Digilent公司所提供的近百种功能丰富的原厂Pmod传感模块之外(一般都配有免费的i驱动供开发者直接调用),市场上存在着很多来自不同供应商所提供的可用Pmod模块。然鹅,很多来自于不知名小厂的Pmod(以台湾、深圳的山寨厂商居多),往往并不提供模块驱动,需要用户自己去写驱动填坑。如果你不幸中招,聊表安慰之余,今天就传授你一招填坑秘籍,教你在没有可用驱动情况下的应对之策。先说重点:如果没有可用的驱动,可以使用ZynqSoCPL端(可编程逻辑)的Pmod桥模块,它让我们能够在选用的开发板与Pmod端口之间建立正确的映射,然后开发我们自己的ZynqPS(处理系统)驱动。假如你仔细研究正规厂商所提供的Pmod驱动,你会发现这些驱动其实也是使用Pmod桥加上一个AXII2C或者SPI组件所实现的。图:DigilentPmodAD2:12位四通道模拟数字转换器的驱动组件此文中,我们就将以Digilent(迪芝伦)PmodDA4:8通道DAC模块,以及PmodAD2:4通道ADC模块为例,我们将这两个模块整合在一起,借助Pmod桥模块自行开发驱动,用PmodDA4生成模拟信号,并用PmodAD2来接收信号。图:用DigilentAnalogDiscovery口袋仪器对PmodDA4测试Pmod桥模块允许我们定义开发板板载Pmod接口上下两排的输入类型,可以选择定义为GPIO、UART、I2C或者SPI协议接口。我们为所需驱动的板载Pmod接口上下层都进行相应的选择配置,使得Pmod传感器的管脚输出(inout)与对应的板载接口标准一致。有兴趣的朋友,可点击「本帖附件」,下载查看DigilentPmod传感器的接口标准文档。对于PmodDA4,我们只需要在板载Pmod接口上层使用SPI协议。这样选择后,我们需要提供实际的SPI通信通道。由于我们使用的是ZynqSoC开发板(DigilentArtyZ7),所以这里我们有两个选择。第一个方法是在PL端使用AXISPIIP模块与Pmod桥模块建立连接。第二个方法(也是这里我们将采用的)是使用EMIO建立ZynqPSSPI与Pmod桥中间的连接。这一方法将让我们能够在PSSPI端口与Pmod桥模块输入管脚之间建立直连。为了实现这一点我们需要阅读官方的Pmod接口标准文档来确保SPI管脚与Pmod桥输入管脚之间正确的映射(例如哪个PSSPI信号连接到IN_0)。Pmod桥模块的管脚代表不同的接口类型,它们的命名也是通用的。下面的框图展示了这里我们是如何实现PmodDA4管脚的映射。在这个示例中我们完成管脚映射后就可以构建工程,导出到SDK,编写软件程序驱动DA4。我们可以使用SDK中由BSP创建的SPI驱动来驱动PmodDA4。为了实现与PmodDA4的交互,第一件事我们要做的就是初始化SPI控制器。我们设置好SPI时钟相位和主操作选项后就可以定义缓冲区,并使用轮询传输模式将所需的信息传递给PmodDA4。更复杂的驱动则将使用中断驱动方式而非轮询的方式。下面,我们对创建好的PmodDA4驱动文件进行测试。我们驱动一个简单的谐波输出,并使用DigilentAnalogDiscovery口袋仪器的示波器功能来监测DAC输出。接收到的信号如下:完成了所有设置PmodDA4以预期的方式正常工作,然后我们将PmodDA4与PmodAD2连接在一起,这样ZynqSoC才能够接收信号:测试时我们要非常仔细,以确保PmodDA4输出的信号在PmodAD2的工作范围内,全部完成后则会显示PmodDA4能够在硬件上正常工作。到这里,相信大家已经了解了在没有可用驱动的情况下如何自行创建Pmod驱动。当然,填坑是不得已而为之,人生苦短,芳华有限,尽量少碰不提供驱动的山寨小厂Pmod才是王道。附:DigilentPmod传感器列表:htt://www.digilent.com.cn/roducts/mods.html
    亮了(0) 519 1 2017-12-28
解决问题:60
干货热帖:166
会员总数:7197
总帖数:605
我要发帖

贡献榜

  • hahavchen

    创新创业教育知名圈内人

    常隐匿于江湖的资深攻城狮,拥有超过10年的半导体与测控行业产品研发、技术支持、市场拓展及区域销售经验。目前同时担任上海交通大学本科生企业导师。

    • 工程师

      Andorid工程师,书呆子

    • mysunday2

      本科生

      武汉大学在读研究生,懂一点Java,懂一点LabVIEW

    • 风雨兼程

      本科生

      热爱科研,忠于技术,渴望在LabVIEW的世界里遨游。

    • 媒体人

      资深媒体人,现任职于国内某知名电子行业媒体

  • 工程师

    汽车电子方向系统集成工程师,坐标北京。精通LabVIEW与测控技术,乐于分享总结。

    • 工程师

      国家电网工程师,对于创新创造,我是真爱粉!

    • chnwjian

      研究生

      擅长物理实时测量和ardunio

    • 教师

      东南大学电子科学与工程学院

    • suo ivy

      创业者

      乐忠于机器人的创业少年

  • CC

    研究生

    擅长FPGA以及LabVIEW程序设计,拥有多年项目开发经验,曾开发过高速误码仪、自动泊车系统,研发并将PM2.5检测仪推入市场,目前致力于FPGA的图像处理研究。

    • 冰淇淋

      研究生

      略懂c语言,爱玩爱交流

    • Veritas

      电子技术爱好者

      非电类专业的在校纯技术爱好者

    • 竹杖芒鞋轻胜马

      研究生

      擅长电子电力,电源,逆变器,Matlab的同济骚年

    • 熊猫家的猫

      研究生

      热爱电子设计,熟悉LabVIEW编程,希望和大家一起学习进步。

    • 李比希

      电子技术爱好者

      喜欢LabVIEW,会点c语言,痴迷玩创,让激情碰出创意的火花!

    • 糊涂宝宝

      研究生

      精通C语言与电路设计。善于软硬件结合开发实际工程项目。

    • LabVIEWers

      工程师

      汽车电子电控领域工程师。个人信条:追求卓越。

    • 南瓜粥

      本科生

      致力于精密测量@天津大学

  • 工程师

    刚毕业的新晋TI验证工程师一枚。内心埋有一个小小的希望靠技术改变世界的种子。CLD(认证LabVIEW开发工程师)持有者,并熟悉C语言与MATLAB。

    • 阳光的新手125

      研究生

      Strict coding is the boddy, smart thoughts are the soul.

    • 工程师

      华为数字视频领域工程师,技术宅,CLD,热衷LabVIEW

    • 西兰花教负责人

      创业者

      俗称“福建三本“的某985高校毕业,正不务正业地创业中

    • berwin

      创业者

      好奇主义 & 观察者 & 行动派

  • 教师

    博士,现于哈尔滨工业大学任教。拥有超过8年基于FPGA的数字系统硬件设计经验,精通FPGA开发。

    • wonderm

      本科生

      熟悉LabVIEW/Matlab/Verilog,擅长STM32/K60硬件开发

    • diguaguowang

      研究生

      一直羡慕会各种编程的人,也在向着这个方向努力

    • 阿Q

      工程师

      精通FPGA的酷创达人

    • wigger

      工程师

      Digilent元老级大牛

  • Mr. D

    工程师

    部落的发起者与第一位"Digger",非典型张江男一枚。致力于为有执着有梦想的志同道合者缔造一个可以互相勾搭的中文开源技术社区。