依据指令长度的不同,指令系统可分为复杂指令系统(Complex Instruction Set Computer,简称CISC )、精简指令系统(Reduced Instruction Set Computer,简称 RISC)和超长指令字(Very Long Instruction Word,简称VLIW)指令集三种。CISC中的指令长度可变;RISC中的指令长度比较固定;VLIW本质上来讲是多条同时执行的指令的组合,其“同时执行”的特征由编译器指定,无须硬件进行判断。超标量处理器是动态调度,由硬件发现指令级并行机会并负责正确调度,VLIW是静态调度,由编译器发现指令级并行机会并负责正确调度。VLIW结构的最初思想是最大限度利用指令级并行(Instruction Level Parallelism,简称ILP),VLIW的一个超长指令字由多个互相不存在相关性(控制相关、数据相关等)的指令组成,可并行进行处理。VLIW可显著简化硬件实现,但增加了编译器的设计难度。由于AI和DSP领域,数据基本上是数据流,没有跳转,因此特别适合静态的VLIW,近期有不少AI芯片使用VLIW架构。
大部分FPGA器件采用了查找表(Look Up Table,LUT)结构。查找表的原理类似于ROM,其物理结构是静态存储器(SRAM),N个输入项的逻辑函数能够由一个2^N位容量的SRAM实现, 函数值存放在SRAM中,SRAM的地址线起输入线的作用,地址即输入变量值,SRAM的输出为逻辑函数值。由连线开关实现与其它功能块的连接。RAM基本的作用就是存储代码和数据供CPU在需要的时候调用。可是这些数据并非像用袋子盛米那么简单。更像是图书馆中用有格子的书架存放书籍一样。不但要放进去还要可以在需要的时候准确地调用出来。尽管都是书可是每本书是不同的。对于RAM等存储器来说也是一样的,尽管存储的都是代表0和1的代码,可是不同的组合就是不同的数据。让我们又一次回到书和书架上来,假设有一个书架上有10行和10列格子(每行和每列都有0-9的编号),有100本书要存放在里面,那么我们使用一个行的编号+一个列的编号就能确定某一本书的位置。假设已知这本书的编号87,那么我们首先锁定第8行。然后找到第7列就能准确的找到这本书了。在RAM存储器中也是利用了相似的原理。如今让我们回到RAM存储器上,对于RAM存储器而言数据总线是用来传入数据或者传出数据的。由于存储器中的存储空间是假设前面提到的存放图书的书架一样通过一定的规则定义的,所以我们能够通过这个规则来把数据存放到存储器上相应的位置。而进行这样的定位的工作就要依靠地址总线来实现了。对于CPU来说,RAM就像是一条长长的有非常多空格的细线。每一个空格都有一个唯一的地址与之相应。假设CPU想要从RAM中调用数据,首先需要给地址总线发送地址数据定位要存取的数据,然后等待若干个时钟周期之后,数据总线就会把传输数据给CPU。FPGA是基于逻辑门和触发器的,它是并行执行方式,没有取指到执行这种操作。简单而言,就是通过烧写文件去配置查找表的内容,从而在相同的电路情况下实现了不同的逻辑功能,数字电路中所有逻辑门和触发器均可以实现,适合真正意义上的并行任务处理。FPGA程序在编译后实际上是转换为内部的连线表,相当于FPGA内部提供了大量的与非门、或非门、触发器等基本数字逻辑器件,编程决定了有多少器件被使用以及它们之间的连接方式。通过编程,用户可对FPGA内部的逻辑模块和I/O模块重新配置,以实现用户的逻辑。它还具有静态可重复编程和动态在系统重新配置的特性,使得硬件的功能可以像软件一样通过编程来修改。只要FPGA规模够大,这些数字器件理论上能形成一切数字系统,包括MCU,甚至CPU。因FPGA是纯数字电路,在抗干扰和速度性能上有很大优势。FPGA没有取指到执行这种操作,效率极高,功耗很低,又是天生的并行计算结构。但是FPGA采用的是统计型连线结构。这类器件具有较复杂的可编程布线资源,内部包含多种长度的金属连线,从而使片内互连十分灵活。因此每次编程后的连线可不尽相同。但是这些布线资源消耗了很大一部分芯片面积,而ASIC只需要选用最短长度的布线即可,面积大大缩小,同样密度,ASIC大约可以缩小40%的面积,这就意味着FPGA比ASIC要贵40%左右,FPGA的算力达到一定程度后,再增加算力,价格会飞速增长。