在MLIR故事线里面插播一条FPGA的文章,这源于FPGA课堂作业的一道题。What is FPGA? Explain the main differences between FPGA and CPU in terms of operation principle? 那我就来说说,我眼中的FPGA,以及它和CPU之间的关系。
在本科阶段,我接触过三次FPGA,分别是数字逻辑课设、计算机组成原理课设和硬件综合课设。正巧这三次使用FPGA的经历,可以回答课堂作业中的问题。
数字逻辑课设 -- 什么是FPGA
数字逻辑课设中分为一系列的子任务,实现译码器、分频器、七段数码管扫描电路等等。最后是一个综合性的实验,就是把子任务中实现的各种器件组合起来,使整个电路能够完成一个实际功能,我当时选择实现一个蓝牙密码箱,肝了好久,加上老师手把手帮忙,最后实现的那一刻真的激动了好久,这是当时成功时的照片:
当时我把FPGA纯粹当作一个黑盒子看待,就是用verilog写代码,然后就看波形有没有错误,然后分配引脚,再把程序上传到试验箱上。一步一步都是按照实验手册进行,最后做完实验反过头来想,什么是FPGA呢,一查概念,FPGA是Filed Programmable Gate Array的缩写,即现场可编程门阵列,emmm,当时的我是理解不了,然后就开开心心地享受假期了。
那么现在来看,数字逻辑课设就是使用了FPGA最基本的特点:硬件可编程。最终实现的数字逻辑课设功能,实际上就是一个电路,有输入信号,通过一系列的逻辑运算,最后产生输出。那么编写的verilog代码就是在用相对高级的语言,描述时序与组合逻辑电路的功能。但是此时FPGA理解不了verilog的代码呀,所以就需要进一步地编译,从而让FPGA知道应该怎么实现verilog描述的电路。首先就得进行综合(Synthesize),这一步就是把verilog代码翻译成由各种与、或、非门以及RAM和触发器组成的逻辑链接。此时生成的逻辑链接文件距离实际的芯片配置还有一定距离,这就需要布局布线步骤,将生成好的逻辑链接适配到FPGA内部的硬件结构上。这样一来,FPGA就可以实现我们设计的电路功能。
FPGA与CPU
在我看来,FPGA和CPU的运行方式的不同来源于逻辑电路结构是否可变。CPU是具有冯诺伊曼结构的固定的电路,这种结构擅长做指令调度,因此它可以运行软件,即软件可编程。而FPGA逻辑电路结构是可变的,是可以随时定义的,这就是硬件可编程的真意,它可以通过硬件描述语言,实现任何电路,当然也可以变成一个CPU。
计算机组成原理课设 -- CPU软核
计算机组成原理课设中最终要求实现一个MIPS架构单发射的5级流水的处理器。也就是说,在课设中,使用verilog实现了MIPS架构的处理器软核,然后再加上驱动试验箱的IP核,完成了整体的电路结构。最终处理器执行给定的MIPS汇编程序,在试验箱的数码管上实现循环计数的功能。
这种方式就是在硬件可编程的FPGA上实现了CPU软核,这样就使它拥有了冯诺伊曼结构,从而拥有了软件可编程的能力。它叫做软核就是因为,它需要经过仿真、综合以及布局布线过程之后才可以使用,这样做的优点在于可以根据自己所需要的功能来进行配置,比如说,我们可以在这个5级流水的CPU软核上面,再添加保留站和Reorder Buffer的结构,把它变成一个支持乱序执行的处理器,这就体现了软核的灵活的优点。
硬件综合课设 -- CPU硬核
硬件综合课设是给一块Xilinx的PYNQ板子,以及所需的传感器,实现一个特定功能。我们小组选择了DHT11的温湿度传感器、web camera以及显示器,实现了户外车牌识别设备。
在这个课设中使用的PYNQ板子,分为PS(Processing System)和PL(Programmable Logic)两个部分,PS端实际上就是一个ARM架构的CPU硬核的存在,运行Linux和Python实现软件可编程,PL端是FPGA,实现硬件可编程,可以驱动传感器向PS端传递实时数据。这种硬核实际上是将ARM处理器植入FPGA芯片,形成新的SOC芯片,这种芯片可以配置各种操作系统,而同时也具备FPGA芯片的优势,可以自己定制逻辑,比如我们课设中的对于DHT11温湿度传感器的驱动,而且作为硬核,CPU的部分,不会挤占FPGA的逻辑资源。
回顾本科阶段与FPGA的接触,我真的非常感激这些课设对我整个计算机知识体系理解的帮助,最后向教我数字逻辑的陈老师、计算机组成原理的朱老师、硬件课设的王老师表示感谢,在我当时卡壳的时候,老师们几乎都是手把手地帮我度过难关,非常幸运能够遇到这些好老师!