我司要fpga企业内训公司,网上找了一家叫明德扬的机构,不知如何?

我从开始在明德扬学fpga到现在粗略算来的话,已经有3个月了,就目前而言,我并不确定自己算不算高手们所说的入门了,fpga来分享一下学习总结。但是不管现在的水平如何,现在就总结一下学习感受吧,希望能帮到更多的学生。
1.掌握fpga的编程语言
在学习一门技术之前我们往往从它的编程语言开始,如同学习单片机一样,我们从c语言开始入门,当掌握了c语言之后,开发单片机应用程序也就不是什么难事了。学习fpga也是如此,fpga的编程语言有两种:vhdl和verilog,这两种语言都适合用于fpga的编程。
2.fpga实验尤为重要除了学习编程语言以外,更重要的是实践。
将自己设计的程序能够在真正的fpga里运行起来,这时我们有配套明德扬开发板进行实验,我们选择使用一些项目进行试验。从中掌握一些项目操作实践。
3.学FPGA设计,首先是逻辑电路一定要正确
你能熟练地拿它来实现任何可以实现的逻辑电路,这就是一个好。这里面包括熟悉芯片的结构,里面每部分功能块的使用。熟悉开发环境,里面的功能,熟悉第三方提供的IP核。能把FPGA的性能发挥到极致,利用约束提高设计的性能等等。比如明德扬公司不仅仅教你如何上板,如何写代码,主要一定要掌握好设计思路正确,一个好的思路,往往功能实现时简单,可靠,移植性好,反之,感觉电路繁杂,思路不清的,就要回头审视一下自己的思路。设计思路的提高需要积累,多看看别人的设计,尤其是功能电路的设计,比较一下自己的设计,总结一下经验教训,看得多了,手段也就多了,另外多从系统的角度看看你的设计,做起项目来,不容易出差错,项目做的也比较顺利。
&总之,通过三个月的培训学习,由衷感谢潘老师的辛勤付出,我从完全技术小白变成了小菜鸟。非常感谢明德扬的教程和团队。
对于那些后来的学弟,我只想说,学东西如果能有人带你少走弯路,付出点金钱是很值得,不要总是想免费的午餐。只有支持收费项目,这些教程才能越来越好。(PS以上是学员真是感受)
旗下网站:
与非门科技(北京)有限公司 All Rights Reserved.
京ICP证:070212号
北京市公安局备案编号: 京ICP备:号当前位置: &
> 干货来袭,【明德扬】FPGA分享之边缘检测工程,包括源代码,参考资料
干货来袭,【明德扬】FPGA分享之边缘检测工程,包括源代码,参考资料
明德扬科技教育有限公司是一家以为核心,专业从事FPGA培训、FPGA技术开发、FPGA项目开发,并集研发、教育、咨询为一体的服务型企业。公司以人为本,立志成为FPGA教育领域第一品牌为目的,形成了一个以潘老师为主导的专业团队。我们着眼于人性与个性的并重,放开眼界,寻求独特的培训模式和拓展方法,推出了点拨FPGA培训课程系列,深受广大学生喜爱。明德扬的目标是让每一个想学习、想努力的学生学到真本领,秉承“致力于打造全国最好的FPGA课程”的理念。推出面向高校、社会、企业三个方面实训基地,以不同的教育特色和着重点,培养社会和企业急需的技术人才。边缘检测工程游客,如果您要查看本帖隐藏内容请
欢迎更多朋友过来技术交流明德扬FPGA技术交流群&&
欢迎分享本文,转载请保留出处: &&&
相关资料下载
相关设计应用
赞赞赞攒攒
学习一二,谢谢楼主的利益相关:微软亚洲研究院实习生,研究方向是 FPGA 在数据中心的应用。&br&&br&问题「用 FPGA 代替 CPU」中,这个「代替」的说法不准确。我们并不是不用 CPU 了,而是&b&用 FPGA 加速适合它的计算任务,其他任务仍然在 CPU 上完成,让 FPGA 和 CPU 协同工作&/b&。&br&&br&本回答将涵盖三个问题:&br&&ol&&li&为什么使用 FPGA,相比 CPU、GPU、ASIC(专用芯片)有什么特点?&/li&&li&微软的 FPGA 部署在哪里?FPGA 之间、FPGA 与 CPU 之间是如何通信的?&/li&&li&未来 FPGA 在云计算平台中应充当怎样的角色?仅仅是像 GPU 一样的计算加速卡吗?&/li&&/ol&&br&&b&一、为什么使用 FPGA?&/b&&br&&br&众所周知,通用处理器(CPU)的摩尔定律已入暮年,而机器学习和 Web 服务的规模却在指数级增长。&b&人们使用定制硬件来加速常见的计算任务,然而日新月异的行业又要求这些定制的硬件可被重新编程来执行新类型的计算任务&/b&。FPGA (Field Programmable Gate Array) 正是一种硬件可重构的体系结构,常年来被用作专用芯片(ASIC)的小批量替代品,然而近年来在微软、百度等公司的数据中心大规模部署,以&b&同时提供强大的计算能力和足够的灵活性&/b&。&br&&br&&img src=&/v2-71bb2dab64eb85e80b815c_b.png& data-rawwidth=&2106& data-rawheight=&1147& class=&origin_image zh-lightbox-thumb& width=&2106& data-original=&/v2-71bb2dab64eb85e80b815c_r.png&&&i&不同体系结构性能和灵活性的比较。&/i&&br&&br&FPGA 为什么快?「都是同行衬托得好」。&b&CPU、GPU 都属于冯·诺依曼结构,指令译码执行、共享内存。&/b&FPGA 之所以比 CPU 甚至 GPU 能效高,本质上是无指令、无需共享内存的体系结构带来的福利。&br&&br&冯氏结构中,由于执行单元(如 CPU 核)可能执行任意指令,就需要有指令存储器、译码器、各种指令的运算器、分支跳转处理逻辑。由于指令流的控制逻辑复杂,不可能有太多条独立的指令流,因此 GPU 使用 SIMD(单指令流多数据流)来让多个执行单元以同样的步调处理不同的数据,CPU 也支持 SIMD 指令。而 &b&FPGA 每个逻辑单元的功能在重编程(烧写)时就已经确定,不需要指令。&/b&&br&&br&冯氏结构中使用内存有两种作用。一是保存状态,二是在执行单元间通信。由于内存是共享的,就需要做访问仲裁;为了利用访问局部性,每个执行单元有一个私有的缓存,这就要维持执行部件间缓存的一致性。&b&对于保存状态的需求,&/b&&b&FPGA&/b& 中的寄存器和片上内存(BRAM)是属于各自的控制逻辑的,&b&无需不必要的仲裁和缓存&/b&。&b&对于通信的需求,FPGA&/b& 每个逻辑单元与周围逻辑单元的连接在重编程(烧写)时就已经确定,&b&并不需要通过共享内存来通信&/b&。&br&&br&说了这么多三千英尺高度的话,FPGA 实际的表现如何呢?我们分别来看计算密集型任务和通信密集型任务。&br&&br&&b&计算密集型任务&/b&的例子包括矩阵运算、图像处理、机器学习、压缩、非对称加密、Bing 搜索的排序等。这类任务一般是 CPU 把任务卸载(offload)给 FPGA 去执行。对这类任务,目前我们正在用的 Altera(似乎应该叫 Intel 了,我还是习惯叫 Altera……)Stratix V FPGA 的整数乘法运算性能与 20 核的 CPU 基本相当,浮点乘法运算性能与 8 核的 CPU 基本相当,而比 GPU 低一个数量级。我们即将用上的下一代 FPGA,Stratix 10,将配备更多的乘法器和硬件浮点运算部件,从而理论上可达到与现在的顶级 GPU 计算卡旗鼓相当的计算能力。&br&&br&&img src=&/v2-ff703e9c57f9cf55777b_b.png& data-rawwidth=&1053& data-rawheight=&832& class=&origin_image zh-lightbox-thumb& width=&1053& data-original=&/v2-ff703e9c57f9cf55777b_r.png&&&i&FPGA 的整数乘法运算能力(&/i&&i&估计值,&/i&&i&不使用 DSP,根据逻辑资源占用量估计)&/i&&br&&br&&img src=&/v2-404dcbcf292c4e31b3e12ebc228963af_b.png& data-rawwidth=&1070& data-rawheight=&831& class=&origin_image zh-lightbox-thumb& width=&1070& data-original=&/v2-404dcbcf292c4e31b3e12ebc228963af_r.png&&&i&FPGA 的浮点乘法运算能力(估计值,float16 用软核,float 32 用硬核)&/i&&br&&br&&b&在数据中心,FPGA 相比 GPU 的核心优势在于延迟&/b&。像 Bing 搜索排序这样的任务,要尽可能快地返回搜索结果,就需要尽可能降低每一步的延迟。如果使用 GPU 来加速,要想充分利用 GPU 的计算能力,batch size 就不能太小,延迟将高达毫秒量级。使用 FPGA 来加速的话,只需要微秒级的 PCIe 延迟(我们现在的 FPGA 是作为一块 PCIe 加速卡)。未来 Intel 推出通过 QPI 连接的 Xeon + FPGA 之后,CPU 和 FPGA 之间的延迟更可以降到 100 纳秒以下,跟访问主存没什么区别了。&br&&br&FPGA 为什么比 GPU 的延迟低这么多?这本质上是体系结构的区别。&b&FPGA 同时拥有流水线并行和数据并行,而 GPU 几乎只有数据并行(流水线深度受限)。&/b&例如处理一个数据包有 10 个步骤,FPGA 可以搭建一个 10 级流水线,流水线的不同级在处理不同的数据包,每个数据包流经 10 级之后处理完成。每处理完成一个数据包,就能马上输出。而 GPU 的数据并行方法是做 10 个计算单元,每个计算单元也在处理不同的数据包,然而所有的计算单元必须按照统一的步调,做相同的事情(SIMD,Single Instruction Multiple Data)。这就要求 10 个数据包必须一起输入、一起输出,输入输出的延迟增加了。当任务是逐个而非成批到达的时候,流水线并行比数据并行可实现更低的延迟。因此&b&对流式计算的任务,FPGA 比 GPU 天生有延迟方面的优势。&/b&&br&&br&&img src=&/v2-1ffb204e56f3d02b0cabdcd6f6c3fb34_b.png& data-rawwidth=&1435& data-rawheight=&476& class=&origin_image zh-lightbox-thumb& width=&1435& data-original=&/v2-1ffb204e56f3d02b0cabdcd6f6c3fb34_r.png&&&i&计算密集型任务,CPU、GPU、FPGA、ASIC 的数量级比较(以 16 位整数乘法为例,数字仅为数量级的估计)&/i&&br&&br&ASIC 专用芯片在吞吐量、延迟和功耗三方面都无可指摘,但微软并没有采用,出于两个原因:&br&&ol&&li&数据中心的计算任务是灵活多变的,而 ASIC 研发成本高、周期长。好不容易大规模部署了一批某种神经网络的加速卡,结果另一种神经网络更火了,钱就白费了。FPGA 只需要几百毫秒就可以更新逻辑功能。&b&FPGA 的灵活性可以保护投资,事实上,微软现在的 FPGA 玩法与最初的设想大不相同。&/b&&/li&&li&数据中心是租给不同的租户使用的,如果有的机器上有神经网络加速卡,有的机器上有 Bing 搜索加速卡,有的机器上有网络虚拟化加速卡,任务的调度和服务器的运维会很麻烦。&b&使用 FPGA 可以保持数据中心的同构性。&/b&&/li&&/ol&&br&接下来看通信密集型任务。相比计算密集型任务,通信密集型任务对每个输入数据的处理不甚复杂,基本上简单算算就输出了,这时通信往往会成为瓶颈。对称加密、防火墙、网络虚拟化都是通信密集型的例子。&br&&br&&img src=&/v2-d74634adc21db32f6fafed538c7b91ca_b.png& data-rawwidth=&1434& data-rawheight=&478& class=&origin_image zh-lightbox-thumb& width=&1434& data-original=&/v2-d74634adc21db32f6fafed538c7b91ca_r.png&&&i&通信密集型任务,CPU、GPU、FPGA、ASIC 的数量级比较(以 64 字节网络数据包处理为例,&/i&&i&数字仅为数量级的估计&/i&&i&)&/i&&br&&br&&b&对通信密集型任务,FPGA 相比 CPU、GPU 的优势就更大了&/b&。从吞吐量上讲,FPGA 上的收发器可以直接接上 40 Gbps 甚至 100 Gbps 的网线,以线速处理任意大小的数据包;而 CPU 需要从网卡把数据包收上来才能处理,&b&很多网卡是不能线速处理 64 字节的小数据包的&/b&。尽管可以通过插多块网卡来达到高性能,但 CPU 和主板支持的 PCIe 插槽数量往往有限,而且网卡、交换机本身也价格不菲。&br&&br&从延迟上讲,网卡把数据包收到 CPU,CPU 再发给网卡,即使使用 DPDK 这样高性能的数据包处理框架,延迟也有 4~5 微秒。更严重的问题是,&b&通用 CPU 的延迟不够稳定&/b&。例如当负载较高时,转发延迟可能升到几十微秒甚至更高(如下图所示);现代操作系统中的时钟中断和任务调度也增加了延迟的不确定性。&br&&img src=&/v2-b5b50a3c73cba5223ada6c6_b.png& data-rawwidth=&817& data-rawheight=&594& class=&origin_image zh-lightbox-thumb& width=&817& data-original=&/v2-b5b50a3c73cba5223ada6c6_r.png&&&i&ClickNP(FPGA)与 Dell S6000 交换机(商用交换机芯片)、Click+DPDK(CPU)和 Linux(CPU)的转发延迟比较,error bar 表示 5% 和 95%。来源:[5]&/i&&br&&br&虽然 GPU 也可以高性能处理数据包,但 GPU 是没有网口的,意味着需要首先把数据包由网卡收上来,再让 GPU 去做处理。这样吞吐量受到 CPU 和/或网卡的限制。GPU 本身的延迟就更不必说了。&br&&br&那么为什么不把这些网络功能做进网卡,或者使用可编程交换机呢?&b&ASIC 的灵活性仍然是硬伤&/b&。尽管目前有越来越强大的可编程交换机芯片,比如支持 P4 语言的 Tofino,ASIC 仍然不能做复杂的有状态处理,比如某种自定义的加密算法。&br&&br&综上,&b&在数据中心里 FPGA 的主要优势是稳定又极低的延迟,适用于流式的计算密集型任务和通信密集型任务。&/b&&br&&br&&br&&b&二、微软部署 FPGA 的实践&/b&&br&&br&2016 年 9 月,《连线》(&i&Wired&/i&)杂志发表了一篇《微软把未来押注在 FPGA 上》的报道 [3],讲述了 Catapult 项目的前世今生。紧接着,Catapult 项目的老大 Doug Burger 在 Ignite 2016 大会上与微软 CEO Satya Nadella 一起做了 FPGA 加速机器翻译的演示。演示的总计算能力是 103 万 T ops,也就是 1.03 Exa-op,相当于 10 万块顶级 GPU 计算卡。一块 FPGA(加上板上内存和网络接口等)的功耗大约是 30 W,仅增加了整个服务器功耗的十分之一。&br&&br&&img src=&/v2-de52eeb2acae767ec3a3_b.png& data-rawwidth=&1410& data-rawheight=&731& class=&origin_image zh-lightbox-thumb& width=&1410& data-original=&/v2-de52eeb2acae767ec3a3_r.png&&&i&Ignite 2016 上的演示:每秒 1 Exa-op (10^18) 的机器翻译运算能力&/i&&br&&br&微软部署 FPGA 并不是一帆风顺的。&b&对于把 FPGA 部署在哪里这个问题,大致经历了三个阶段:&/b&&br&&ol&&li&&b&专用的 FPGA 集群,里面插满了 FPGA&/b&&/li&&li&&b&每台机器一块 FPGA,采用专用网络连接&/b&&/li&&li&&b&每台机器一块 FPGA,放在网卡和交换机之间,共享服务器网络&/b&&/li&&/ol&&img src=&/v2-880465ced11d754f07f8edd225e48cab_b.png& data-rawwidth=&1077& data-rawheight=&1335& class=&origin_image zh-lightbox-thumb& width=&1077& data-original=&/v2-880465ced11d754f07f8edd225e48cab_r.png&&&i&微软 FPGA 部署方式的三个阶段,来源:[3]&/i&&br&&br&第一个阶段是专用集群,里面插满了 FPGA 加速卡,就像是一个 FPGA 组成的超级计算机。下图是最早的 BFB 实验板,一块 PCIe 卡上放了 6 块 FPGA,每台 1U 服务器上又插了 4 块 PCIe 卡。&br&&br&&img src=&/v2-8edb5cfe1cf_b.png& data-rawwidth=&2483& data-rawheight=&1101& class=&origin_image zh-lightbox-thumb& width=&2483& data-original=&/v2-8edb5cfe1cf_r.png&&&i&最早的 BFB 实验板,上面放了 6 块 FPGA。来源:[1]&/i&&br&&br&可以注意到该公司的名字。在半导体行业,只要批量足够大,芯片的价格都将趋向于沙子的价格。据传闻,正是由于该公司不肯给「沙子的价格」 ,才选择了另一家公司。当然现在数据中心领域用两家公司 FPGA 的都有。&b&只要规模足够大,对 FPGA 价格过高的担心将是不必要的。&/b&&br&&br&&img src=&/v2-aa8f6a91bfa87bd5db9165_b.png& data-rawwidth=&714& data-rawheight=&599& class=&origin_image zh-lightbox-thumb& width=&714& data-original=&/v2-aa8f6a91bfa87bd5db9165_r.png&&&i&最早的 BFB 实验板,1U 服务器上插了 4 块 FPGA 卡。来源:[1]&/i&&br&&br&像超级计算机一样的部署方式,意味着有专门的一个机柜全是上图这种装了 24 块 FPGA 的服务器(下图左)。这种方式有几个问题:&br&&ol&&li&不同机器的 FPGA 之间无法通信,FPGA 所能处理问题的规模受限于单台服务器上 FPGA 的数量;&/li&&li&数据中心里的其他机器要把任务集中发到这个机柜,构成了 in-cast,网络延迟很难做到稳定。&/li&&li&FPGA 专用机柜构成了单点故障,只要它一坏,谁都别想加速了;&/li&&li&装 FPGA 的服务器是定制的,冷却、运维都增加了麻烦。&/li&&/ol&&br&&img src=&/v2-70aa39ffd70ec_b.png& data-rawwidth=&2534& data-rawheight=&1206& class=&origin_image zh-lightbox-thumb& width=&2534& data-original=&/v2-70aa39ffd70ec_r.png&&&i&部署 FPGA 的三种方式,从中心化到分布式。来源:[1]&/i&&br&&br&一种不那么激进的方式是,在每个机柜一面部署一台装满 FPGA 的服务器(上图中)。这避免了上述问题 (2)(3),但 (1)(4) 仍然没有解决。&br&&br&第二个阶段,为了&b&保证数据中心中服务器的同构性&/b&(这也是不用 ASIC 的一个重要原因),在每台服务器上插一块 FPGA(上图右),FPGA 之间通过专用网络连接。这也是微软在 ISCA'14 上所发表论文采用的部署方式。&br&&br&&img src=&/v2-7b73facc9e24d0fceca7e_b.png& data-rawwidth=&858& data-rawheight=&612& class=&origin_image zh-lightbox-thumb& width=&858& data-original=&/v2-7b73facc9e24d0fceca7e_r.png&&&i&Open Compute Server 在机架中。来源:[1]&/i&&br&&br&&img src=&/v2-e23b8d5c807ad2fffbec_b.png& data-rawwidth=&2433& data-rawheight=&736& class=&origin_image zh-lightbox-thumb& width=&2433& data-original=&/v2-e23b8d5c807ad2fffbec_r.png&&&i&Open Compute Server 内景。红框是放 FPGA 的位置。来源:[1]&/i&&br&&br&&img src=&/v2-f0ca82beaa1389406ebbc15_b.png& data-rawwidth=&1034& data-rawheight=&594& class=&origin_image zh-lightbox-thumb& width=&1034& data-original=&/v2-f0ca82beaa1389406ebbc15_r.png&&&i&插入 FPGA 后的 Open Compute Server。来源:[1]&/i&&br&&br&&img src=&/v2-6d0fdf2e59d9a4b579fc59c_b.png& data-rawwidth=&1002& data-rawheight=&1353& class=&origin_image zh-lightbox-thumb& width=&1002& data-original=&/v2-6d0fdf2e59d9a4b579fc59c_r.png&&&i&FPGA 与 Open Compute Server 之间的连接与固定。来源:[1]&/i&&br&&br&FPGA 采用 Stratix V D5,有 172K 个 ALM,2014 个 M20K 片上内存,1590 个 DSP。板上有一个 8GB DDR3-1333 内存,一个 PCIe Gen3 x8 接口,两个 10 Gbps 网络接口。一个机柜之间的 FPGA 采用专用网络连接,一组 10G 网口 8 个一组连成环,另一组 10G 网口 6 个一组连成环,不使用交换机。&br&&br&&img src=&/v2-a932a3ac4cd8_b.png& data-rawwidth=&2431& data-rawheight=&1218& class=&origin_image zh-lightbox-thumb& width=&2431& data-original=&/v2-a932a3ac4cd8_r.png&&&i&机柜中 FPGA 之间的网络连接方式。来源:[1]&/i&&br&&br&这样一个 1632 台服务器、1632 块 FPGA 的集群,把 Bing 的搜索结果排序整体性能提高到了 2 倍(换言之,节省了一半的服务器)。如下图所示,每 8 块 FPGA 穿成一条链,中间用前面提到的 10 Gbps 专用网线来通信。这 8 块 FPGA 各司其职,有的负责从文档中提取特征(黄色),有的负责计算特征表达式(绿色),有的负责计算文档的得分(红色)。&br&&br&&img src=&/v2-aaef099e0f6cf7aaf9e5be6bb3b0bc27_b.png& data-rawwidth=&1655& data-rawheight=&1155& class=&origin_image zh-lightbox-thumb& width=&1655& data-original=&/v2-aaef099e0f6cf7aaf9e5be6bb3b0bc27_r.png&&&i&FPGA 加速 Bing 的搜索排序过程。来源:[1]&/i&&br&&br&&img src=&/v2-8bd4abed27f2cbb8605f_b.png& data-rawwidth=&963& data-rawheight=&638& class=&origin_image zh-lightbox-thumb& width=&963& data-original=&/v2-8bd4abed27f2cbb8605f_r.png&&&i&FPGA 不仅降低了 Bing 搜索的延迟,还显著提高了延迟的稳定性。来源:[4]&/i&&br&&br&&img src=&/v2-bb29f3d4b687ce294b329c_b.png& data-rawwidth=&963& data-rawheight=&647& class=&origin_image zh-lightbox-thumb& width=&963& data-original=&/v2-bb29f3d4b687ce294b329c_r.png&&&br&&i&本地和远程的 FPGA 均可以降低搜索延迟,远程 FPGA 的通信延迟相比搜索延迟可忽略。&/i&&i&来源:[4]&/i&&br&&br&FPGA 在 Bing 的部署取得了成功,Catapult 项目继续在公司内扩张。微软内部拥有最多服务器的,就是云计算 Azure 部门了。Azure 部门急需解决的问题是网络和存储虚拟化带来的开销。Azure 把虚拟机卖给客户,需要给虚拟机的网络提供防火墙、负载均衡、隧道、NAT 等网络功能。由于云存储的物理存储跟计算节点是分离的,需要把数据从存储节点通过网络搬运过来,还要进行压缩和加密。&br&&br&在 1 Gbps 网络和机械硬盘的时代,网络和存储虚拟化的 CPU 开销不值一提。随着网络和存储速度越来越快,网络上了 40 Gbps,一块 SSD 的吞吐量也能到 1 GB/s,CPU 渐渐变得力不从心了。例如 Hyper-V 虚拟交换机只能处理 25 Gbps 左右的流量,不能达到 40 Gbps 线速,当数据包较小时性能更差;AES-256 加密和 SHA-1 签名,每个 CPU 核只能处理 100 MB/s,只是一块 SSD 吞吐量的十分之一。&br&&img src=&/v2-5aeb1ccedd0b0f00cd82_b.png& data-rawwidth=&1842& data-rawheight=&546& class=&origin_image zh-lightbox-thumb& width=&1842& data-original=&/v2-5aeb1ccedd0b0f00cd82_r.png&&&i&网络隧道协议、防火墙处理 40 Gbps 需要的 CPU 核数。来源:[5]&/i&&br&&br&&b&为了加速网络功能和存储虚拟化,微软把 FPGA 部署在网卡和交换机之间。&/b&如下图所示,每个 FPGA 有一个 4 GB DDR3-1333 DRAM,通过两个 PCIe Gen3 x8 接口连接到一个 CPU socket(物理上是 PCIe Gen3 x16 接口,因为 FPGA 没有 x16 的硬核,逻辑上当成两个 x8 的用)。物理网卡(NIC)就是普通的 40 Gbps 网卡,仅用于宿主机与网络之间的通信。&br&&br&&img src=&/v2-974dfbd7fc14f_b.png& data-rawwidth=&1265& data-rawheight=&625& class=&origin_image zh-lightbox-thumb& width=&1265& data-original=&/v2-974dfbd7fc14f_r.png&&&i&Azure 服务器部署 FPGA 的架构。来源:[6]&/i&&br&&br&FPGA(SmartNIC)对每个虚拟机虚拟出一块网卡,虚拟机通过 SR-IOV 直接访问这块虚拟网卡。原本在虚拟交换机里面的数据平面功能被移到了 FPGA 里面,虚拟机收发网络数据包均不需要 CPU 参与,也不需要经过物理网卡(NIC)。这样不仅节约了可用于出售的 CPU 资源,还&b&提高了虚拟机的网络性能(25 Gbps),把同数据中心虚拟机之间的网络延迟降低了 10 倍&/b&。&br&&br&&img src=&/v2-dad5b8d8d6ac0e047a016924_b.png& data-rawwidth=&2371& data-rawheight=&1316& class=&origin_image zh-lightbox-thumb& width=&2371& data-original=&/v2-dad5b8d8d6ac0e047a016924_r.png&&&i&网络虚拟化的加速架构。来源:[6]&/i&&br&&br&这就是微软部署 FPGA 的第三代架构,也是目前「每台服务器一块 FPGA」大规模部署所采用的架构。&b&FPGA 复用主机网络的初心是加速网络和存储,更深远的影响则是把 FPGA 之间的网络连接扩展到了整个数据中心的规模&/b&,做成真正 cloud-scale 的「超级计算机」。第二代架构里面,FPGA 之间的网络连接局限于同一个机架以内,FPGA 之间专网互联的方式很难扩大规模,通过 CPU 来转发则开销太高。&br&&br&第三代架构中,FPGA 之间通过 LTL (Lightweight Transport Layer) 通信。同一机架内延迟在 3 微秒以内;8 微秒以内可达 1000 块 FPGA;20 微秒可达同一数据中心的所有 FPGA。第二代架构尽管 8 台机器以内的延迟更低,但只能通过网络访问 48 块 FPGA。为了支持大范围的 FPGA 间通信,第三代架构中的 LTL 还支持 PFC 流控协议和 DCQCN 拥塞控制协议。&br&&br&&img src=&/v2-c1dbeccbb5_b.png& data-rawwidth=&2209& data-rawheight=&993& class=&origin_image zh-lightbox-thumb& width=&2209& data-original=&/v2-c1dbeccbb5_r.png&&&i&纵轴:LTL 的延迟,横轴:可达的 FPGA 数量。来源:[4]&/i&&br&&br&&img src=&/v2-7ce4e13c6a60fe7923ceb_b.png& data-rawwidth=&968& data-rawheight=&791& class=&origin_image zh-lightbox-thumb& width=&968& data-original=&/v2-7ce4e13c6a60fe7923ceb_r.png&&&i&FPGA 内的逻辑模块关系,其中每个 Role 是用户逻辑(如 DNN 加速、网络功能加速、加密),外面的部分负责各个 Role 之间的通信及 Role 与外设之间的通信。来源:[4]&/i&&br&&br&&img src=&/v2-b9d7f53b5125aecfd5d0b719b1a4179f_b.png& data-rawwidth=&1272& data-rawheight=&971& class=&origin_image zh-lightbox-thumb& width=&1272& data-original=&/v2-b9d7f53b5125aecfd5d0b719b1a4179f_r.png&&&i&FPGA 构成的数据中心加速平面,介于网络交换层(TOR、L1、L2)和传统服务器软件(CPU 上运行的软件)之间。来源:[4]&/i&&br&&br&&b&通过高带宽、低延迟的网络互联的 FPGA 构成了介于网络交换层和传统服务器软件之间的数据中心加速平面。&/b&除了每台提供云服务的服务器都需要的网络和存储虚拟化加速,FPGA 上的剩余资源还可以用来加速 Bing 搜索、深度神经网络(DNN)等计算任务。&br&&br&&b&对很多类型的应用,随着分布式 FPGA 加速器的规模扩大,其性能提升是超线性的。&/b&例如 CNN inference,当只用一块 FPGA 的时候,由于片上内存不足以放下整个模型,需要不断访问 DRAM 中的模型权重,性能瓶颈在 DRAM;如果 FPGA 的数量足够多,每块 FPGA 负责模型中的一层或者一层中的若干个特征,使得模型权重完全载入片上内存,就消除了 DRAM 的性能瓶颈,完全发挥出 FPGA 计算单元的性能。当然,拆得过细也会导致通信开销的增加。&b&把任务拆分到分布式 FPGA 集群的关键在于平衡计算和通信。&/b&&br&&br&&img src=&/v2-5a17afc6d68df612e27e2_b.png& data-rawwidth=&1827& data-rawheight=&394& class=&origin_image zh-lightbox-thumb& width=&1827& data-original=&/v2-5a17afc6d68df612e27e2_r.png&&&i&从神经网络模型到 HaaS 上的 FPGA。利用模型内的并行性,模型的不同层、不同特征映射到不同 FPGA。来源:[4]&/i&&br&&br&在 MICRO'16 会议上,微软提出了 &b&Hardware as a Service (HaaS)&/b& 的概念,即把硬件作为一种可调度的云服务,使得 FPGA 服务的集中调度、管理和大规模部署成为可能。&br&&br&&img src=&/v2-e87fddf2b776f27c0d37cba5a521beed_b.png& data-rawwidth=&1025& data-rawheight=&950& class=&origin_image zh-lightbox-thumb& width=&1025& data-original=&/v2-e87fddf2b776f27c0d37cba5a521beed_r.png&&&i&Hardware as a Service (HaaS)。来源:[4]&/i&&br&&br&从第一代装满 FPGA 的专用服务器集群,到第二代通过专网连接的 FPGA 加速卡集群,到目前复用数据中心网络的大规模 FPGA 云,三个思想指导我们的路线:&br&&ol&&li&&b&硬件和软件不是相互取代的关系,而是合作的关系;&/b&&/li&&li&&b&必须具备灵活性,即用软件定义的能力;&/b&&/li&&li&&b&必须具备可扩放性(scalability)。&/b&&/li&&/ol&&br&&br&&b&三、FPGA 在云计算中的角色&br&&/b&&br&最后谈一点我个人对 FPGA 在云计算中角色的思考。作为三年级博士生,我在微软亚洲研究院的研究试图回答两个问题:&br&&ol&&li&FPGA 在云规模的网络互连系统中应当充当怎样的角色?&/li&&li&如何高效、可扩放地对 FPGA + CPU 的异构系统进行编程?&/li&&/ol&&br&我对 FPGA 业界主要的遗憾是,FPGA 在数据中心的主流用法,从除微软外的互联网巨头,到两大 FPGA 厂商,再到学术界,大多是把 FPGA 当作跟 GPU 一样的计算密集型任务的加速卡。然而 FPGA 真的很适合做 GPU 的事情吗?前面讲过,&b&FPGA 和 GPU 最大的区别在于体系结构,FPGA 更适合做需要低延迟的流式处理,GPU 更适合做大批量同构数据的处理。&/b&&br&&br&由于很多人打算把 FPGA 当作计算加速卡来用,两大 FPGA 厂商推出的高层次编程模型也是基于 OpenCL,模仿 GPU 基于共享内存的批处理模式。CPU 要交给 FPGA 做一件事,需要先放进 FPGA 板上的 DRAM,然后告诉 FPGA 开始执行,FPGA 把执行结果放回 DRAM,再通知 CPU 去取回。&b&CPU 和 FPGA 之间本来可以通过 PCIe 高效通信,为什么要到板上的 DRAM 绕一圈?&/b&也许是工程实现的问题,我们发现通过 OpenCL 写 DRAM、启动 kernel、读 DRAM 一个来回,需要 1.8 毫秒。而通过 PCIe DMA 来通信,却只要 1~2 微秒。&br&&br&&img src=&/v2-ade077e9ffe5e9babeb857_b.png& data-rawwidth=&1761& data-rawheight=&647& class=&origin_image zh-lightbox-thumb& width=&1761& data-original=&/v2-ade077e9ffe5e9babeb857_r.png&&&i&PCIe I/O channel 与 OpenCL 的性能比较。纵坐标为对数坐标。来源:[5]&/i&&br&&br&OpenCL 里面多个 kernel 之间的通信就更夸张了,默认的方式也是通过共享内存。本文开篇就讲,FPGA 比 CPU 和 GPU 能效高,体系结构上的根本优势是无指令、无需共享内存。使用共享内存在多个 kernel 之间通信,在顺序通信(FIFO)的情况下是毫无必要的。况且 FPGA 上的 DRAM 一般比 GPU 上的 DRAM 慢很多。&br&&br&因此我们提出了 ClickNP 网络编程框架 [5],&b&使用管道(channel)而非共享内存来在执行单元(element/kernel)间、执行单元和主机软件间进行通信&/b&。需要共享内存的应用,也可以在管道的基础上实现,毕竟 CSP(Communicating Sequential Process)和共享内存理论上是等价的嘛。ClickNP 目前还是在 OpenCL 基础上的一个框架,受到 C 语言描述硬件的局限性(当然 HLS 比 Verilog 的开发效率确实高多了)。理想的硬件描述语言,大概不会是 C 语言吧。&br&&br&&img src=&/v2-f0af9adc093_b.png& data-rawwidth=&1647& data-rawheight=&618& class=&origin_image zh-lightbox-thumb& width=&1647& data-original=&/v2-f0af9adc093_r.png&&&i&ClickNP 使用 channel 在 elements 间通信,来源:[5]&/i&&br&&br&&img src=&/v2-e6ca6cdab83c_b.png& data-rawwidth=&1585& data-rawheight=&359& class=&origin_image zh-lightbox-thumb& width=&1585& data-original=&/v2-e6ca6cdab83c_r.png&&&i&ClickNP 使用 channel 在 FPGA 和 CPU 间通信,来源:[5]&/i&&br&&br&低延迟的流式处理,需要最多的地方就是通信。然而 &b&CPU 由于并行性的限制和操作系统的调度,做通信效率不高,延迟也不稳定&/b&。此外,&b&通信就必然涉及到调度和仲裁&/b&,CPU 由于单核性能的局限和核间通信的低效,调度、仲裁性能受限,硬件则很适合做这种重复工作。因此我的博士研究把 FPGA 定义为通信的「大管家」,不管是服务器跟服务器之间的通信,虚拟机跟虚拟机之间的通信,进程跟进程之间的通信,CPU 跟存储设备之间的通信,都可以用 FPGA 来加速。&br&&br&成也萧何,败也萧何。缺少指令同时是 FPGA 的优势和软肋。每做一点不同的事情,就要占用一定的 FPGA 逻辑资源。如果要做的事情复杂、重复性不强,就会占用大量的逻辑资源,其中的大部分处于闲置状态。这时就不如用冯·诺依曼结构的处理器。数据中心里的很多任务有很强的局部性和重复性:&b&一部分是虚拟化平台需要做的网络和存储,这些都属于通信;另一部分是客户计算任务里的,比如机器学习、加密解密&/b&。我们首先把 FPGA 用于它最擅长的通信,日后也许也会像 AWS 那样把 FPGA 作为计算加速卡租给客户。&br&&br&不管通信还是机器学习、加密解密,算法都是很复杂的,如果试图用 FPGA 完全取代 CPU,势必会带来 FPGA 逻辑资源极大的浪费,也会提高 FPGA 程序的开发成本。更实用的做法是 &b&FPGA 和 CPU 协同工作,局部性和重复性强的归 FPGA,复杂的归 CPU。&/b&&br&&br&当我们用 FPGA 加速了 Bing 搜索、深度学习等越来越多的服务;当网络虚拟化、存储虚拟化等基础组件的数据平面被 FPGA 把持;当 FPGA 组成的「数据中心加速平面」成为网络和服务器之间的天堑……似乎有种感觉,FPGA 将掌控全局,CPU 上的计算任务反而变得碎片化,受 FPGA 的驱使。以往我们是 CPU 为主,把重复的计算任务卸载(offload)到 FPGA 上;以后会不会变成 FPGA 为主,把复杂的计算任务卸载到 CPU 上呢?随着 Xeon + FPGA 的问世,古老的 SoC 会不会在数据中心焕发新生?&br&&br&「跨越内存墙,走向可编程世界」&i&(&/i&&i&Across the memory wall and reach a fully programmable world.&/i&)&br&&br&&b&参考文献:&/b&&br&[1] Large-Scale Reconfigurable Computing in a Microsoft Datacenter &a href=&///?target=https%3A///en-us/research/wp-content/uploads/2014/06/HC26.12.520-Recon-Fabric-Pulnam-Microsoft-Catapult.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/en-us/res&/span&&span class=&invisible&&earch/wp-content/uploads/2014/06/HC26.12.520-Recon-Fabric-Pulnam-Microsoft-Catapult.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&[2] A Reconfigurable Fabric for Accelerating Large-Scale Datacenter Services, ISCA'14 &a href=&///?target=https%3A///en-us/research/wp-content/uploads/2016/02/Catapult_ISCA_2014.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/en-us/res&/span&&span class=&invisible&&earch/wp-content/uploads/2016/02/Catapult_ISCA_2014.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&[3] &a href=&///?target=https%3A///2016/09/microsoft-bets-future-chip-reprogram-fly/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Microsoft Has a Whole New Kind of Computer Chip—and It’ll Change Everything&i class=&icon-external&&&/i&&/a&&br&[4] A Cloud-Scale Acceleration Architecture, MICRO'16 &a href=&///?target=https%3A///en-us/research/wp-content/uploads/2016/10/Cloud-Scale-Acceleration-Architecture.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/en-us/res&/span&&span class=&invisible&&earch/wp-content/uploads/2016/10/Cloud-Scale-Acceleration-Architecture.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&[5] &a href=&///?target=https%3A///en-us/research/publication/clicknp-highly-flexible-high-performance-network-processing-reconfigurable-hardware/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ClickNP: Highly Flexible and High-performance Network Processing with Reconfigurable Hardware - Microsoft Research&i class=&icon-external&&&/i&&/a&&br&[6] Daniel Firestone, SmartNIC: Accelerating Azure's Network with. FPGAs on OCS servers.
利益相关:微软亚洲研究院实习生,研究方向是 FPGA 在数据中心的应用。 问题「用 FPGA 代替 CPU」中,这个「代替」的说法不准确。我们并不是不用 CPU 了,而是用 FPGA 加速适合它的计算任务,其他任务仍然在 CPU 上完成,让 FPGA 和 CPU 协同工作。 本回答…
&p&题主,这是个很好的问题,因为触发器(flip flop)是数字电路很重要的基础,会了这个才能设计大规模电路,我来认真回答下,另补上了流水线的知识
------------------------------------------------------------------------------------------------------------------------
先简短回答问题:用触发器是因为触发器能保存数据,保存电路状态;触发器是在时钟边沿触发,用时钟同步是让整个电路能同步整齐划一的工作;乘法器的计算部分是组合逻辑,不需要触发器,计算后的结果可以用触发器保存起来。&/p&&p&接下来详细解释。
电路系统中是有两种电路,一种是&b&组合逻辑(Combinational Logic)&/b&,其输出只是当前输入的函数,与之前状态无关,无存储功能;另一种是&b&时序逻辑(Sequential Logic )&/b&,能够存储数据供以后使用,如触发器,memory,寄存器(register,由多个触发器组成)。&/p&&p&举个例子,如果你要做累加,计算&/p&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&n&&s&/span&&span class=&err&&=&/span&&span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span&&span class=&n&&i&/span&&span class=&err&&=&/span&&span class=&mi&&0&/span&&span class=&p&&;&/span&&span class=&n&&i&/span&&span class=&o&&&&/span&&span class=&n&&n&/span&&span class=&p&&;&/span&&span class=&n&&i&/span&&span class=&err&&++&/span&&span class=&p&&)&/span&
&span class=&n&&s&/span& &span class=&err&&=&/span& &span class=&n&&s&/span&&span class=&err&&+&/span&&span class=&n&&X&/span&&span class=&p&&{&/span&&span class=&n&&i&/span&&span class=&p&&}&/span&
&span class=&p&&;&/span&
&/code&&/pre&&/div&&p&如果不用触发器,只用组合逻辑,设计为下图。但可以看到这个设计有问题,无法实现结果,因为无法存储中间值,无法控制状态转换。&/p&&img src=&/dee80e3afc4f1f83e48a59f_b.png& data-rawwidth=&606& data-rawheight=&426& class=&origin_image zh-lightbox-thumb& width=&606& data-original=&/dee80e3afc4f1f83e48a59f_r.png&&&br&&p&所以就需要触发器存储中间值,结构如下:&/p&&img src=&/f7efebb21d637eddd9b18c_b.png& data-rawwidth=&628& data-rawheight=&263& class=&origin_image zh-lightbox-thumb& width=&628& data-original=&/f7efebb21d637eddd9b18c_r.png&&&br&&p&所以在实际的电路系统中,是由时序逻辑与组合逻辑共同组成。时序逻辑储存中间值,可分割组合逻辑,让每个组合逻辑变成一小块。流水线就是这样,能提高时钟频率,增加系统吞吐量,让每个模块的利用率达到最大。如下图所示:&/p&&img src=&/0fbb0d77ddf7e5_b.png& data-rawwidth=&611& data-rawheight=&464& class=&origin_image zh-lightbox-thumb& width=&611& data-original=&/0fbb0d77ddf7e5_r.png&&&br&&p&设计触发器时,需要注意触发器的几个时间特性,满足这些特性触发器才能正常工作:
&b&建立时间(T setup time)&/b&:是指在时钟沿到来之前数据从不稳定到稳定所需的时间,如果建立的时间不满足要求那么数据将不能在这个时钟上升沿被稳定的打入触发器。
&b&保持时间(T hold)&/b&:是指触发器的时钟信号上升沿到来以后,数据也必须保持一段时间,数据保持不变以便能够稳定读取。如果保持时间不满足要求那么数据同样也不能被稳定的打入触发器。
&b&数据输出延时(Tco, Clock-to-Output Delay)&/b&:当时钟有效沿变化后,数据从输入端到输出端的最小时间间隔。&/p&&p&为避免竞争冒险,需保证 Thold & Tco +T logic-min ,也就是确保在新的时钟周期,新的 数据不会在小于 Thold 时间内到达寄存器,否则会冲掉之前的数据,从而可能导致Thold 时间不满足。&/p&&p&注意只有建立时间(T setup time)与 数据输出延时(Tco, Clock-to-Output Delay)是在critical path上,是电路delay,如下图:&/p&&img src=&/d9fcd81afb98b97ccbb0_b.png& data-rawwidth=&813& data-rawheight=&588& class=&origin_image zh-lightbox-thumb& width=&813& data-original=&/d9fcd81afb98b97ccbb0_r.png&&&br&&p&最后说下,触发器的内容&b&一定要认真理解&/b&,这个是整个数字电路的基础。&/p&&p&你说到了同步异步,那我说下异步电路吧。异步电路不需要时钟,低功耗,速度快,但需要用大量握手信号来同步电路,设计起来很复杂,目前还是非主流,至少十年内时序同步电路仍会是主流。&/p&&p&-----------------------------------------------流水线分割------------------------------------------------------&/p&&p&PS.有小伙伴说最好扩充下流水线(pipeline)知识,那我补充下吧&/p&&p&pipeline是将组合逻辑进行分割,能让任务以类似并行方式处理,提高系统频率,提高吞吐量(throughput).&/p&&p&举个例子,假设洗衣分为四个步骤,分别在四个设备上进行,其中漂洗机器,烘干机器,在衣架上折叠衣服,把衣服放进柜子里各用30分钟,全过程需两小时。现有四个人去洗衣服,若sequential处理,一个人完成全步骤别人才开始,每人两小时,四个人共用八小时。如下图:&/p&&img src=&/390bc39fba2beed3db663a1_b.png& data-rawwidth=&884& data-rawheight=&655& class=&origin_image zh-lightbox-thumb& width=&884& data-original=&/390bc39fba2beed3db663a1_r.png&&&p&但如果利用pipeline式的流水处理,当某人完成某步骤,其所用的设备就空闲了,后面的人就开始使用,四个人洗衣服只用3.5小时就能完成。如下图:&/p&&img src=&/b8c60f021eea8daa7a26b_b.png& data-rawwidth=&899& data-rawheight=&658& class=&origin_image zh-lightbox-thumb& width=&899& data-original=&/b8c60f021eea8daa7a26b_r.png&&&br&&p&注意,pipeline只是提高系统的吞吐量,不能改善单个任务的latency。在实际电路中是在组合逻辑中插入register,分割组合逻辑,实现pipeline,而register读写也需要时间,所以单个任务的执行时间反而会增长。另外在分割组合逻辑时,使分割后的每段处理时间尽量相同,因为系统时钟是由最慢的那段决定的。如下图:&/p&&img src=&/702e20fe_b.png& data-rawwidth=&454& data-rawheight=&446& class=&origin_image zh-lightbox-thumb& width=&454& data-original=&/702e20fe_r.png&&&br&&p&总结:&/p&&img src=&/44bb292a62_b.png& data-rawwidth=&847& data-rawheight=&593& class=&origin_image zh-lightbox-thumb& width=&847& data-original=&/44bb292a62_r.png&&&br&&p&一个经典的五级流水线处理器如下图:&/p&&img src=&/1e7d95cf5d863dbe435fe_b.png& data-rawwidth=&915& data-rawheight=&654& class=&origin_image zh-lightbox-thumb& width=&915& data-original=&/1e7d95cf5d863dbe435fe_r.png&&&br&&p&------------------------------------------------------------------------------------------------------------------------
PS. 得到大家这么多赞,那补上另一个关于流水线中会出现的&b&hazards&/b&的成因与解决方法的回答&a href=&/question//answer/& class=&internal&&是否有既用到 状态机 又用到 流水线 的module? - young cc 的回答&/a&&/p&&br&&p&&a href=&///?target=http%3A//www-inst.eecs.berkeley.edu/%7Ecs61c/sp15/lec/09/2015Sp-CS61C-L09-kavs-SDS-1up.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&www-inst.eecs.berkeley.edu&/span&&span class=&invisible&&/~cs61c/sp15/lec/09/2015Sp-CS61C-L09-kavs-SDS-1up.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//www-inst.eecs.berkeley.edu/%7Ecs61c/sp15/lec/13/2015Sp-CS61C-L13-kavs-Pipelining-1up.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&www-inst.eecs.berkeley.edu&/span&&span class=&invisible&&/~cs61c/sp15/lec/13/2015Sp-CS61C-L13-kavs-Pipelining-1up.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&
题主,这是个很好的问题,因为触发器(flip flop)是数字电路很重要的基础,会了这个才能设计大规模电路,我来认真回答下,另补上了流水线的知识
--------------------------------------------------------------------------------------------------------…
人生第一次啊……竟然上了100赞……好多知乎上一直关注的学长和前辈们还有大V都给点了赞我好受鼓舞啊:-D谢谢大家&br&&br&其实如果是搞FPGA结构或者CAD的话,这些都是基础了,本人也只是个大四狗还在学习中。。。&br&&br&看到点赞的基本都是搞IC的,你们都是我前辈,请指教:-D 以后我一定好好学习努力答题233 :-D&br&————————————————&br&为什么实现同样的电路,asic频率总是(几乎是一定)比FPGA要高?简单来看这是FPGA在要求“可重构”的特性时对速度做出的妥协。FPGA为了满足可重构的特性,被设计成了一个岛状的逻辑块矩阵电路,每个逻辑块里又有很多个相同的子逻辑块,每个子逻辑块中有要实现任意电路的各种元素,比如LUT(逻辑查找表),用于组合逻辑的构成,和FF(flip-flop,即触发器)用于时序电路的构成。逻辑块之间是布线管道,其中有各种固定长短的线(segment)和连接这些线的开关们(switch)。一块Asic电路要实现一个逻辑电路,只需按照你的电路设计图纸按原样把电路刻在芯片上,里面加法器就是你在数电课本中看到的加法器,乘法器就是你所熟知的乘法器,导线也是你熟悉的不能再熟悉的,没有中断的一根金属线而已。&br&&br&而FPGA呢?加法器可能已经不是你知道的那个加法器了(当然高端FPGA都有加法器的hard logic这个另算),它已经被FPGA综合工具变成了一堆LUTs,没错,就是前面所说的这些逻辑元素。乘法器同理。导线呢?不是一根不间断的直导线了,它首先要从一个逻辑块出发,先经过一个开关,进入布线管道,然后前面遇到了一个Switch Box(假设是Altera家的板子),也就是十字路口,经过十字路口中的开关跳转,它可能左拐了,然后又遇到一个SB,……几经周折,终于到了目的逻辑块的门口,又要经过一个开关,进入目的逻辑块和里面的逻辑元素相连,就这样构成一个可能再普通不过的加法器、乘法器,等等。&br&&br&所以FPGA为什么频率肯定没有Asic高你现在一定清楚了。第一,实现同样的功能,FPGA需要更大的面积,在更大的面积的情况下,即使用纯导线,其导线总长度(或严格一点,critical path的导线长度)也要比asic的电路长吧?第二,其实也是最重要的一点,就是布线结构(routing architecture)非常复杂,一条导线从a到b,一般总要经过几个开关,而这些开关都是有延时的,这个延时非常大,是FPGA频率不得提高的主要原因。&br&&br&&img src=&/1ebbaf79a74fa59ac3c55_b.png& data-rawwidth=&1630& data-rawheight=&1612& class=&origin_image zh-lightbox-thumb& width=&1630& data-original=&/1ebbaf79a74fa59ac3c55_r.png&&&br&上图中粉色线为一整条等电平的“导线”,又臭又长。asic看到了肯定会嫌弃有没有啊……&br&&br&&img src=&/ab476eaaded53c_b.png& data-rawwidth=&1654& data-rawheight=&1578& class=&origin_image zh-lightbox-thumb& width=&1654& data-original=&/ab476eaaded53c_r.png&&上图绿色方块是一个SB!粉色线还是刚刚那条“导线”。注意是“一条”导线哦。现在知道FPGA中导线们的十字路口有多复杂了吗?&br&&br&(工具用的是VPR [2],学术界的开放综合工具。商业工具看不到这么详细的routing arch)&br&&br&实际上,题主这个问题在06年已经被多伦多大学的课题组调研过了[1],他们的研究表明,对于一个只有组合和时序逻辑(没有memory等)的电路来说,平均下来,在FPGA上实现需要40倍于asic电路的面积,3~4倍的关键路径延时,和12倍的功耗。而这里面其实吧,大多数都是布线结构的锅。面积上,布线结构一般要占FPGA总面积的60~70%左右,延时上,这个数字只会更高。所以FPGA的布线结构和布局布线算法是一个FPGA领域中很重要的一个研究方向。&br&&br&要使FPGA做到完全和asic速度一样快应该是不可能的,这是由它的可重构特性直接决定的。但折中的办法不是没有,比如我前面提到hard logic,就是把一些通常使用频次很高的逻辑电路直接以asic的方式嵌入到FPGA里面,比如加法器乘法器等等,一旦要用到它们,也就不用再像以前那样用好多个逻辑块来造它了,这样就减小了面积、提高了速度、降低了功耗。现在高端一点的FPGA里面不仅有这些加法乘法器的小玩意,还有存储器,DSP,微处理器等等。它们的目的都是相同的,就是为了在保证可重构特性的情况下,尽量拉近与asic电路的距离,提高性能。&br&&br&为了提高速度,还有很多方法,比如用流水线对逻辑做分段等等,这里就不多说啦。题主还有什么问题还都可以问我~&br&&br&Ref:&br&[1]. I. Kuon and J. Rose, “Measuring the gap between FPGAs and ASICs,” in
Proceedings of the Internation Symposium on Field Programmable Gate Arrays (FPGA ’06), Monterey,
California, USA, ACM Press, New York, NY, Feb. 22–24, 2006, pp. 21–30.&br&[2]. J. Rose, J. Luu, C. Yu, O. Densmore, J. Goeders,
A. Somerville, K. Kent, P. Jamieson, and J. Anderson.
The VTR Project: Architecture and CAD for FPGAs
from Verilog to Routing. In ACM/SIGDA Int.
Symposium on Field-Programmable Gate Arrays,
pages 77–86, 2012.&br&[3]. V. Betz, J. Rose, A. Marquardt, “Architecture & CAD For Deep-
Submicron FPGAs”, Kluwer Academic Publishers, 1999.
人生第一次啊……竟然上了100赞……好多知乎上一直关注的学长和前辈们还有大V都给点了赞我好受鼓舞啊:-D谢谢大家 其实如果是搞FPGA结构或者CAD的话,这些都是基础了,本人也只是个大四狗还在学习中。。。 看到点赞的基本都是搞IC的,你们都是我前辈,请指教…
&a href=&///?target=http%3A///iCE40Ultra& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/iCE40Ul&/span&&span class=&invisible&&tra&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&从Lattice官网可以看到,这颗FPGA只有3000个LUT,10KB-RAM,管脚更是少得可怜。大家都知道FPGA不应该用于量产品,尤其是iphone这种每月上千万的爆款,那么苹果在干什么?&br&&br&这类事我恰恰以前常干,而且用的恰恰就是Lattice,因为他家FPGA最小最便宜。这里有两种可能:&br&&br&1,量产前发现的一处小bug,修改芯片会影响上市时间,所以紧急在PCB上加一块FPGA。如果bug太大,那FPGA也修不回来。估计2个月后芯片的修复版就到位了,届时可能就看不到这颗FPGA了。&br&&br&2,临时要求增加一个feature以应对供应链上的变化,比如接纳了额外的零件供货商或者采用更新/更便宜的零件。但是芯片设计已经完成,只能通过FPGA来转接;或者接口方案暂时还无法确定,没法集成到SOC里。不同的iphone会有不同的零件供货商,所以这颗FPGA不会一直在那儿,而且最多也就呆2个月,原因同上。当然最终也有可能放弃集成,改FPGA为独立ASIC,就像早期的Sensor Hub。&br&&br&——————————————————————&br&补充&br&很多人觉得为了修改bug而临时在PCB上增加FPGA,同样是大改动大风险。但很多时候,发现bug就要考虑2种风险:1,修错了;2,修对了但引入了新的bug。&br&无论是需求变更还是bug修复,这个改动会给iPhone7带来巨大的不确定性,所以苹果采用2步走的策略,同时开发SOC和FPGA,这样把风险降到最低。第一批量产就取决于哪个方案更稳定可靠,但最终的量产还是需要兼顾成本和稳定性的。&br&至于某些认为苹果绝不会有硬件bug的情怀党们,想想死亡之握吧。
从Lattice官网可以看到,这颗FPGA只有3000个LUT,10KB-RAM,管脚更是少得可怜。大家都知道FPGA不应该用于量产品,尤其是iphone这种每月上千万的爆款,那么苹果在干什么? 这类事我恰恰以前常干,而且用的恰恰就是Lattice,因为他家FPG…
&p&1、Verilog HDL描述可综合电路Verilog HDL语言是对已知硬件电路的文本描述。所以编写前:&/p&&ul&&li&&b&对所需实现的硬件电路“胸有成竹”;&/b&&/li&&li&&b&牢记可综合Verilog HDL与电路结构一一对应的关系;&/b&&/li&&li&&b&确认电路指标是什么:性能?面积?&/b&&/li&&li&&b&硬件思维方式,代码不再是一行行的代码而是一块一块的硬件模块;&/b&&/li&&/ul&&p&达到以上几点,就可以写出行云流水般的高质量代码。关于代码与硬件电路的对应关系,参见如下图片,引用自Synopsys官方文档和几本参考书:
&/p&&img src=&/v2-a73aa1bd64_b.png& data-rawwidth=&919& data-rawheight=&548& class=&origin_image zh-lightbox-thumb& width=&919& data-original=&/v2-a73aa1bd64_r.png&&&br&&img src=&/v2-3e5d3d79cc19a34b7fef338_b.jpg& data-rawwidth=&883& data-rawheight=&577& class=&origin_image zh-lightbox-thumb& width=&883& data-original=&/v2-3e5d3d79cc19a34b7fef338_r.jpg&&&br&&img src=&/v2-47d255ee08f7084968deb3aff6aa87f2_b.jpg& data-rawwidth=&893& data-rawheight=&628& class=&origin_image zh-lightbox-thumb& width=&893& data-original=&/v2-47d255ee08f7084968deb3aff6aa87f2_r.jpg&&&br&&img src=&/v2-3f1a142c1cde11e37d5ef361c64a4344_b.jpg& data-rawwidth=&909& data-rawheight=&626& class=&origin_image zh-lightbox-thumb& width=&909& data-original=&/v2-3f1a142c1cde11e37d5ef361c64a4344_r.jpg&&&br&&img src=&/v2-825cd158b5c5a3e4db391_b.jpg& data-rawwidth=&913& data-rawheight=&652& class=&origin_image zh-lightbox-thumb& width=&913& data-original=&/v2-825cd158b5c5a3e4db391_r.jpg&&&br&&img src=&/v2-ecdd17d083d84d6ca5068_b.jpg& data-rawwidth=&918& data-rawheight=&613& class=&origin_image zh-lightbox-thumb& width=&918& data-original=&/v2-ecdd17d083d84d6ca5068_r.jpg&&&br&&img src=&/v2-c06e3ba2ed5bd87fda02e4b9_b.jpg& data-rawwidth=&892& data-rawheight=&585& class=&origin_image zh-lightbox-thumb& width=&892& data-original=&/v2-c06e3ba2ed5bd87fda02e4b9_r.jpg&&&br&&img src=&/v2-ea6aca2fdb_b.jpg& data-rawwidth=&739& data-rawheight=&615& class=&origin_image zh-lightbox-thumb& width=&739& data-original=&/v2-ea6aca2fdb_r.jpg&&&br&&p&2、自动化生成代码如果一定要有奇淫技巧的话,那么&b&代码自动化生成技术&/b&就一定可以配得上这个称号。&/p&&p&近十年来,数字集成电路规模和复杂度飞速提高。这给数字集成电路工程师带来了不仅是脑力上的劳动的增加,更多是体力重复性工作的增多。传统的手工代码的编写存在很多弊端。&/p&&p&首先对于模块的代码工程师,要面对许多设计文件。而这些文件之间可能相互不一致,给代码的编写带来了很多的困扰。&/p&&p&其次,代码工程师需要将这些文件中的很多设计信息体现在代码中,其中一些信息是重复性的誊写。这不仅带来了很多枯燥复杂的工作量而且人工参与过多也容易引入很多粗心带来的错误。&/p&&p&再次,由于各个模块连接信号之多导致信号文件的手写工作量很大。每个信号文件小则几千行大则上万行信息。而且一旦有信号连接的变动需要相应修改多个模块的信号文件。&/p&&p&最后,如果设计文件改动相应的设计文件很容易出现哪几处忘记改动的问题。&/p&&p&而Perl脚本语言又有着强大的处理文本的能力。将脚本语言应用于数字电路设计中,作为设计文档和EDA工具的黏合剂,能够大大增加设计的速度。&/p&&p&具体方法为:使用脚本语言从设计文档中提取有用的信息来生成想要的Verilog HDL代码,从而大大减少了IC设计者的工作量,并提高了代码的质量。其好处有:&/p&&p&&b&(1)很好的设计一致性:&/b&保证了设计概念一旦变动即设计文档稍加修改,对应的Verilog HDL代码就会相应的改变,不需要工程师手动改变代码。&/p&&p&&b&(2)兼容性强:&/b&该自动生成代码工具中设置了一个配置文件,供设计工程师的配置修改。对于不同的项目,通过修改配置该文件可以直接是代码相应变化,有一定的灵活性。此外,该自动生成代码工具已经应用于两个以上项目中,实践证明有很好的兼容性。&/p&&p&&b&(3)代码维护方便:&/b&对于设计代码的更新或升级,只需要重新运行下该工具即可,不需要一点点该写代码。&/p&&p&&b&(4)使用简单:&/b&将很多脚本集成在一起,使用工具时只需要运行一条命令即可。 &/p&&br&&p&本文将举一个Perl语言在代码自动生成中的应用实例,下图为一SoC芯片中全芯片的时钟控制电路框图:
&/p&&img src=&/v2-34e0d52afd843a07293e_b.png& data-rawwidth=&743& data-rawheight=&473& class=&origin_image zh-lightbox-thumb& width=&743& data-original=&/v2-34e0d52afd843a07293e_r.png&&&p&时钟控制模块实现配置PLL参数、选择输出时钟源、时钟分频、时钟门控、bank切换、输出时钟等功能。3G、4G是系统通讯单元,向时钟控制单元申请时钟。PLLs是时钟源,是时钟控制单元的输入。时钟控制单元有七大主要模块,分别为时钟源控制模块、bank切换模块、分频模块、时钟门控模块、多路选择器模块、寄存器、3G4G时钟握手模块。时钟源控制模块控制时钟源的大小、开关。bank切换模块使时钟控制单元能正常工作在不同的电压下。&/p&&p&时钟控制单元的的工作机理如下:首先,外部模块向时钟控制单元请求时钟,并修改并写寄存器状态;时钟源控制单元根据寄存器中的内容配置时钟源Plls,并提供了所有的时钟源。然后,分频器完成这些时钟源预分频的操作,并将其作为多路选择器的时钟源。而多路选择器则从输入的时钟源中选择输出主时钟。主时钟通过分频模块产生所有的分频使能信号,这个过程中,需根据寄存器所配置的分频数来输出不同的频率的时钟。同时,根据系统的实时需求,通过由SPCU控制的bank选择器完成门控时钟的实现,降低系统的功耗。&/p&&p&&b&以上是时钟控制模块的功能分析,那么如何通过代码自动生成技术来实现呢?&/b&&/p&&p&(1)首先,我们把这些模块梳理下,形成一个自顶向下的层次结构,如下图。如图中所示,顶层模块完成对底层模块的连接,底层模块实现时钟控制单元的功能。&/p&&br&&img src=&/v2-05263fcdcf08da11e8f842e9d415887d_b.png& data-rawwidth=&1177& data-rawheight=&686& class=&origin_image zh-lightbox-thumb& width=&1177& data-original=&/v2-05263fcdcf08da11e8f842e9d415887d_r.png&&&br&&p&针对代码自动生成问题,对于顶层模块来说,承担的功能是自动地将底层数十个模块连接起来。对于底层模块来说,需要根据不同的功能定制需求,来自动化地生成所有功能性的代码,然后被顶层调用和连接。这样的话,就存在两个问题:[1]自动生成顶层模块?[2]自动生成底层模块?&/p&&p&&b&(2)顶层模块:&/b&通常来说,对于一个复杂的SoC芯片,会有万数量级的信号需要进行匹配和连接。而能够自动生成的信号文件中的信号连接有两个特点:一是信号命令规律性强二是信号的连接关系可以从设计文件中体现。满足了这两点,便可以实现信号文件的自动化。&b&(3)底层模块&/b&此处即可体现Perl脚本强大的数据处理功能,针对该问题,将脚本划分为三类:提取脚本、生成脚本和集成脚本三种。提取脚本用来从输入文件中提取有用的设计信息到存储单元中;生成脚本从存储单元获得有用信息来生成各个功能模块的代码;集成脚本将所有的脚本集成在一个脚本里,方便统一化使用。以下是代码生成的脚本流程图:
&/p&&img src=&/v2-553bbc37d9f79d01db495_b.png& data-rawwidth=&968& data-rawheight=&578& class=&origin_image zh-lightbox-thumb& width=&968& data-original=&/v2-553bbc37d9f79d01db495_r.png&&&br&&p&如图所示,输入的文件都是excel和文本形式,Perl脚本首先读取技术文档,从中解析出时钟模块所需的连接、频率、时钟域等信息,基于此信息建立一个数据库。然后,根据实际芯片的具体需求,即配置文件,生成相应的自动化控制模式和需求。最终,依据配置文件和数据库,完成所有所需verilog代码的生成。需要注意的是,并不是所有的代码都可以自动生成,有些结构特殊的电路,只能通过手工编写来完成。所以,自动编写通常完成较为规整的、有规律性的代码,手工书写作为补充。这样即可保证得到高质量的代码。
&/p&&p&&b&总结:&/b&&/p&&p&&b&perl语言强大的正则和hash能力成就了代码自动生成技术,在这个领域,其他脚本语言黯然失色。但是,这还远远不够智能。&/b&&/p&&p&&b&首先,短期内,如何使得代码生成技术更加友好,更方便移植和管理?如何更加彻底地剥离人工干预的工作,脚本自动决定哪些电路需要自动生成的代码?&/b&&/p&&p&&b&其次,在更远的未来,是否能够抛弃掉太纠结于细节的verilog语言?高级语言综合技术、AI自动生成代码和电路是否是更好的选择。&/b&&/p&&p&--------------------------给自己live做个广告---------------------------&/p&&p&---我们正在进行中的live&/p&&p&关于两次脚本的live,我们将提供一些练习题,并在在每次live结束后的两周内,为大家提供实时解答和讨论。&/p&&p&1、从零学习 TCL 脚本 :&a href=&/lives/400576& class=&internal&&知乎 Live - 全新的实时问答&/a&&/p&&p&2、TCL 脚本:数字 IC 设计应用篇:&a href=&/lives/128704& class=&internal&&知乎 Live - 全新的实时问答&/a&&/p&&p&---我们的专栏&/p&&p&观芯志:&a href=&/c_& class=&internal&&知乎专栏&/a&&/p&&p&---往期live&/p&&p&半导体先进工艺的器件结构和挑战 : &a href=&/lives/019456& class=&internal&&知乎 Live - 全新的实时问答&/a&&/p&&p&你不了解的微电子行业
: &a href=&/lives/772288& class=&internal&&知乎 Live - 全新的实时问答&/a&&/p&&p&初学者在数字 IC 设计学习中易进入的误区 : &a href=&/lives/066368& class=&internal&&知乎 Live - 全新的实时问答&/a&&/p&&p&作者:Forever snow
链接:&a href=&/p/& class=&internal&&&span class=&invisible&&https://&/span&&span class=&visible&&/p/25&/span&&span class=&invisible&&205510&/span&&span class=&ellipsis&&&/span&&/a&
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 &/p&
1、Verilog HDL描述可综合电路Verilog HDL语言是对已知硬件电路的文本描述。所以编写前:对所需实现的硬件电路“胸有成竹”;牢记可综合Verilog HDL与电路结构一一对应的关系;确认电路指标是什么:性能?面积?硬件思维方式,代码不再是一行行的代码而是一…
有些人很菜,也过来答,简直是误导。有些人水平太高,答的很好但是人家依旧听不懂,得到赞确很少。学习FPGA,在不同层次的人明显有不同的答案。先说一句,说不要开发版的都是菜鸟级选手。&br&我把FPGA层次划分为,鸡蛋级别,菜鸟级别,老鸟级别,高手级别四类。题主是鸡蛋级别的吧!啥也不会。那些得赞高的不少都是菜鸟级别的选手。当然,我现在告诉你的如何成为一个菜鸟。当然以后有空我也会写从菜鸟变成老鸟的方法。&br&1)熟悉语法,其实你不需要什么都会,但是要记住几个经典的时序,逻辑电路的描述方式。&br&2)熟悉三个经典电路描述并仿真。仿真其实不是很重要,我开始学习压根没学那个玩意儿,因为要是只做接口那玩意儿没啥用。直接用ChipSchop抓抓数据更快。仿真是给做算法,工程相对较大的人用的。三个经典电路分别是,分频器,计数器(可做一个时钟),序列检测器。&br&这样你就基本熟悉了开发环境了。&br&3)上板卡跑一个灯,熟悉一个板卡上时钟资源使用,硬件的使用原理。&br&4)知道了FPGA学习主要不在于编程!压根没有编程这回事!!Verilog是硬件描述语言!描述!!写代码时脑子里必须有电路图!!知道FPGA主要学的是硬件和算法!!软件最多能占10%就不错了!!&br&只要你能完成这上面的东西,恭喜你进入菜鸟行列,可以在别人设计好FPGA方案的条件下完成一些模块的设计了。其实华为招聘员工,很多人FPGA水平一开始都差不多这么菜。&br&先写一下老鸟需要会什么,以后再答怎么做到。&br&1)FPGA逻辑资源,特别是时钟资源要非常熟悉。&br&2)做算法的必须熟悉sysgen的使用。说的容易了,sysgen画画图也没那么容易哦,你要熟悉使用各种滤波器,理论知识要求起点就不小。&br&3)充分理解FPGA从上而下的设计原则,能够编写中等程度的FPGA详细设计方案。&br&4)熟悉时序优化,时序收敛,区域约束等知识。并且能运用到编程之中,解决菜鸟们解决不了的“不科学”的问题。说白了就是会使用planhead,以及ISE中那些你还没接触过的功能。一般菜鸟们ISE都只会编程,默认的编译一下,然后下载,ChipSchop抓抓数看看。&br&5)能够熟悉FPGA常用的接口,不求都会编程,但是要知道他们功能是什么。比如ADC,DAC,串口,EMIF等等。并且熟悉DSP等FPGA周边常用芯片工作原理。&br&6)熟悉硬件设计,至少要知道Bank上IO规划怎么好,全局时钟,区域时钟大致怎么规划等等。&br&7)信号源,示波器,频谱仪都要熟悉使用吧!&br&等这些都熟悉了,差不多是老鸟了。&br&要成为高手,你没有十来个FPGA程序设计经验,解决过十来个中大项目核心问题,没有做过大系统还是停留在小板卡,都是不行的。&br&~~~~~~分割线~~~~~&br&发现入门没那么容易。我觉得入门必须知道FPGA是做什么的,能做什么?和ARM,DSP,X86,GPU对比有啥优势?&br&我下面简单说说,FPGA现在有三个方面:&br&1)通信高速接口设计。一般速率太高了,需要用FPGA把高速数字信号分开,然后使信号容易处理,传输,存储。3&br&2)数字信号处理。包括图像处理,雷达信号处理,医学信号处理等。优势是实时性好,用面积换速度,比CPU快的多。&br&3)SOPC。但是个人觉得这个方面不太主流。&br&基本上60%以上应用于做通信接口,也是FPGA最适合做,也是优势最大的方面。30%做信号处理。其实很多情况做信号处理也是由于一个系统中已经需要一个做接口的FPGA,不想多花钱、费事在买个DSP而已!&br&以上各个芯片各有啥优势请自己百度。&br&//再次补充说明&br&听到有人批评,其实我还是蛮高兴的。有人说我水平是一个较高的菜鸟。确实严格来讲没有错。仿真一直是我忽略的一个环节。我在这里承认自己说仿真不重要是不对的。仿真一般可以提高一个优秀的FPGA工程师的工作效率,一些低级的错误可以一下子反应出来。特别是不熟悉FPGA语法的人需要仿真。毕竟一个较大的FPGA程序需要编译几个小时。但是请大家合理的看待仿真这件事,菜鸟又要学编程又要学仿真。关键仿真正确后实际还不一定对!这样会打击信心。在有条件的基础上可以直接抓取信号看看波形,这样比较准确。一下子可以让你缩短做一个简单工程的周期。菜鸟级别的工程一般直接写出来也不怎么会错的。所以在上面我说了仿真对于菜鸟不是很重要。各自还是看每个人处在的阶段看问题吧!&br&一般从时间上来说一般1-2年能入门,就是我说的菜鸟水平没有达到老鸟级别。3-5年算是一个老鸟级别吧!能不能到高手看个人造化。我学习FPGA目前是两年左右,做过工程量大的项目2个,小项目记不清了,级别在菜鸟和老鸟之间。熟悉FPGA各个方面的工作,但不熟练。欢迎交流和高手们批评指正。
有些人很菜,也过来答,简直是误导。有些人水平太高,答的很好但是人家依旧听不懂,得到赞确很少。学习FPGA,在不同层次的人明显有不同的答案。先说一句,说不要开发版的都是菜鸟级选手。 我把FPGA层次划分为,鸡蛋级别,菜鸟级别,老鸟级别,高手级别四类…
几乎所有优秀的电子工程师都是在工作之后练成的。&/p&&p&
在学校里,你学不到怎么做出稳定的量产几十万台的产品,也不舍得用十几千伏的静电枪打你的板子,也学不到大型团队的规范开发流程。一个优秀的电子工程师是时间与金钱堆出来的。&/p&&p&
一个经验丰富的工程师,把诺基亚的硬件开发指导文档全学会,就是顶尖高手。&/p&&p&
但是学校里学到的很多东西,会影响一个工程师成长的速度。一个门槛迈过去,就是策马奔腾;迈不过去,就是老牛慢车。这个门槛常常是理论基础。&/p&&p&
我想说说理论基础对工程师的重要性。它不是移植linux这种查资料就会的事,不是操作矢网这种几个小时就学会的事,也不是用quartus这种几天就学会的事,也不是matlab编程这种几个小时就入门的事。&/p&&p&
理论是你学的时候似乎明白了,实践中遇到之后觉得还是困惑,于是拿出书来再看,似乎有所得,觉得自己已经是高手。若干年后再遇到问题,再找出书来看,才觉得原来刚刚明白。&/p&&p&
如果一开始就没打好基础,遇到问题根本无从下手,就会觉得电子好神奇,不可控。工作几年之后,发现要看懂一个公式还要看N多书作铺垫,于是放弃,于是沦为一般的电子工程师。&/p&&br&&br&&p&
理论就像一个廉价的妓女,她又丑又老,但是能解决你的问题。她总在你干活的时候无情的嘲笑你,但是你还是一次又一次的去找她,因为这是你唯一能消费得起的。&/p&&p&
去学习吧。&/p&
几乎所有优秀的电子工程师都是在工作之后练成的。 在学校里,你学不到怎么做出稳定的量产几十万台的产品,也不舍得用十几千伏的静电枪打你的板子,也学不到大型团队的规范开发流程。一个优秀的电子工程师是时间与金钱堆出来的。 一个经验丰富的工程师,把诺…
与Lattice曾负责过此款系列芯片的前员工聊了聊,了解了下使用情况,更新一下:&br&1. 此款芯片价格非常便宜,只有几美分,不是之前说的几十美分,可以说相当便宜;功耗也相当低,具体多少要看设计,没有具体数据。&br&&br&2. 之前在Samsung手机上用过,这个很多人提过。有一项作用就是针对不同的市场区域定制不同的功能,而PCB板保持同一个版本即可。比如在中国的版本无外露天线、而在韩国的有,在美国地区采用高通CPU,在韩国地区用自家CPU,通过这款FPGA的配置实现功能的差异化,而PCB板单一化不仅减少研发、生产、维护成本,也使产品稳定性大大增强。&br&&br&3. 主要可当sensor Hub使用,很多传感器如计步器、运动传感器、光线传感器等,只需要FPGA去唤醒与管理它们,比CPU直接管理它们要更省功耗;另外此芯片可直接驱动大电流LED,无需额外buffer,如拍摄LED、背光LED等。&br&&br&4. 很多客户直接拿它当ASIC使用,客户对Lattice提需求实现怎样的功能,Lattice AE实现后发送给客户,客户直接使用即可,无需额外再养一个FPGA team。里面的编程逻辑也相当简单,很多接口电路已经固化,直接使用内部wishbone总线读写寄存器即可配置成相应的功能。&br&&br&以前的回答还放在下面:&br&---------------------------------------&br&大家的疑问是:FPGA价格又贵,功耗又大,为什么要在出货量极大的产品上使用而不用ASIC呢?另外是,用它可以做什么?是临时方案吗?&br&&br&先把这款芯片的规格参数贴上来&br&&img src=&/a774fa2f42ad3d50caa9829_b.jpg& data-rawwidth=&893& data-rawheight=&667& class=&origin_image zh-lightbox-thumb& width=&893& data-original=&/a774fa2f42ad3d50caa9829_r.jpg&&&br&该系列芯片的datasheet有兴趣从这里下载:&a href=&///?target=http%3A///%7E/media/LatticeSemi/Documents/DataSheets/iCE/iCE40UltraFamilyDataSheet.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/~/media&/span&&span class=&invisible&&/LatticeSemi/Documents/DataSheets/iCE/iCE40UltraFamilyDataSheet.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&blockquote&iCE40 Ultra family is an ultra-low power FPGA and sensor manager designed for ultra-low power mobile applications, such as smartphones, tablets and hand-held devices. The iCE40 Ultra family includes integrated SPI and I2C blocks to interface with virtually all mobile sensors and application processors. The iCE40 Ultra family also features&br&two on-chip oscillators, 10 kHz and 48 MHz. The LFOSC (10 kHz) is ideal for low power function in always-on applications, while HFOSC (48 MHz) can be used for awaken activities.&/blockquote&这是款面向移动应用的超低功耗和传感器管理的FPGA,比如移动电话、平板电脑和其它手持设备。集成了两个SPI和两个I2C接口,同时自带两个片上晶振,用于一直工作的应用,如唤醒活动。&br&&br&从diagram上来看,这款FPGA提供了SPI和I2C接口,可作为master控制其它传感器及slave被CPU控制;RGB drv可用于控制三色屏幕背光LED,IR drv可用于控制红外线LED;NVCM是片上非易失性存储器,可代替部分flash功能;额外的普通可编程PIN脚;内含DSP资源可用于数据处理,以及一些RAM和CLB资源,可用于实现逻辑功能。&br&&img src=&/f0c48dc4ac24698eab9fa80b8cd83bf1_b.jpg& data-rawwidth=&1300& data-rawheight=&848& class=&origin_image zh-lightbox-thumb& width=&1300& data-original=&/f0c48dc4ac24698eab9fa80b8cd83bf1_r.jpg&&&br&&br&再结合iPhone7的使用场景,这款FPGA的用途太多了:&br&&br&低频晶振可用于外部环境的检测,一直都在后台运行,比如按了下电容Home键唤醒响应、屏幕变暗了点一下变亮、手机跌落保护、进水检测告警等。&br&&br&对多个传感器进行预处理然后再送到CPU,比如FPGA对传感器A、B、C持续采一段时间的数据,三段数据在内部处理好后放在片内RAM里,CPU 10ms来取一次(使用到SPI、I2C、DSP、RAM、CLB等);而换在以前每个传感器数据必须先被CPU读取由CPU处理。&br&&br&代替CPU控制震动马达,检测到相关行为就直接驱动马达,无需CPU再给命令,可让响应更加及时,同时可支持多种震动模式与强度。&br&&br&直接驱动背光LED和红外LED,可减少额外buffer使用,同时内部根据传感器数据和应用场景的不同做不同的处理,比如横屏、在使用中环境光线突然变强需要把屏幕亮度调高,CPU就不用反复发指令控制了。&br&&br&普通IO PIN脚还可以做一些glue logic使用,如lightning接口信号检测,DSP、CLB与RAM的作用不用多说。&br&&br&因为iPhone7继续使用USB2.0和Lightning接口,无法直接连接到电脑USB typeC接口,就算连接到typeC转USB3.0/2.0上的Hub上,走的仍然是2.0的通道,所以与USB typeC接口没关系。&br&&br&此FPGA本身设计就是面向低能耗应用,且面积比较小,功耗不大,而因它存在而CPU减少访问外部器件的频率带来的能耗降低远远大于了本身的消耗,所以整体能耗是降低了的。&br&&br&另外此芯片的市面成本价约为1.2$,Apple大批量采购的话可降得更低,比如50美分以下,对于iPhone的整体成本(有数据说约282$)而言显得很小。&br&&br&至于为什么不用ASIC?并没少用ASIC啊,一堆WIFI、蓝牙、传感器都是ASIC,使用FPGA的作用并不是在功能上替代ASIC,而是给CPU分工作量,它做的事情本来是CPU做的,CPU和FPGA都是可编程的,可以把FPGA看成是CPU的延伸,而不是ASIC的替代品。&br&&br&当然在该设计相对固定化将之ASIC化也是种方式,就要再评估了,看收益、风险、时间、投入等多种因素,会不会做我们不是Apple,不好说;但对于iPhone7来说,应该不会临时再换方案了。
与Lattice曾负责过此款系列芯片的前员工聊了聊,了解了下使用情况,更新一下: 1. 此款芯片价格非常便宜,只有几美分,不是之前说的几十美分,可以说相当便宜;功耗也相当低,具体多少要看设计,没有具体数据。 2. 之前在Samsung手机上用过,这个很多人提过…
自己的领域答一下,微软的这篇论文前两天我刚刚看过。&br&这条新闻是真的。这个项目已经做出来了,并且这篇论文将会出现在2014年的ISCA上。ISCA是计算机架构领域的顶级会议。文章题目叫 “A Reconfigurable Fabric for Accelerating Large-Scale Datacenter Services”。现在ISCA还没开,所以论文在ACM上搜不到,过几周应该能搜到了。&br&通常情况下,用FPGA实现的算法速度可以比CPU快100倍。所以文章里说FPGA处理Bing算法的速度比CPU快40倍也是可信的。最后整个系统级的性能是:在保持latency不变的情况下,吞吐量增加了一倍,在保持吞吐量不变的情况下,latency减小了。整个系统的功耗没有明显增加。&br&技术难度在于软件硬件接口的设计和整合。FPGA的开发代价是远高于CPU的,所以架构要有一定的灵活,要可以和软件系统简单可靠地接合。另一个难点是系统的可靠性。1600多块FPGA链接在一起,是很容易出现错误(errors, failing hardware, reboots, software updating)。所以如何及时探测错误,如何处理错误,如何保持整个系统的稳定性需要做很多的工作。&br&算法改造并不是难点。因为考虑到和现有系统的匹配,他们完完全全就是照搬的Bing的软件算法(完全没有一点改动)。&br&这个工作算是把FPGA应用在数据中心的一个尝试。不只是微软,Amazon,google也参与了这个工作。我相信未来FPGA一定会应用在数据中心。不过现在来看FPGA的开发难度还是太高了点。希望High level synthesize能够让FPGA的开发简化。
自己的领域答一下,微软的这篇论文前两天我刚刚看过。 这条新闻是真的。这个项目已经做出来了,并且这篇论文将会出现在2014年的ISCA上。ISCA是计算机架构领域的顶级会议。文章题目叫 “A Reconfigurable Fabric for Accelerating Large-Scale Datacenter Se…
关注Intel收购Altera这个案子很久了,今天终于尘埃落定,也写几句。&br&&br&Intel首先是个以X86 CPU为最核心产品的公司(虽然它在其它领域也有落子), CPU里又包括服务器用CPU、台式机/笔记本电脑CPU,后者发货量极大,但前者的利润率却高得惊人; 在服务器CPU里,Intel X86 CPU和Windows/Linux OS是一个阵营,属于相对廉价且开放性较高的解决方案,以IBM POWER CPU和Unix OS为首的是另一个阵营,属于高价格、高性能且封闭的解决方案,在高端场合的占有率很高。X86方案现在进攻势头较猛,比如多台X86服务器或多颗CPU组成阵列,其性能和稳定性也能与POWER CPU低端服务器 PK下,价钱还更划算,因此也拿下了不少份额。&br&&br&那Intel X86 CPU自己有没有敌人,有!以NVDIA为首的CUDA、GPGPU计算这几年也有声有色,甚至发出取代CPU的口号,ARM除了在移动设备和嵌入式市场份额远超过Intel外(如手机、平板等手持设备),也开始进军服务器领域,主打超低功耗;而IBM也不肯坐视市场被X86一步步吞食,也组成了OpenPOWER联盟,开放了POWER CPU的授权,拉了一大堆小伙伴组团,同时也积极推出Linux OS版的服务器。Intel急在心里,但以CPU程序顺序执行为主的特点决定了其在并行计算方面做得并不怎么样,即使有多核和多进程的方式,而强大的CPU在处理很多琐碎的小任务时有杀鸡焉用牛刀的感觉,且频繁地处理小任务产生的中断还会影响运行大任务的性能; 使用专用芯片组成的协处理器可以在某方面得到增强,但是灵活性较差:现在的PC基本都是通用架构,要是针对不同的应用就出个不同的硬件版本的整体服务器或插卡,那得多少种版本啊?这个不能与软件比啊!那FPGA作为PCIE add-in卡的作用就体现出来了。&br&&br&FPGA以PCIE add-in卡甚至以后直接在主板上焊上一块FPGA芯片(现在Intel也出了CPU与FPGA集成在一块芯片上的版本)的首先好处就是如上所提:既可以以芯片电路的形式解决并行计算的短板,同时还可以针对不同行业的应用灵活地出多个软件/固件版本形成硬件编程(使用同一套硬件,或同系列硬件),且它比GPU并行计算强的个地方是:它更接近IO!以网络数据为例,如果从网络过来的数据采用GPU计算,它先要进入内存,并在CPU指令下拷入GPU内存,在那边执行结束后再拷到内存被CPU继续处理,这过程并没有时间优势; 而使用FPGA的话,数据先从光纤接口进入FPGA,在里面解帧后进行数据处理或预处理,然后通过PCIE接口送入内存让CPU处理,一些很底层的工作已经被FPGA处理完毕了(FPGA扮演协处理器的角色),且积累到一定数量后以DMA形式传输到内存,以中断通知CPU来处理,这样效率就高得多。这种应用场合相当多,比如HTTPS服务的加密解密运算。&br&&br&展望下Intel收购FPGA后业界的发展:短时期内不会有大的变化,仍然以三家为主,Xilinx/Altera/Lattice,本来X已经把A甩得有点远,现在A有这个大靠山,靠Intel先进的制程能力支持和品牌整合优势,差距会缩小些,应用领域仍然以当前的通信、图像处理、IC原型验证、汽车电子、工业、glue logic等,做硬件加速卡这种外设产品会得到刺激进一步发展。&br&&br&1. Intel会先以Demo的形式推出些硬件卡产品或部分直接集成FPGA的CPU型号、IP解决方案及对应的SDK等,对象是对性能比较敏感的服务器应用场合,如语音、加密解密、压缩、图像处理、IP包处理等; &br&&br&2. 逐渐硬件卡会形成公模,就像主板/SSD一样,有Intel原装卡,也会有其它家厂家跟进的,比如以PCIE gen3x8/16形式插入服务器主板、有DDR4、SRAM、Flash、GE网口、光口等,上面的FPGA上甚至会带有ARM/ATOM CPU单元,FPGA上的开发初始阶段推出常用场景下可配置的IP,编程语言为OpenCL。&br&&br&服务器和里面的FPGA成为一个整体,屏蔽实现细节,如选择板卡、加载FPGA bitfile、配置、运行、释放等操作均自动完成,多程序同时使用时顺序排队或按优先级调度,将正运行的程序先挂起保留状态会运行高优先级,完成后再恢复原先任务等。&br&&br&与其它服务器联合使用,比如一个任务在多台服务器上运行,要用到加速的部分就把进程转过来,完成后再转到其它服务器继续下一步等。&br&&br&3. 彻底变软,Intel再升级推出SDK开发包,以参数定制的形式完成功能拓展,不基于具体的IP而是基于功能,想加入怎样的功能就选择,在架构里IP自动配置好,同时对应的驱动和中间件也能调整好对应的参数,总的说,基本实现功能在CPU与FPGA之间的切割,且在FPGA上的功能实现以库调用为主,而不再基于具体的IP实现; &br&&br&在不同场景下能检测出当前程序的瓶颈提出推荐方案,提示开发者可将哪部分功能移植到CPU或FPGA实现; &br&&br&4. 到再一次进化,不依赖于开发者,基于动态重加载技术,CPU能自动将某部分计算分配出去,类似于MAC的FusionDriver方案,可自动将频繁运行的程序与文件储存在SSD,将另外不常用的的放HDD一样。&br&&b

我要回帖

更多关于 fpga三大公司 的文章

 

随机推荐