工作两年,一直在做基于SRAM/DDR的传统计算架构数字IC设计。最近看到行业里‘存算一体’(Computing-in-Memory)的概念非常火,据说能突破内存墙,特别适合AI推理。我对此很感兴趣,想利用业余时间学习,为未来的职业转型做准备。但感觉这个概念涉及器件、电路、架构多个层面,有点无从下手。请问,对于一个有数字设计背景的工程师,应该优先阅读哪些核心论文来理解原理?有没有类似SimeCIM这样的开源仿真平台可以上手实践?或者有没有一些简化版的FPGA验证项目可以让我体验存算一体的设计流程?
2026年,芯片行业‘存算一体’成为热门方向,对于一名做传统冯·诺依曼架构数字IC设计的工程师,想了解并尝试向这个前沿领域靠拢,应该从哪些开源项目、仿真工具或学术论文入手,建立初步的认知和实践基础?
提问
回答 10

兄弟,你这问题问到点上了。我在一家做AI加速器的公司干了三年数字设计,去年开始接触存算一体,感觉确实跟传统架构差别挺大。首先,你得理解存算一体的核心是打破冯·诺依曼瓶颈,让计算直接在存储单元里完成,这样能省掉大量的数据搬运功耗和延迟。对于你这种有数字IC背景的人,建议先从架构层面入手,别一上来就啃器件物理。论文方面,推荐读一篇经典的综述:Verma等人的A Survey on Computing-in-Memory,2019年的,讲清了数字域和模拟域的区别。然后可以看一篇具体的实现,比如来自台积电和联发科的A 65nm Computing-in-Memory SRAM Macro,讲的是基于SRAM的存算一体宏单元设计,这跟你熟悉的SRAM设计有衔接点。开源工具的话,SimeCIM确实是个不错的选择,它是基于Simulink的,能模拟存算一体阵列的精度和功耗,但你需要先装Matlab,有点麻烦。另一个更轻量级的是CIMSim,是个Python框架,能跑简单的神经网络推理,而且有GitHub仓库可以改代码。如果你想动手做FPGA验证,别指望完全复现一个存算一体芯片,因为FPGA里没有真正的模拟存储计算单元。一个折中方案是搞一个数字化的近存计算(Near-Memory Computing)项目,比如Xilinx官方有个AI Inference on Zynq的教程,把权重放在BRAM里,用片上逻辑做乘累加,虽然跟存算一体有差距,但能让你体验数据流优化的思路。另外,注意避开一个坑:存算一体在数字域实现时,精度损失是个大问题,特别是模拟域的实现,所以多关注量化方法。总之,先看论文建理论,再用SimeCIM或CIMSim跑个简单模型,最后用FPGA搭个近存计算demo,这样三步走比较稳。

作为同行,我特别理解你的焦虑,毕竟两年经验正处在技术选择的十字路口。存算一体确实火,但别被概念吓到,你已有的数字设计基础其实是很大的优势,因为很多存算一体方案最终还是要靠数字逻辑来调度和纠错。我的建议是分三步走:第一步,补理论,读两篇关键论文就够了。一篇是来自清华团队的Computing-in-Memory for AI Inference: A Survey and Outlook,发表在IEEE Circuits and Systems Magazine上,把架构分类讲得很清楚。另一篇是来自亚利桑那州立大学的A 28nm 64Kb Computing-in-Memory SRAM Macro with 8b MAC Operation,这篇有具体的电路和时序图,适合你这种数字背景的人理解接口。第二步,找开源工具。我推荐用PyCIM,这是一个Python包,专门用来模拟存算一体系统的精度和功耗,你可以在GitHub上找到,它支持自定义阵列大小和量化位宽,而且有文档教你如何跟TensorFlow模型对接。你还可以试试CIMulator,它是基于SystemVerilog的仿真器,能生成网表,更贴近你的数字IC工作流。第三步,实践的话,我建议不要直接挑战全定制流片,而是去GitHub搜一下CIM-FPGA项目,比如有个叫CIM-on-Zynq的开源工程,它用Xilinx Zynq实现了基于SRAM的存算一体原型,代码里包含了权重映射、控制逻辑和验证平台。你可以把它下载下来,用Vivado跑一遍仿真,看看时序和资源消耗。另外,注意一个容易忽略的点:存算一体里的ADC/DAC设计是瓶颈,你不需要深入模拟电路,但得理解数据转换的精度对最终结果的影响,所以读论文时重点看他们怎么处理量化误差。总的来说,你只要花两个月时间,看完这两篇论文,跑通PyCIM的示例,再在FPGA上复现CIM-on-Zynq的一个小模块,就足够在面试时跟人聊起来了。加油,转型趁早!

作为一个也关注存算一体两年多的数字IC工程师,我的建议是:不要一上来就陷进器件物理里。你的数字背景其实是优势——存算一体最缺的就是能搞定数字接口和控制器的人。先读高能效计算与存储研讨会(HEART)或IEEE国际固态电路会议(ISSCC)上关于存算一体宏单元(macro)的论文,比如台积电或三星近期发表的SRAM存算一体芯片。重点关注数字接口部分,比如输入驱动、读出放大器(SA)控制、模数转换器(ADC)后处理。工具方面,绝对推荐Xilinx Vitis HLS结合Simulink的混合仿真,可以先用C/C++建模存算阵列的行为,再生成RTL。你还可以在FPGA上搭一个简化版的存算一体加速器,只做向量-矩阵乘法(VMM),用块RAM模拟存内计算单元,自己写控制器和累加逻辑。这样你就能快速体验数据流设计,而不是纠结于模拟电路细节。

你问到了核心痛点——存算一体确实跨器件、电路、架构三层,但作为数字IC工程师,你完全可以先从数字架构和仿真工具切入。我推荐你阅读台积电在IEEE Journal of Solid-State Circuits(JSSC)上关于SRAM存算一体宏的论文,重点看数字逻辑与模拟宏的交互接口。开源工具方面,除了SimeCIM,还有一个叫PUMA的存算一体仿真框架,基于PyTorch,可以让你用软件模拟存内计算的效果。如果你想在FPGA上实践,可以找开源的存算一体加速器项目,比如SparseCIM,它用Verilog实现了稀疏矩阵的存内计算,你可以在Xilinx或Altera开发板上跑。关键是要理解存算一体中数字部分的挑战:如何设计行缓冲、累加器、以及处理模拟计算的非理想性。建议先从最简单的8位精度开始,逐步增加复杂度。

作为一个同样从传统数字设计转过来的过来人,我特别理解你这种“想学但不知从哪啃”的感觉。存算一体确实是个多层交叉的领域,但好消息是,你的数字设计背景其实是个很好的切入点,因为很多存算一体芯片的接口和外围依然是数字逻辑。我建议你先从“数字视角”的存算一体入手,别一上来就陷进器件物理。
第一,论文方面,优先读两篇综述,一篇是IEEE Access上2020年左右那篇“A Survey of Computing-in-Memory”,另一篇是2022年ISSCC上关于模拟存算一体的tutorial。这两篇能帮你理清“近存计算”和“存内计算”的区别,以及数字存算一体(比如基于SRAM的CIM)和模拟CIM的优劣。然后深入读一下“SimeCIM”论文,那是台大团队的开源仿真器,完全针对存算一体架构设计,可以让你在数字层面建模阵列计算。
第二,工具上,SimeCIM确实值得上手,它基于Python+Verilog混合,你可以先用它跑一个简单的VGG或ResNet推理任务,观察数据流和精度损失。另外,UC Berkeley的“Gemmini”开源加速器生成器虽然偏向近存,但它的脉动阵列结构对理解存算一体很有帮助。
第三,FPGA实践的话,我推荐你在Xilinx的Pynq板上搭一个简化版的SRAM存算一体宏。具体做法:用BRAM模拟计算单元,每次操作时把权重和输入同时送入BRAM,利用BRAM的双端口特性实现乘加。网上有开源项目叫“FPGA-CIM”,用HLS实现,你可以直接fork下来改改。注意,FPGA上的BRAM毕竟不是真正的模拟存储单元,但你可以模拟数字CIM的控制流程,比如多周期累加、ADC接口时序。
最后,提醒一点:别试图一次性搞懂模拟CIM里的ADC和DAC细节,那是模拟工程师的活。你先把数字控制路径、数据映射、流水线调度搞明白,就能在团队里找到自己的位置。

兄弟,两年数字设计经验转存算一体,时机正好,因为这个方向现在缺的就是能把架构落地成数字逻辑的工程师。不用慌,我给你一个能直接在工位上操作的路线图。
先从开源项目入手最实在。GitHub上搜“openCIM”这个项目,是清华团队做的存算一体仿真和综合框架,它支持你从RTL级描述CIM阵列,然后自动生成版图级别的功耗、延迟报告。你直接clone下来,按照README装一遍,跑个他们自带的8位乘加例子。跑通之后,重点看他们的“sram_macro”文件夹,里面是用Verilog描述的SRAM单元,但加入了计算模式的读写控制,这就是数字工程师最该学的东西——如何把存储阵列改造成计算阵列。
仿真工具方面,除了SimeCIM,你还可以试试“DNNBuilder”这个开源工具,它虽然是针对FPGA的DNN加速器,但支持近存计算结构。你用它搭一个层间流水,就能直观感受到“计算靠近存储”带来的带宽红利。别小看这个,很多存算一体芯片的控制逻辑和它一模一样。
学术论文的话,我建议直接读ISSCC 2023和2024里面的存算一体session。重点看三星、台积电和国内一些公司(比如知存科技)发的那种带芯片实测结果的论文。比如“A 28nm 16.7TOPS/W SRAM Computing-in-Memory Macro”这种,里面会有详细的数字控制时序图,你完全可以用Verilog复现那个控制器。
FPGA验证这块,有一个叫“CIM-FPGA”的Xilinx项目,它用UltraScale+的BRAM和DSP48E2搭了一个可配置的CIM阵列。你可以在Vivado里直接添加这个IP核,然后写一个简单的A+B测试向量。重点体验的是:1)如何把多个BRAM并行读出做乘加;2)如何用移位寄存器做累加;3)如何设计读写冲突避免逻辑。这些都是传统DDR设计里没有的。
最后给你个忠告:存算一体虽然火,但行业还在分化。数字CIM(比如SRAM-based)和模拟CIM(基于Flash或RRAM)差别很大。你作为数字工程师,优先搞懂数字CIM,因为它的设计方法和传统数字IC最接近,而且很多初创公司都在用。模拟CIM的算法映射和校准补偿,留给模拟工程师去头疼吧。等你把数字CIM的控制路径吃透了,再回头看模拟CIM,就会发现那不过是换了个存储介质,控制逻辑还是那一套。

我是做数字后端验证转过来的,当时也跟你一样困惑。先讲结论:对于有数字设计背景的人来说,最直接的切入点是数字存算一体(Digital CIM),避开模拟/混合信号那一大堆器件和工艺坑。
你提到的SimeCIM确实是个好起点,它是清华魏少军团队开源的,基于Verilog和C++混合仿真,能直接跑CIM架构的RTL级验证。你可以先从它入手,搭一个简单的向量-矩阵乘法器,里面用到的就是SRAM位单元加数字加法树,跟你日常做的数字逻辑完全衔接得上。
论文方面,我建议先读ISSCC 2021上Mythic那篇关于可编程CIM处理器的文章,再看2023年三星那篇基于MRAM的存算一体论文,搞清楚为什么用SRAM做CIM比用RRAM更成熟。工具链上除了SimeCIM,还可以关注一下UCSB的PyCIM库,它能帮你直接在Python里把算法映射到CIM阵列上,不用写底层Verilog。
FPGA验证的话,Xilinx的Vitis AI里有一些CIM IP核的参考设计,但更轻量的做法是用PYNQ-Z2板子,配合开源的CIM-DNN项目,在PL端实现4×4或8×8的小型CIM阵列,PS端控制数据流。整个过程大约两周能跑通一个极简的MNIST分类器。
一个小提醒:不要一上来就追最前沿的模拟CIM论文,先把数字CIM的架构搞懂,再慢慢看变体。数字CIM的精度和可综合特性才是你们数字工程师的护城河。

两年经验转型其实挺合适的,既不会被传统架构框死,又有足够的RTL功底。我也在断断续续学这个,分享点踩坑后的心得。
首先别被器件层面吓到,你不需要懂晶体管级怎么存储,你只需要知道CIM本质上就是把乘法累加(MAC)操作搬到存储阵列内部去执行。作为数字工程师,你关注的是计算单元如何被寻址、如何控制读写时序、如何把结果汇总出去。
开源项目的话,除了SimeCIM,强烈推荐你看一下GitHub上的CIM-SIM,它是一个纯Python的周期精确仿真器,支持SRAM和RRAM两种存储介质,而且可以自定义阵列大小和位宽。配合它文档里的几个例子,三天就能理解CIM的流水线结构和能效瓶颈。
论文优先级:先看IEEE TCAS-I 2022上那篇综述《Computing-in-Memory: A Review of State-of-the-Art》,建立全貌。接着读两篇经典架构:一是TSMC在VLSI 2020上发表的基于SRAM的CIM宏单元,记住它的行/列读出和逐位累加方式;二是台湾大学在JSSC 2020上那篇带ADC的混合信号CIM,这是模拟方向的入门。
FPGA验证方面,你可以去搜一下OpenCIM,它提供了一个完整的RTL到比特流的流程,在Xilinx Artix-7上就能跑。它的设计思路是把BRAM当作CIM单元,用LUT实现加法树,最后通过AXI总线挂到CPU上。我照着做了一遍,发现最大的坑是BRAM的读端口延迟会导致乘累加结果错位,需要在时序约束里做调整。
最后建议先从SimeCIM的入门教程走起,它自带一个8位整数CIM核的RTL代码,你直接看它的testbench和波形,比自己瞎写有效率得多。等跑通这个,再考虑去读那些带Flash或RRAM的进阶论文。

你好,我也是从传统数字设计转过来的,理解你那种“看上去很热闹但找不到门”的感觉。作为有两年经验的设计工程师,我们的优势是懂RTL、懂时序、懂SoC集成,所以建议你别一开始就扎进器件物理或模拟电路,容易劝退。优先从“架构级”和“仿真平台”切入。
首先,必读论文建议从四篇开始:一篇是Wenjian Yu的《A Compute-in-Memory Design Based on Emerging SRAM》,讲最贴近我们的SRAM存算一体结构;另一篇是《PIM-DRAM: A Processing-in-Memory Architecture for Neural Network Training》,讲DRAM方案;再加一篇综述《A Survey of Computing-in-Memory: Architectures, Circuits, and Applications》,快速建立全景。最后看一篇ISSCC或JSSC上的SRAM-CIM实测芯片论文,比如《A 28nm 64Kb Computing-in-Memory SRAM Macro》,感受真实设计约束。
仿真工具方面,SimeCIM确实是个好起点,它基于Python,能模拟宏单元级的能量和精度,但你更需要的可能是“能跑RTL”的环境。推荐关注GitHub上的CIM-Sim项目,它提供了Verilog-A的存算单元模型,配合Cadence Xcelium可以跑混合仿真。如果想纯数字逻辑验证,可以搜“Digital CIM Simulator”,有些开源项目用SystemVerilog搭建了存算阵列的RTL模型,你能直接上手改时序。
FPGA验证方面,别追求完整宏单元,那是模拟的事。建议从“乘加阵列的存内计算近似”入手,比如用BRAM模拟权重存储,用LUT加进位链模拟乘加,写一个简化版的“SRAM-CIM MAC阵列”,跑一个简单CNN的Kernel。GitHub上搜索“FPGA-CIM”或“in-memory-computing-FPGA”,有几个小项目是照搬论文的,虽然性能不理想但流程完整。记住一点:存算一体在FPGA上做不了真模拟存算,只能做“数字近似”,重点在于理解数据流和宏单元控制逻辑。
最后提醒,别急着转型,先在原有项目里找“数据搬运瓶颈”,试着用存算思维优化,比如把卷积层的权重预存到BRAM并直接乘加,这本身就是CIM的雏形。这样既有产出,又能积累经验。

我是做数字验证的,去年开始自学存算一体,踩了一些坑,分享点实用的。你的痛点其实不是学不会,而是“怎么动手验证”。纯看论文容易飘,一定要有实操。
第一,论文别贪多,先盯紧“基于SRAM的存内计算宏单元”这个子方向,因为你最熟SRAM。推荐《A 65nm 4Kb S-CIM Macro with Saddle-Node Sensing》和《A 28nm 2Mb RRAM-Based Computing-in-Memory Macro》,注意看它们的时序图和宏单元控制信号(如WL、BL、SAE),这些和传统SRAM读写很像,只是多了位线加法和模拟计算。建议你画个时序对比图,一目了然。
第二,开源工具我试过两个:SimeCIM适合做精度分析,但你数字出身可能觉得不过瘾;更推荐“OpenCIM”这个项目,它提供了完整的数字宏单元Verilog代码和Python测试脚本,你能直接跑RTL仿真,看乘法累加结果。还有一个小众的“NeuroSIM”,虽然偏架构级,但它的Python仿真器能输出每层能耗,对理解“为何省功耗”很有帮助。
第三,FPGA实战是关键。别一上来就想复现整个CNN,先实现一个8×8的存算乘加阵列。具体步骤:用BRAM模拟权重存储(每个单元存4bit权重),用分布式RAM模拟输入,然后用组合逻辑写出乘加树(注意要流水化)。关键点是模拟“读操作即计算”,即当你读取BRAM中的权重时,同时用输入数据做乘法。我在Xilinx KC705上跑过,200MHz没问题。GitHub上搜“simple-cim-fpga”能找到类似框架。
第四,注意两个常见坑:一是存算一体宏单元的时序收敛非常难,因为位线延迟和读取路径不对称,建议先用异步设计再转同步;二是精度问题,FPGA无法模拟模拟计算,所以你的结果和真实芯片有差距,但设计流程是一样的,比如控制信号产生、宏单元选择、数据排布。
最后,建议你加入Chiplet or存算一体相关的技术交流群,很多论文作者会分享仿真脚本。多问“这个宏单元的控制逻辑怎么实现”,比单纯看书效率高。
发表回答
登录后可在本页底部提交回答
