基于3T-1C eDRAM的存内计算SNN处理器:架构、电路与设计权衡
1. 项目概述:当存内计算遇上脉冲神经网络
在边缘计算和物联网设备爆炸式增长的今天,我们这些做芯片设计的工程师,每天都在和功耗、面积、延迟这几个“硬骨头”较劲。传统的冯·诺依曼架构,计算和存储分离,数据在处理器和内存之间来回搬运,就像让一个短跑运动员在百米赛道上不断折返跑,能量都消耗在路上了,真正干活的效率反而上不去。这种“内存墙”问题,在需要处理海量并行数据的神经网络,尤其是脉冲神经网络(SNN)上,表现得尤为突出。
SNN模仿生物神经元的工作方式,用离散的“脉冲”来传递信息,天生具有事件驱动、稀疏激活的特性,理论上功耗可以做到极低。更吸引人的是,它支持像脉冲时序依赖可塑性(STDP)这样的生物可塑性无监督学习规则,能让芯片自己从数据流中学习模式,无需海量的标注数据。这简直就是为边缘端的实时、自适应智能处理量身定做的。然而,要把SNN和STDP学习高效地实现在芯片上,传统的数字电路架构显得笨重且低效,大量的权重读写和模数转换(ADC)操作成了性能瓶颈。
存内计算(CIM)的出现,像是一把钥匙。它的思路非常直观:为什么非要把数据搬到计算单元?直接把计算功能做到内存阵列里不就行了?这样一来,乘累加(MAC)这种神经网络的核心操作,就能在数据存储的位置并行完成,彻底规避了数据搬运的功耗。近年来,基于SRAM、RRAM、MRAM等各种存储器的CIM方案层出不穷。但SRAM面积大,新兴存储器工艺不成熟,而嵌入式动态随机存取存储器(eDRAM)凭借其高密度和与标准CMOS工艺的良好兼容性,成了一个非常有竞争力的选择。
但eDRAM用于CIM,尤其是支持片上学习的SNN处理器,有几个绕不开的坎:一是存储单元面积要小,才能实现高密度的突触阵列;二是读写操作,特别是学习过程中的权重更新,要足够快且能效高;三是如何避免使用功耗巨大的ADC来读取模拟计算的结果。这次要拆解的这篇工作,正是针对这些痛点,提出了一套从存储单元、访问机制到神经元电路的完整解决方案。它基于一种新颖的3T-1C eDRAM单元,实现了可转置访问,并创新性地引入了“免恢复访问”技术和混合信号神经元,最终在28nm工艺下,用0.57 mm²的面积和0.15 nJ/像素的极低能耗,在MNIST数据集上实现了89.4%的分类精度。下面,我就结合自己多年做混合信号电路和存算一体设计的经验,带大家深入这套系统的每一个细节,看看他们是怎么把想法变成芯片的。
2. 核心设计思路与架构拆解
2.1 为什么是3T-1C eDRAM?—— 单元结构的进化论
要理解这个设计,首先得从存储单元的选择说起。在CIM领域,存储单元就是存放神经网络权重的“仓库”,其特性直接决定了整个系统的密度、能效和功能。
传统方案的困境:早期CIM多采用SRAM单元,比如8T或9T SRAM,它们支持稳定的读写和转置访问(即能按行也能按列读取,这对STDP学习至关重要),但代价是晶体管数量多,面积开销大,集成密度低。另一种思路是用更简单的1T-1C eDRAM,它面积小,但有一个致命缺点:破坏性读取。读取数据时,存储电容上的电荷会与位线共享,导致数据被破坏,因此每次读操作后都必须紧跟一个“写回”操作来恢复数据,这严重拖累了读取速度和能效。
增益单元(Gain Cell)的诱惑与陷阱:为了规避破坏性读取,2T-1C或3T-1C的增益单元eDRAM被提出。它们通过一个独立的读端口晶体管来感应存储节点的电压,理论上可以实现非破坏性读取。但2T-1C结构存在严重的“潜行电流”问题。简单来说,当某一行被选中读取时,同一列上未被选中但存储了低电平的单元,其读端口晶体管可能会被抬高的位线电压微弱打开,形成从位线到地的漏电路径。这不仅增加了功耗,更严重的是,它会“偷走”本该流向被选中单元的电流,导致读取信号幅度减小,动态范围变窄,最终限制权重能够表示的比特数。
3T-1C的平衡之道:本文提出的3T-1C单元,可以看作是针对上述问题的一个精巧平衡。它在2T-1C的基础上增加了一个晶体管,将读操作通路和存储节点隔离开。具体来看,单元包含一个写晶体管(连接字线和位线)、一个存储晶体管(其栅极构成存储节点)和一个读晶体管。存储节点连接着一个金属-氧化物-金属(MOM)电容。这个结构妙在两点:第一,它继承了增益单元非破坏性读取的潜力(在特定模式下);第二,它通过结构设计,基本消除了2T-1C中的潜行电流路径,保证了行方向(用于推理的MAC操作)电流累积的稳定性和线性度。
可转置访问的实现:这个单元的核心创新在于支持“可转置”访问。这意味着同一个单元,既能进行行方向的读取(用于推理时的乘累加),也能进行列方向的读取(用于学习时的权重更新)。这是通过巧妙地复用和重命名控制线实现的:在行访问模式(CIM模式)下,单元作为电流源,根据存储的权重和输入脉冲,向行读取位线(R_RBL)注入电流。在列访问模式(存储模式)下,单元则像传统DRAM一样,通过电荷共享机制,将存储节点的电压感应到列位线(CBL)上。这种双模式能力是高效支持片上STDP学习的关键,因为STDP要求能根据突触后神经元的发放,快速更新与之相连的所有突触(即一列权重)。
2.2 免恢复访问:学习能效的“神来之笔”
eDRAM的破坏性读取是性能杀手,但本文提出了一个颠覆性的思路:既然学习过程的目的就是更新权重,那么读取旧权重后,我们本来就要写入新权重,为什么还要多此一举去恢复旧数据呢?
这就是“免恢复访问”技术的核心思想。在传统的存储器操作中,读和写是独立的:读(可能破坏数据)-> 恢复数据 -> (某个时刻)写新数据。而在STDP学习过程中,当某个突触后神经元发放时,系统需要读取与该神经元相连的所有突触权重,根据STDP规则计算新的权重值,然后写回。这个过程天然就是一个“读取-计算-写入”的序列。
本文的设计充分利用了这一特性。在进行学习操作的列读取时,它坦然地使用了电荷共享式的破坏性读取。但在读取之后,它并不启动恢复周期,而是直接进入写入阶段,将刚刚由权重更新模块计算出的新权重值写入单元。旧数据被读取后即弃用,新数据紧随其后覆盖,恢复操作变得完全多余。这一改变,直接消除了学习读取操作中最耗能、最耗时的环节。根据论文中的仿真数据,在144x40的eDRAM阵列上,这一技术节省了高达27%的能耗。
注意:免恢复访问仅适用于学习模式下的权重更新操作。对于常规的数据保持,由于没有即时的写入操作跟随,eDRAM单元仍然需要周期性的刷新操作来补偿漏电导致的数据丢失。因此,电路设计必须能区分这两种模式,在刷新时启用恢复,在学习时关闭恢复。
2.3 混合信号神经元:告别ADC的优雅方案
SNN的另一个功耗大户是模数转换器(ADC)。在传统的CIM架构中,模拟位线上累积的电荷(代表膜电位)需要被高精度的ADC转换为数字信号,才能与阈值进行比较,判断神经元是否发放。一个中等��度的ADC就可能吃掉整个宏电路一半以上的功耗和面积。
本文的解决方案非常巧妙,它利用了SNN和LIF神经元模型的生物学特性。LIF神经元的行为是:膜电位随时间累积输入(积分),同时缓慢泄漏(泄漏),超过阈值则发放并重置(发放)。作者提出了一个“泄漏积分发放位线”(LIF_BL)的概念。他们将神经元的膜电位直接映射到位线(R_RBL)的电压上。
工作原理:
- 积分:当输入脉冲到来时,被激活的突触单元向LIF_BL注入电流,对其寄生电容充电,电压上升。
- 泄漏:通过一个栅极接固定偏压(Vleak)的NMOS晶体管,持续地从LIF_BL上缓慢泄放电荷,模拟生物神经元的泄漏。
- 发放与减法:这是最精彩的部分。他们用一个比较器持续比较LIF_BL电压(V_LIF_BL)和一个参考电压(Vref)。当V_LIF_BL > Vref时,并不直接认为神经元发放,而是先进入一个“减法模式”。
- 一个减法电路被激活,在极短时间(如85ps)内,从LIF_BL上抽走相当于Vref的电荷量。此时,V_LIF_BL = V_LIF_BL - Vref。
- 同时,一个数字计数器(NS)加1。
- 这个过程可以重复多次,直到V_LIF_BL无法再超过Vref。此时,膜电位的完整信息 =数字部分(NS * Vref) + 模拟剩余部分(V_LIF_BL)。
- 发放:当膜电位(由NS和V_LIF_BL共同表示)超过一个更高的阈值时,神经元才最终发放脉冲,并触发权重更新。
优势:
- 无ADC:完全用模拟电压比较和简单的数字计数替代了高精度ADC。
- 扩展动态范围:通过“减法-计数”机制,理论上可以用有限的电压摆幅(受电源电压限制)表示无限大的膜电位,突破了传统模拟神经元电压范围有限的瓶颈。
- 精度与能效的平衡:虽然减法操作会引入非线性(晶体管电流与电压有关),但通过精细的电路设计和系统层面的校准(如论文中提到的工艺跟踪减法块),可以将误差控制在可接受范围内,以换取能效的巨大提升。
3. 电路实现细节与关键模块剖析
3.1 可转置3T-1C eDRAM单元的详细操作
让我们深入到晶体管级别,看看这个核心单元是如何工作的。单元包含三个NMOS晶体管(M1, M2, M3)和一个MOM电容(Cs)。
- 写操作(Write):与标准eDRAM类似。当列字线(CWL)被置高,写位线(WBL)上施加要写入的数据电压(VDD或GND)。通过M1晶体管,将数据电压传输到存储节点(SN)。SN上的电容Cs负责保持这个电压。为了可靠写入‘1’(高电平),CWL电压需要被提升到高于VDD(如1.4V),以克服M1的阈值电压损失。
- 行读取/推理操作(Row Read / Inference):这是CIM模式。行读字线(R_RWL)施加一个负向短脉冲(代表输入脉冲‘1’),行读位线(R_RBL)预充电到一个初始电平。存储节点SN的电压控制着M3的栅极。
- 如果SN存储的是‘0’(高电平),M3导通。当R_RWL变低时,M2导通,电流从R_RBL通过M2和M3流到地,对R_RBL电容进行放电(具体取决于偏置,论文中描述为充电,原理相通)。
- 如果SN存储的是‘1’(低电平),M3关闭,没有电流路径。
- 因此,流经R_RBL的电流大小(或R_RBL的电压变化)就代表了权重(SN状态)和输入(R_RWL脉冲)的乘积结果。同一列上所有被激活单元的电流会同时在R_RBL上累积,完成MAC操作。
- 列读取/学习操作(Column Read / Learning):这是存储模式。列位线(CBL)预充电到VDD/2。当列字线(CWL)置高时,M1导通,存储电容Cs与CBL的寄生电容Cbl发生电荷共享。
- 若SN存储‘1’(低电平,如0V),共享后CBL电压下降。
- 若SN存储‘0’(高电平,如VDD),共享后CBL电压上升。
- 这个微小的电压差(通常几十毫伏)由灵敏放大器(Sense Amplifier, SA)检测并放大为全摆幅的数字信号。如前所述,这是一个破坏性读取,但紧随其后的就是新权重的写入,因此无需恢复。
布局考量:为了支持折叠位线架构(提高共模噪声抑制能力),单元设计为纵向拉长,以便为水平走线的CBL/CBLB对留出布线空间。MOM电容Cs利用金属层(M1-M7)在单元内部垂直堆叠实现,在有限的面积内最大化电容值,这对提高读取信噪比和延长数据保持时间至关重要。
3.2 支持免恢复访问的灵敏放大器设计
传统的DRAM灵敏放大器设计用于破坏性读取后的数据恢复和重写。在本设计中,需要一种能灵活支持两种模式的灵敏放大器:1) 学习模式下的免恢复读取;2) 刷新模式下的带恢复读取。
论文提出的灵敏放大器电路是一个关键创新。它集成了偏移消除功能,以应对工艺偏差导致的微小失调电压。其工作流程如下:
- 偏移消除阶段:在电荷共享之前,先激活灵敏放大器(拉高PP,拉低NN),同时打开位线隔离管(ISO_BL/ISO_BLB),让放大器两边的内部节点短接,使其工作点稳定在中间值,从而“记住”自身的失调。然后关闭隔离管,失调信息被存储在放大器内部。
- 传感阶段:打开CWL和灵敏放大器使能信号,存储节点与CBL电荷共享,在CBL和CBLB上产生微小电压差。此时,位线隔离管保持关闭。这使得放大器的输出可以驱动位线,但位线上的电压变化不会反馈回去破坏存储节点(SN)的数据。这正是实现“免恢复”的关键——放大器读取了数据,但切断了写回旧数据的路径。
- 写入阶段:由写驱动器根据STDP计算出的新权重,直接驱动CBL/CBLB到目标电平(VDD或GND),通过导通的访问管M1,将新数据写入存储节点。
- 刷新模式:当需要进行数据刷新时,流程类似,但在传感阶段后,会打开位线隔离管,让放大后的、正确的数据电压通过位线反馈回存储节点,完成数据的恢复和刷新。
这个设计巧妙地用一个控制信号(ISO_BL/ISO_BLB)切换了两种工作模式,在保证数据可靠性的前提下,为学习操作节省了大量能量。
3.3 混合信号神经元与工艺跟踪减法电路
LIF_BL和减法电路是替代ADC的核心。其挑战在于,减法操作的精度依赖于NMOS放电电流的稳定性,而该电流受工艺、电压、温度(PVT)变化影响显著。
工艺跟踪减法块:为了解决这个问题,论文设计了一个自适应的减法电路。它由一组二进制加权的NMOS晶体管(M1-M6)、选择逻辑和一个预充电PMOS管构成。
- 启动校准:在系统启动时,电路执行一个校准流程。LIF_BL被预充电到一个已知电压,然后尝试用不同组合的NMOS管进行放电,放电时间固定。
- 搜索最优组合:用一个比较器监测放电后LIF_BL的剩余电压是否达到目标值(Vref)。通过线性搜索算法,找到在当下工艺角下,能够最精确地在一个脉冲宽度内从LIF_BL减去Vref电压的NMOS晶体管组合(例如,开启M5和M2)。
- 锁定配置:校准完成后,这个晶体管组合的配置被锁定,用于后续所有正常的减法操作。
这个动态跟踪机制确保了即使在不同的芯片之间,或者环��条件变化时,减法操作的精度都能得到保障,是混合信号系统稳定工作的基石。
3.4 整体系统架构与数据流
整个SNN处理器是一个异构的系统级芯片(SoC)设计,围绕eDRAM存内计算宏展开。
- 突触阵列:核心是一个576x400x3的突触阵列(对应24x24输入图像,400个输出神经元,3位权重)。为了支持3位权重,权重向量的不同比特位被存储在不同的物理Bank中。这些Bank被组织成多个Tile,每个Tile包含一组共享LIF_BL的Bank,以减少全局布线开销。
- 脉冲解码器:输入图像被转换为泊松分布的脉冲序列。脉冲解码器接收脉冲地址,并将其解码为驱动eDRAM阵列行(R_RWL)的、具有特定宽度的使能信号。脉冲宽度对应权重的比特位(如最低有效位对应最短脉冲)。
- 计算块与动态阈值:计算块维护每个神经元的内部状态,包括减法计数(NS)和动态阈值(Vth_j)。参考电压Vref并非固定,而是根据公式动态计算:
Vref_j = Vth_LIF * (Vth_j - S_LIF * NS_j),其中S_LIF是减法常数。这实现了神经元的自平衡(稳态),防止某些神经元过度活跃。 - 权重更新模块(WUM):这是STDP学习算法的执行引擎。当神经元发放时,WUM启动。它通过列读取获取当前权重,同时接收来自系统的“时间信号”(表征前后脉冲时间差)。根据NSD-STDP算法和随机数生成器,WUM决定权重是增强、抑制还是保持不变,然后生成新的3位权重值,通过列写入操作更新回eDRAM阵列。整个“读-算-写”流程一气呵成。
- 侧抑制:在输出层,采用赢者通吃(Winner-Take-All)的侧抑制机制,当一个神经元发放后,会短暂抑制其他神经元,促进特征的分化学习。
4. 设计权衡、仿真结果与实战经验
4.1 保持时间与精度的博弈
eDRAM的挥发性特性要求定期刷新数据。刷新周期越短,数据越可靠,但系统吞吐量损失越大(刷新期间不能进行正常计算)。刷新周期越长,能效和性能越好,但存储节点电压会因漏电而下降,导致两个问题:1) 读取时信号幅度减小;2) 在CIM模式下,晶体管的导通电流会因栅源电压变化而改变,引入计算误差。
论文通过大量的蒙特卡洛仿真来量化这个权衡。他们模拟了在不同刷新周期下,由于单元电压衰减和器件失配导致的MAC结果误差,并最终映射到MNIST分类精度的损失上。
关键发现:对于SNN这种具有高脉冲稀疏性的应用,单个计算周期内只有少量单元被激活,因此单次误差很小。但误差会在LIF_BL的模拟积分过程中随时间步累积。因此,需要从系统层面评估整个推理时间窗口内的累积误差对最终分类精度的影响。
设计选择:仿真结果表明,在120µs的刷新周期下,分类精度损失约为0.3%,而对系统性能的影响(归一化后)为0.33。这个点被认为是精度与性能的最佳平衡点,被选定为最终的设计目标。这意味着阵列需要每120µs刷新一次。
实操心得:在eDRAM CIM设计中,确定刷新周期不是一个单纯的电路问题,而是一个电路-系统协同优化问题。必须结合具体的应用算法(如网络规模、时间步长、激活稀疏性)进行闭环仿真。盲目追求长保持时间可能带来灾难性的精度下降,而过于频繁的刷新则会白白浪费能量。建立一个从晶体管级漏电模型到系统级精度评估的快速仿真框架至关重要。
4.2 非线性补偿与系统级精度
模拟计算永远绕不开非线性和失配问题。在这个设计中,主要面临三个精度衰减因素:
- 位线累积非线性:LIF_BL的充电电流来自每个突触单元的读晶体管(M3)。该晶体管的电流(Ids)与其漏源电压(Vds)有关。随着LIF_BL电压升高,Vds减小,Ids也会减小,导致充电电流并非恒定,从而引入非线性。论文通过仿真刻画了这种非线性关系(如图22所示),并在系统仿真器中建模,以评估其影响。
- 器件失配:晶体管尺寸的随机偏差会导致同一列上不同单元的电流存在差异。蒙特卡洛仿真显示,MAC结果对应的LIF_BL电压存在约5%的相对标准差。
- 比较器失调:用于比较V_LIF_BL和Vref的比较器存在输入失调电压,仿真得到的σ值约为15.77mV。
应对策略:
- 精细调谐的参考电压:为了补偿累积非线性,论文没有使用固定的Vref,而是使用了一组分段的、随LIF_BL电压升高而递减的参考电压(Vref1, Vref2, ...)。这样可以在不同电压区间内获得更一致的比较精度。
- 在系统仿真中建模:所有这些非理想效应都被纳入一个C++编写的SNN系统仿真器中。这个仿真器接收硬件电路的后仿真参数(如非线性曲线、失配分布、失调电压),运行完整的MNIST训练和测试流程,从而预测真实的芯片精度。这是一个硬件-算法协同设计的典范:电路的非理想特性被量化并反馈给算法评估,确保了设计目标的可行性。
4.3 实现结果与横向对比
该芯片采用28nm CMOS工艺实现。核心指标如下:
- 面积:总面积0.57 mm²,其中eDRAM突触阵列约占50.7%。
- 能效:学习模式下,处理每像素图像平均能耗为0.15 nJ。
- 精度:在MNIST数据集上,无监督STDP学习后分类精度达到89.4%。
- 性能密度:学习操作效率达11.39M FPS/W,面积效率达348.08k FPS/mm²。
与同类工作对比,该设计在几个关键维度上表现出色:
- vs. SRAM CIM:得益于eDRAM的高密度,面积效率显著提升。
- vs. 新兴存储器CIM:避免了工艺不成熟的风险,完全基于标准CMOS逻辑工艺。
- vs. 带ADC的方案:通过混合信号神经元彻底消除了ADC的巨大开销。
- vs. 其他无ADC方案:通过“减法-计数”机制,避免了简单的近似神经元模型带来的精度损失,也规避了复杂模拟电路(如电压折叠)的静态功耗和设计复杂度。
4.4 常见设计陷阱与排查要点
基于这类设计的经验,以下是一些容易踩坑的地方和调试建议:
- 潜行电流的仿真遗漏:在评估2T-1C或类似增益单元时,必须进行包含大量蒙特卡洛仿真的读操作验证。不能只看典型情况下的读裕度,要特别关注在工艺角偏差下,未被选中单元的漏电是否会导致读失败或电流累积误差超标。仿真时应将同一列上多个处于不同数据状态的单元一并纳入。
- 混合信号接口的噪声耦合:LIF_BL是一条长模拟线,对数字开关噪声极其敏感。必须精心设计电源网络,使用独立的模拟电源轨和地线,并在LIF_BL周围布置充足的保护环(Guard Ring)。时钟信号线要远离敏感的模拟线。
- 减法电路的时序收敛:工艺跟踪减法块的操作涉及模拟放电和数字比较的循环。必须确保校准过程能在系统上电后的有限时间内完成,并且校准逻辑本身在各种PVT条件下都能正确工作。要仔细验证校准状态机的鲁棒性。
- 刷新调度与系统吞吐量:刷新操作会阻塞正常的读写和计算。需要设计一个高效的刷新控制器,支持自动、后台的刷新调度,并能够被高优先级的计算请求中断(刷新暂停/继续)。在系统架构层面,要考虑刷新对最坏情况执行时间(WCET)的影响。
- STDP学习算法的硬件友好性:原始的STDP算法涉及复杂的指数函数计算,不适合硬件实现。论文中采用的NSD-STDP及其随机化版本,是将算法进行硬件友好化裁剪的典型例子。在项目初期,就必须与算法研究人员紧密合作,在保证核心功能的前提下,将算法简化为比较、加减法和随机数比较等基本操作。
这套基于3T-1C eDRAM的存内计算系统,为我们展示了一条通往高能效、高密度神经形态计算芯片的清晰路径。它没有追求最前沿但风险高的器件,而是在成熟工艺上,通过巧妙的电路和架构创新,将存算一体、混合信号处理和生物启发学习有机融合,达到了出色的综合性能。对于从事AI加速器、低功耗芯片和混合信号电路设计的工程师来说,其中关于权衡取舍的思考、解决具体电路问题的技巧,以及系统级协同设计的方法论,都具有很高的参考价值。
