这篇文章带来ECE111第九节课的Slides以及自己的一些补充。
该课程的网站如下:
https://link.zhihu.com/?target=http%3A//cwcserv.ucsd.edu/~billlin/classes/ECE111/index.php
这节课的内容比较轻松,主要是讨论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框图。其针对加法链做了优化。