FPGA

用Python玩FPGA背后的故事

近日,想必各位科技爱好者的朋友圈都被一篇发表在第25届IEEE国际讨论会上,用Python开发FPGA的论文刷屏了吧,那么这是如何实现的呢?今天,就请各位看官和小编一起来了解一下,这个构想的实现基础——PYNQ。

图为该篇论文

图为该篇论文

想做AI独角兽?你该和FPGA交个朋友

最近想必很多人工智能(AI)界小伙伴的朋友圈,都会被一则新闻刷屏:国内AI初创公司深鉴科技被全球排名第一的FPGA公司赛灵思(Xilinx)收购,尽管各方都没有披露收购的财务细节,不过据称先前深鉴科技的估值就已经达到了10亿美元。

为什么这家成立刚刚两年的公司,就可以成为令人羡慕的AI独角兽?其中有很多原因,不过从技术的角度来说,很大程度上这是因为他们在创业之初做对了一件事——选择FPGA作为AI梦想的支点。

支持算法迭代
大家都知道AI的ABC三要素——算法(A)、大数据(B)和算力(C)。为让人工智能算法基于大数据释放出最大的能量,就必须有强大的硬件计算平台做支撑。目前我们可用的硬件平台架构主要是CPU、GPU、FPGA和ASIC这几种。

如果单从计算性能和效率、功率和面积来看,专用的ASIC肯定是最佳选择。不过处于发展初期的AI,其算法总是在快速迭代和变化之中,在无法形成大规模稳定应用之前,将算法固化在ASIC中,而没有任何灵活性,将意味着巨大的成本和风险。

FPGA中LUT设计

在FPGA中,实现逻辑的基本单元是查找表(LUT)而非基本门电路。目前的FPGA中,单一LE或者Cell通常能实现至少4输入查找表的逻辑功能。

4输入查找表可以看成是具有4位地址1位数据的存储器,能够存储16bit数据,这也是LUT能被用于组建分布式RAM的原因。

如果要构成一个6输入1输出MUX,可以通过两片4输入查找表级联,也可直接用一片完整的6输入查找表,两片4输入的查找表的存储容量是32,而一片完整的6输入查找表的存储容量是64;若使用6输入查找表(存储容量为64)实现4输入(存储容量为16)的逻辑功能,则浪费了75%的存储容量。也就是说,采用较少输入的查找表实现较多输入查找表的功能,在面积上有更高的利用率。

但是并非只需要考虑面积利用率,还应考虑到时序和布线问题,按照输入越少面积利用率越高的说法,岂不是2输入查找表更具有优势?但是各个FPGA厂商都不提供2输入查找表,因为如果FPGA都以2输入查找表为基本逻辑单元,那么实际应用中,几乎所有的逻辑都需要查找表级联实现,但是FPGA中的布线资源并不足以支撑这样的设计,同时,这样的设计也将导致时序问题。

AI芯片可能只是FPGA的附庸

作者:佐思产研周彦武

央行放水之后,催生出了一大批手握重金的投资机构,而国内优秀的投资标的,特别是高科技领域的标的极为稀缺,AI芯片获得投资易如反掌,一时间冒出来几百家AI芯片公司,也给投机分子可乘之机。

作为国内最优秀的AI芯片公司,深鉴科技被以3亿美元的价格卖给FPGA巨头赛灵思。过去两年,深鉴科技是国内AI芯片领域冉冉升起的一颗明星。这家2016年3月成立的初创公司目前已完成三轮融资,投资方包括金沙江创投、蚂蚁金服、三星风投、赛灵思、联发科等知名机构和公司。据媒体报道,其估值远超过10亿美金。如今以3亿美元卖出,并且据称核心团队要锁定4年内不得离开赛灵思。难道深鉴科技被贱卖?当然没有!这是因为中国真正优秀的企业太少,而追逐的资本太多,优秀企业的估值已经到了完全没有理性的地步。如果这些企业在美国,估值会萎缩数倍以上。

为什么人工智能ASIC要赔钱?

FPGA是嵌入式系统设计的理想选择

根据IEEE(国际电机工程师协会)的定义,嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。这主要是从应用上加以定义的,从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。

随着消费电子、物联网等领域的不断发展,用户需求也越来越复杂和多样,因此我们在嵌入式系统设计中必须选择合适的处理器(SoC)系统,当然我们也需要考虑成本、功耗、性能、I/O资源等方面,但是随着实践案例的增多FPGA越来越成为嵌入式系统设计的主流选择。

FPGA/SoC:最早我们都采用的是纯FPGA设计,利用FPGA的资源实现软核处理器比如Microblaze、Picoblaze等,现在Xilinx推出了Zynq SoC和Zynq UltraScale+ MPSoC系列,它们集成的是硬核处理器(双核ARM Cortex-A9 CPU或者Quad-A53+Dual-R5 GPU),这不仅带来了性能、功耗、性价比方面的改进,同时也减小的PCB尺寸;

FPGA时序技巧

FPGA写代码写久了需要点技巧。程序健壮性,稳定性很需要考虑。

比如说一个例子,把一个RAMA的数据写入另外一个RAMB中。

新手肯定是读一个写一个。关键问题是,RAM的厂家的IP读数据过程是会有一个时钟或者2个时钟延时问题。所以很多人写的代码如下:

always @(clk)

begin

case(ram_STATE)

ramA_en_wraddr:

ramA_en_delaytwo:

ramB_en_wrout:

end

从RAMA到RAMB 搬移数据,花费的时间是4*地址 *clk时间,尤其是地址超过256长度,容易引起前端的ram的数据覆盖的问题。

这个时候解决问题方式是把数据和地址分开不同模块写的。这个也是sdram操作核心思想之一。

always @(clk)

begin

case(ram_STATE)

ramA_en_wraddr:

end

wire rama_en;

简谈FPGA学习中亚稳态现象

说起亚稳态,首先我们先来了解一下什么叫做亚稳态。亚稳态现象:信号在无关信号或者异步时钟域之间传输时导致数字器件失效的一种现象。

接下来主要讨论在异步时钟域之间数据传输所产生的亚稳态现象,以及如何降低亚稳态现象发生的概率(只能降低,不能消除),这在FPGA设计(尤其是大工程中)是非常重要的。

亚稳态的产生:所有的器件都定义了一个信号时序要求,只有满足了这个要求,才能够正常的在输入端获取数据,在输出端输出数据。正常的数据传递是:在触发时钟沿前必须有一小段时间(Tsu)用来稳定输入信号(0 or 1),触发时钟沿之后需要有一小段特定的时间(Th)再次稳定一下,最后再经过一个特定的始终到输出延时(Tco)后才有效。如果数据的传递过程违反了这个时间约束,那么寄存器输出就会出现亚稳态,此时输出的诗句是不稳定的(在0和1之间游荡)。但是这种现象并不是绝对的,但是我们在实际设计中应当尽量避免这种现象。

同步时钟系统由于是同步的,没有两个异步的触发信号对信号的输入输出干扰,所以亚稳态的几率很小。

异步时钟系统:先举个例子,如下:

always @(posedge clk or negedge rst_n)
begin
if(!rstn)
m<=1;
else
m<=0;
end

FPGA为什么越来越受重视了?

FPGA 有一个响亮的别名——“万能芯片”,它是一种能够通过软件更改、配置器件内部连接结构和逻辑单元,完成既定设计功能的数字集成电路。虽然FPGA问世的时间不长,但发展非常迅猛,远超出了业界的预想。

FPGA 在汽车电子领域的应用尤为广泛,MINIEYE 正是选用了 FPGA 作为硬件架构的平台。

让我们从 ADAS 产品出发,从多个角度来看,FPGA 为什么得到了越来越多的关注与重视?

  • 首先,从计算需求适应性能来看:
  • MINIEYE 研发的ADAS产品涉及大量计算密集型算法,这个类型的算法有计算量大,数据规整、适合并行三个特点。

    虽然 FPGA 研发难度高,但只要设计精良,就可以适应算法,将深度学习算法做到全并行,高 I/O 复用和数据吞吐,并像软件一样直接升级,满足越来越高的算法需求。

    相反,其他硬件架构则各有缺点,ASIC 流片成本高且周期长,流片后也无法进行修改;CPU 并行度低,处理相关算法则相对低效,功耗高;GPU 并不符合视觉计算模型的特点,并行度有限,而且效率低,功耗与成本较高。

  • 从产品需求来看:
  • 阿里云FAAS平台,极大简化FPGA开发部署流程

    FPGA (现场可编程门阵列)由于其硬件并行加速能力和可编程特性,在传统通信领域和IC设计领域大放异彩。一路走来,FPGA的技术并不是一个新兴的硬件器件,由于其开发门槛过高,硬件加速算法的发布和部署保护要求非常高,FPGA的使用一直是高冷的美人,没有走入平常百姓家。也就导致FPGA的计算潜力还没有得到深入的挖掘。

    阿里FPGA云服务器平台FaaS(FPGA as a Service)在云端提供统一硬件平台与中间件,可大大降低加速器的开发与部署成本。用户可以直接使用部署加速器提供商提供的加速服务;也可以在无需了解底层硬件的情况下,快速开发和部署自己的定制加速器。

    FaaS平台提供给所有的加速器开发者统一的FPGA硬件接口Shell,提前帮用户解决了FPGA开发难度最大的高速接口开发及调试,例如PCIe,Fiber接口, DDR控制器等等,大大简化了开发的时间;用户能够直接得到硬件平台和FPGA接口的最大性能,不会因为团队开发能力和经验的欠缺,造成硬件平台性能浪费。

    FPGA和CPLD的区别

    1、FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

    2、CPLD(Complex Programmable Logic Device)复杂可编程逻辑器件,是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范围。是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。

    3、FPGA和CPLD的区别:

    ①CPLD更适合完成各种算法和组合逻辑,FPGA更适合于完成时序逻辑。换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。

    ②CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。

    同步内容