An 8T SRAM Based Digital Compute-In-Memory Macro For Multiply-And-Accumulate Accelerating
introduction
相比模拟counterparts,数字CIM具有灵活的可编程性、推理精度等优势。然而,先前的工作采用复杂的SRAM bit-cells和计算部件,导致了较大的面积负担。本文提出了一种8T SRAM bit-cell来实现1-bit乘法,没有读写冲突(read-disturb issue),同时我们采用了交织的加法树和双供应电压策略来实现计算电路的面积和功耗归约。 实验中,16KB SRAM-CIM宏采用40nm CMOS工艺,仿真结果表明在4b输入和权重的乘法中可以实现820GOPS吞吐量和94TOPS/W的能量效率,同时实现$1.3\times $的能量效率提升和70%的面积归约。
SRAM-CIM具有模拟和数字方法。
在模拟方法中,权重通常存储在bit-cells,通过由位单元存储节点的充电或放电实现元素乘积,部分和通过位线上累加的完整电流(模拟信号)来表示,数据转换电路如ADC可用于实现后续的信号处理。模拟CIM方法具有fast spped和high energy efficiency,但是推理精度会受到PVT(process,vlotage和temperature)、variation和nonlinearity影响。此外,数据转换电路和低精度问题是主要的两项挑战,进而限制了其使用。 6T-SRAM同样面临着read-disturb的问题,所有行都需要同时被打开以实现并行性。尽管这可以通过使用额外的晶体管来作为读取缓存器、隔离存储节点和BLs,面积负载会进一步增加。
在数字方法中,通过专用SRAM Bit-cell如6T和额外的CMOS NOR门来实现乘法。除此以外,嵌入计算逻辑通常在SRAM阵列中使用以实现并行加法。数字方法的推理精度损失对噪声和工艺variation不敏感。
架构设计
整体架构
SRAM ARRAY的size为16KB(\(64\times 256\)),array被分为64个banks,每个bank包含\(64\times 4\)的SRAM Array,IAT(Interleaving adder tree,交织加法树)和累加器。通过可编程控制器,可以控制CIM macro用于SRAM或CIM模式。
SRAM模式中,读写操作同6T-SRAM。SRAM外围短路包含预充电电路和感测放大器等经典成分。CIM模式中,输入位宽任意(1b-16b),权重为4b或8b。输入数据是由输入控制器控制的,以bit-serial方式会喂入基于8T的传输晶体管(PT-8T)中来生成乘积结果。对输入的相同比特,64个部分积会在1个始终产生,IAT会计算累加和并deliver到累加器中,最终累加器通过移位和加法计算MAC结果。
下图所示为PT-8T SRAM的原理图和layout,与经典6T SRAM一直除了使用了包含MN5和MN6的传输晶体管逻辑AND。
在SRAM模式中,对于读操作,在WL被选通前,BL和BLB被预充电。根据存储的数据,存储节点沿位线放电,SA会捕捉位线上的voltage drop输出结果。对于写操作,需要被写入的数据加载到位线上,一旦WL选通,位线会有条件地对存储节点放电。
在CIM模式中,存储在危险中的权重会被输入相乘通过传输晶体管逻辑。区别于其他CIM工作,WL并不需要打开,MN3和MN4在矩阵乘法期间是关闭的,因此不存在读-干扰问题。
IAT中使用了两种全加器(28T和10T),28T FA比10T FA更快(由于CMOS逻辑和对噪声的不敏感性),但是28T FA的面积和功耗显著高于10T FA。
为了实现功耗、性能和面积的平衡,IAT结构通过交织两种FA来保证面积、速度。10T FA存在阈值电压损失、这部分说你是会分发到下一级,进而导致malfunction。交织结构会阻碍电压分发(因为28T FA能够restore back电压到supply rails)。这里也采用了一种平衡设计,第一阶段采用10T FAs来节省面积,最后一个阶段使用28T FAs来提高性能(最后一级只有1bit数据)
为了提高权重位精度的灵活性,我们设计了结果组合电路(result combination circuit),这由32对加法器和复用器组成。对于8b权重,高4b和低4b存储在两个相邻banks的同一行。两个bank的MAC结果被移位和累加生成最后的MAC结果。对于4b权重,移位和加法逻辑被跳过。
CIM操作中:由于bit-serial输入范式,输入的位宽任意,输入在每个时钟周期从MSB到LSB被喂入SRAM array。模拟CIM中输入位宽和权重位宽通常是固定的,数字CIM具有更灵活的输入位宽配置。
存储在bit-cells中的权重和1-bit输入相乘(AND),对相同的权重,本结构会生成64个部分积(4-bit)。部分和会在IAT中相加、10bit累加和会被分发到累加器。在累加器中,来自上一个时钟的结果会被左移1bit并和当前始终的结果累加。