当前位置:首页 > 新闻资讯 > FPGA之家动态 >

【芯片设计】快速入门数字芯片设计,UCSD ECE111(九)FPGA vs ASIC

时间:2024-07-28      来源:网络搜集 关于我们 0

这节课的内容比较轻松,主要是讨论FPGA和ASIC之间的一些区别与联系。至于SHA256那个Project,我这边已经写了一半了,等完成以后会单独写一篇文章。就重点代码进行讲解,然后附上相应的代码。

回归主题,开始这节课的介绍:

首先我们看一下设计的选择范围,首先明确一个基本点。就是速度通用性往往是相悖的。很少有某个东西既有非常快的速度,又具有很强的通用性。通常我们认为ASIC也就是专用芯片是最快速的,但这种芯片基本没有灵活性,而对于我们大家使用最多的通用处理器如Intel X86、ARM等而言,其基本可以做你想做的任何事情,但针对某一特定应用如神经网络运算,则显得有些力不从心(暂时不考虑其内部增加的定制单元和指令扩展)。

此外还有一个类型的处理器概念已经火了一段时间了,但是由于软件工具链的限制,一直没有得到很好的推广。那就是CGRA,它的目标是达到接近CPU的可编程性,同时接近专用ASIC的计算能效比。如下图所示。该处理器又有个另外的说法:软件定义硬件。其实现机制是通过软件调度不同的运算单元PE,来实现不同的运算。有点类似于FPGA,但是CGRA的粒度更粗,配置更快。关于CGRA的更多概念大家可以查阅相关资料。大家有兴趣的话我也可以单独写一篇文章进行介绍。

上图是FPGA的常见结构,它通过可编程CBs和Switch Box实现路由。大家按照MUX的机制进行理解即可。其逻辑电路是通过可编程逻辑块(CLBs)实现。CLB实际上是Xilinx芯片的基本组成单元。在Altera中称为LE(Logic Elements)。这二者没有本质区别,都是基本的逻辑单元。

CLB的基本组成如上图所示。由查找表(Lookup Table,LUT)、D触发器和MUX组成。MUX可以决定是从LUT输出还是DFF输出。上图只是最简单的一个CLB图示,不同型号的FPGA的LUT内部组成略有区别,如查找表的数量、触发器的数量有所不同。但就本质而言,没有区别。大家掌握上图结构即可。

LUT架构如图所示,它是一个组合逻辑电路,由级联的MUX组成。学过数字电路的同学大家应该都知道,16选1的MUX是由2个8选1的MUX拼成的。就如上图所示。

上图是ALtera的FPGA的ALM框图。其针对加法链做了优化。

然后花了三页篇幅说明ALM的优势所在,ALM其实跟之前所说的LE类似,但更有优势。LE需要通过级联和反馈来生产输入多于可用输入的函数,加入ALM可以更好的解决这个问题。ALM包括2或4或其他个的输出寄存器,为生成函数提供了更多选择(增加了排列组合,因为输出寄存器变多了)。

然后介绍了ALM之间的连接,以及Stratix 10这款FPGA。(说实话,看到这里我感觉是Intel给这位老师钱了,让他打广告。。。)

然后终于开始介绍FPGA和ASIC之间的区别了:

ASIC,全称应用专用集成电路。它通常是由“standard cells”设计而成的,也就是俗称的标准单元。标准单元是由Foundry如TSMC等厂商提供的。我们做DC综合的时候,需要将我们的代码映射成实际的电路,首先就需要先选择一款工艺库,这些工艺库的器件有详细的参数,基于此我们的设计在流片之前就可以大致分析面积、功耗、时序等等。方便了我们的设计,也为设计结果提供了预期。

目前芯片设计的主流工艺仍然采用CMOS工艺,相信来看这个文章的同学都直到这个概念,如果没有的话需要看一下我推荐的那本教材了。做数字IC设计虽然不用对器件知识有很深的了解,但是仍然要大概有个概念,自己写的这个与逻辑,实际电路是怎样的。否则无异于空中楼阁。上图的NMOS给Gate级高电平的时候,导通。PMOS则与之相反。

上图所示是基于CMOS工艺实现的反相器,A给高电平,则Y和地相连,输出电平为0。实现了取反逻辑。下面和右边这个图有个印象即可,不用具体掌握。

上图是一个与非逻辑,基于与非逻辑,下面的n-FETs是串联的,上面的p-FETs是并联的(逻辑表达式可以转换成与非逻辑或者或非逻辑。二者对应的CMOS电路不同)。其分析逻辑和开始的反相器是一样的,大家可以动手算一下真值表。

上图给出了分析过程。

上图是对应的标准单元,如果有做个Layout的朋友应该对这个画面比较熟悉。对于设计而言留个印象即可,不用掌握。

然后介绍了一下D-Flip-Flop。如图所示,由图大家可以知道,为什么触发器是边沿采样。我们可以分析一下,低电平的时候左侧从D到QM是导通的。数据锁存在QM处,然后高电平的时候右边导通,数据可以输出到Q。这也解释了为什么需要建立时间和保持时间。以建立时间为例,数据采样是需要时间的。你在低电平的时候需要及时的变化,以采集你的数据到QM,否则还没采样到就到了高电平,这个数据就进不来了。同理保持时间也是,如果你数据变化太快。左侧还没有关闭,那QM的值就变了,进而Q的值也不是预期希望的值了。而是你新数据的值了。

然后给了D触发器的标准单元图示。

可以看到随着设计变得复杂,版图已经看不清了。

2018年的新款英伟达GPU,采用12nm工艺制程,有超过230亿个晶体管。

我们再看看FPGA和ASIC的设计流程有何不同,可以看到前端基本是一样的。对于后端而言有很大的区别,FPGA采用FPGA芯片上的逻辑块,由Vivado等软件进行自动映射,布局布线实现。而ASIC基于标准库,由DC等工具进行综合,然后还要进行后仿真(用带有逻辑延迟的库进行仿真),再基于标准库进行布局布线等。通常我们认为ASIC的设计要比FPGA更为复杂,风险更高。需要更加专业的人员来把控全局。

对于初学者而言,能选择其中一个方向都是很好的,身边也有很多从FPGA转来ASIC的。并没有特别困难,只需要一定的学习即可。

如果面试官问你ASIC和FPGA的区别,可以考虑从以下几个方面回答:

所使用的工具不同,ASIC开发使用的工具远远多于FPGA开发。

FPGA更多的时候是使用Vivado自带的IP库,当然ASIC设计也可以使用DesignWare等,但是其便捷性远不如Vivado的调用速度,毕竟FPGA用一个Vivado工具就可以完成整个开发流程。

时钟、存储电路、IO等完全不同。FPGA开发一般调用MMCM/PLL的IP核即可,方便快捷。而ASIC设计在时钟花的时间非常多,也很复杂。还有存储电路,FPGA开发调用MIG,进行生成即可。而ASIC一般是使用制定厂商工艺库,基于Memory Compiler进行生成。IO的话FPGA一般进行XDC约束即可,而ASIC是要单独做IO PAD的。FPGA很少听说有自己动手做IO PAD的,Vivado工具已经支持的很好了,不需要过度操心。

FPGA通用性更强,可以反复的烧录(当然综合烧录的时间也很长)。而ASIC一旦回片,基本就定型了,希望大家的ASIC都能一次点亮。

综合/PR不同,虽然叫一个名字,但基本是两回事。根据上面所说的大家可以知道,对于FPGA的CLB而言,其中的LUT实现组合逻辑,D触发器实现时序逻辑,再加上一些BRAM,硬核资源如DSP等,就可以实现任意电路。所以FPGA的综合就是把RTL映射到这些资源上。ASIC综合是将RTL映射到标准单元库上,有些RTL,语法是支持,但是就是综合不了。很多时候会出现Vivado可以综合过的,但DC不一定过。FPGA综合和ASIC综合区别很大很大。

此外做ASIC基本也会用到FPGA,做原型验证。而通常说的FPGA开发是直接拿FPGA去做产品,这种广义上来讲,也可以算嵌入式开发的一部分。

最后对于想学习FPGA的朋友,建议直接学习ZYNQ。该芯片开发可以大幅度提高大家的软硬件协同开发能力,可以说事半功倍,并且对学SoC、AMBA总线等也有非常大的好处。

往期系列文章入口——Soc101系列:【芯片设计】SoC 101(一):绪论FIFO系列:【芯片设计】FIFO漫谈(零)从无处不在的FIFO开始说起计算机体系结构系列:【芯片设计】计算机体系结构(一)虚拟内存AMBA总线系列:【芯片设计】深入理解AMBA总线(零)绪论握手协议系列:【芯片设计】握手协议的介绍与时序说明芯片复位系列:【芯片设计】复位那些小事 —— 复位消抖犄角旮旯的bug系列:【犄角旮旯的bug】assign和signed的联合背刺事件
注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言