当集成电路的制程工艺越来越接近原子级别,新的芯片制造费用越来越高,硅工艺快走到极限的时候,还有什么办法来满足社会上不断增长的计算量需求?以Intel和ARM为代表的公司采用多核并行执行来提升计算能力,但是随着核数增加,核与核之间数据的等待,既增加了能耗,也导致真正计算性能远远低于预期,尤其是功耗成了移动计算平台的头号难题。高性能与低功耗是芯片设计的两个相悖方向,所有计算芯片公司都在努力寻求一个高性能低功耗的解决方案。如Intel通过兼并Altera, AMD兼并Xilinx,都是想通过CPU+FPGA异构的方式来实现高性能低功耗的目的,这种方案无疑加大了项目设计难度,因为FPGA和CPU编程与原理各不相同,既使可以通过高级语言综合将C/C++/SystemC转化成RTL,也很难在软硬件结合的环境中准确控制其时序,这种方案要求设计人员精通完全不同的软件与硬件设计模式,但是这两套设计模式相冲突,普通人很难灵活切换与掌控。随着技术的发展,片上网络(NOC:Network on chip)架构也逐渐进入产业界,也就是一颗芯片内部集成成百上千的精简化的RISC处理器核心,然后核与核之间通过特制网络协议进行通讯。当大量数据涌入的时候,每个核都要将传输到自己位置上的包识别一次,如果确认该包属于自己,则执行数据,否则转发到下一个核。海量数据在片上多核网络芯片的网络上传输,会大大降低数据到达时间,增加延迟与功耗,每个核等待时间和包识别时间都是功耗上升的关键因素。
除了常见的芯片架构外,还有一些特殊架构也在不断兴起,首先是不做芯片的Google(Alphabet)开始入手设计芯片,并推出了Tensor深度学习芯片,之后又有IBM推出的模拟人类大脑的神经元芯片TrueNorth,该类芯片将深度学习神经网络做成芯片,用来做人工智能和图像识别以及大数据处理等。但是神经网络不是采用传统编程模式来设计的,而是通过海量数据训练来达到预期效果,所以,在使用上,要采用数据训练的方式进行应用,比传统芯片开发周期长。海量数据获取与样本鉴别又是一个巨大的挑战。另外,TrueNorth芯片的运行频率受限制,计算带宽自然无法获得显著提升。
Robei沉芯芯片架构是基于吴国盛提出的时空转换理论,是一种超越摩尔定律的集成电路设计方案。随着摩尔定律的失效,计算性能的提升无法再依赖于工艺提升。传统的SOC架构注定芯片设计走向垄断,虽然SOC集成了很多IP,但是并不是每个IP同时都在使用,IP模块是通过关断与切换来实现应用的,比如一开始在使用A模块,但是程序要运行B模块,就需要把A模块关掉,给B模块上电,重置一下寄存器,然后再使用B模块。关断与切换的过程大概耗时100ns到1us的时间,而且关断与切换的方式需要同时把A和B模块预先集成到硅晶圆上,会增加硅晶圆面积,也增加了功耗。沉芯异构芯片采用另外一种模式,采用高速动态可重构的计算阵列重构的方式实现,功能模块可以通过软件配置,不需要预先集成,减少了晶圆面积和降低了功耗。沉芯自适应芯片可以通过不断的重构,来实现同一芯片上可以配置无限的功能,一眨眼可以重配置10万次以上,让用户感觉不到切换的时间,反而感觉到芯片需要什么就可以用什么功能,实现感觉上的芯片硅面积无限大。
图13-1 时空转换理论
沉芯芯片通过软件定义芯片的模式打造出一种全新的架构,实现串并行无缝切换,传统CPU/MCU架构负责串行数据处理,自适应动态可重构阵列处理器负责数据并行处理,两个处理器之间采用DMA进行数据交换。沉芯芯片是按需配置的芯片,根据不同的时刻对硬件不同要求,进行调用不同的配置,达到微秒到纳秒级别的重构。当数据不需要并行处理的时候,传统CPU或MCU架构完全满足串行处理的需求,并行部分可以处于待机状态,节约能耗。当需要采用并行加速的时候,启用自适应并行处器,采用先配置后使用的方式来实现软件定义芯片。在运行过程中,传统架构可以随时响应自适应处理器的中断请求,实现实时动态可重构。沉芯打造出数据流与控制流的一体化,实现了软件定义芯片。数据在自适应处理器中可以多重复制与数据交叉,降低了反复存取数据带来的功耗的消耗。沉芯芯片适合在很多对计算性能有比较高要求同时功耗受限的场合,为客户提供最优化的处理方案。该芯片不仅内部结构可以软件重构,外部引脚也可以软件重构,用户的程序运行不需要重写程序,只需要提前配置引脚重映射就可以继续执行。
自适应阵列处理器由Memio,Busmatrix,Rocell阵列组成。Memio是由行一行的32位存储器所构成,既可以作为输出,也可以作为输入,具体长度依据不同的沉芯芯片的型号来定。Busmatrix作为数据走向的控制,用于链接Rocell的具体行与Memio的具体行数据。通过Busmatrix可以实现任一一行的Memio的数据传输到任一一行的Rocell阵列种。Rocell阵列是由一堆异构的Rocell单元进行二维排布实现的,每个Rocell单元都可以与相邻的8个Rocell进行通信。
Rocell阵列中每个Rocell只执行一种计算,将计算结果直接传递给相邻Rocell进行下一步计算。整个阵列中可以只使用部分Rocell,未被使用的Rocell的时钟被关断,不会有动态功耗,只有漏电功耗。由于采用了多个Rocell同时运算,将基于指令的计算方式打破,采用更深流水线级别实现并行加速,在维持计算性能不变的情况下,平行处理器阵列可以有效降低整个系统的运行频率,进而降低功耗。
Rocell是平行处理器阵列的基本组成单元,根据功能不同,可以划分为三类:仅负责单周期运算的基础计算模块Roce,带有浮点加减运算的Rofl和乘法器Romul。Roce含有32种基本的指令操作,Robu在Roce的基础上增加了4条专用指令,Romul在Roce的基础上增加了2条专用指令。每个Rocell根据结构划分为两个部分:输入输出控制器和计算核心Rocal。
Rocell指令集的归类按照Rocell的种类不同进行划分,Roce指令涵盖32条基本指令,Rofl和Romul拥有特殊指令单独介绍。
表1 Roce、Rofl、Romul共有指令集
编号 |
指令名 |
符号 |
功能 |
描述 |
00 |
Nop |
o |
空运算 |
不做任何事情,该单元不启用 |
01 |
Pass |
-> |
传递 |
将数据传递到下一个单元 |
02 |
And |
& |
与运算 |
实现按位与操作 |
03 |
Or |
| |
或运算 |
实现按位或操作 |
04 |
Xor |
^ |
异或运算 |
实现按位异或操作 |
05 |
Cmp |
<> |
与0比大小 |
X[0]=a>0; X[1]=a<0; X[2]=(a!=0) |
06 |
Lsl |
<< |
逻辑左移 |
逻辑左移,co也参与移位 |
07 |
Lsr |
>> |
逻辑右移 |
逻辑右移,co也参与移位 |
08 |
Inc |
++ |
自加运算 |
cin为1重置起始值,cin为0开始自加运算 |
09 |
Absi |
|i| |
整型数取绝对值 |
对整型数据取绝对值 |
10 |
Negi |
~ |
整型数取反 |
对整型数取反 |
11 |
Merge |
>= |
双路合并 |
当两路数据都有效时,a取低16位,b取高16位 |
12 |
Addu |
u+ |
无符号加法 |
无符号的加法运算,cin和co都参与 {co,x}=a+b+cin |
13 |
Subu |
u- |
无符号减法 |
无符号的减法运算,cin和co都参与 {co,x}=a-b-cin |
14 |
Adds |
s+ |
有符号加法 |
x=a+b |
15 |
Const |
C |
常数 |
输出常数a的值,a可以存储到Rocell中 |
16 |
Sgn |
sgn |
获取符号位 |
获取符号位数据,输出为co |
17 |
Mux |
=|- |
两路数据选通 |
数据选择器,x=cin?b:a |
18 |
Nand |
~& |
Nand运算 |
按位Nand运算 |
19 |
Nor |
~| |
Nor运算 |
按位Nor运算 |
20 |
Xnor |
~^ |
Xnor运算 |
按位xnor运算 |
21 |
Zero |
z |
判断为0 |
如果输入为0,co输出1,否则为0 |
22 |
Rol |
@ |
循环左移 |
co参与的循环左移运算 |
23 |
Asr |
<<< |
算术右移 |
带符号位的算术右移 |
24 |
Dec |
-- |
递减运算 |
cin为1重置起始值,cin为0开始自加运算 |
25 |
Absf |
|f| |
浮点数绝对值 |
对浮点数取绝对值操作 |
26 |
Negf |
-f |
浮点取反 |
对浮点数取反操作 |
27 |
Lut |
lut |
查找运算 |
co输出在a中查找位置为b低5位的比特值 |
28 |
Carry |
<co |
进位运算 |
co输出加法运算的进位 |
29 |
Borrow |
bo> |
借位运算 |
co输出减法运算的借位 |
30 |
Subs |
s- |
有符号减法 |
有符号减法运算 |
31 |
Equal |
== |
判断相等 |
判断两个数是否相等 |
表2 Rofl独有指令集
编号 |
符号 |
符号 |
功能 |
描述 |
33 |
F2I |
f=i |
浮点转整型 |
按IEEE-754格式浮点转整型 |
34 |
I2F |
i=f |
整型转浮点 |
按IEEE-754格式整型转浮点 |
35 |
Addf |
f+ |
浮点加法 |
浮点数的加法运算 |
36 |
Subf |
f- |
浮点减法 |
浮点数的减法运算 |
表3 Romul独有指令集
编号 |
符号 |
符号 |
功能 |
描述 |
37 |
Muli |
i* |
整型乘法 |
整型乘法器 |
38 |
Mulf |
f* |
浮点乘法 |
IEEE-754标准浮点乘法 |