最近在调研存算一体方向,老板想让我们用FPGA搭一个SRAM和RRAM混合的存算一体原型验证平台。我查了论文发现大部分都是纯SRAM或者纯RRAM的方案,混合架构的案例很少。想问问有没有实际做过的大佬,混合架构下计算阵列怎么划分?是行级混合还是列级混合?数据流和权重映射策略有什么区别?另外RRAM的阻变特性在FPGA上怎么建模比较靠谱?有没有推荐的仿真工具或者开源项目可以参考?
2026年了,FPGA工程师做存算一体AI加速器,SRAM和RRAM的混合架构该怎么设计?
4 个回答

先别急着定行级还是列级,这个得看你的计算模式。如果卷积核权重是整块重用的,按矩阵块划分最省事:权重敏感的层整块放RRAM,频繁更新的层整块放SRAM,块间用数据流调度衔接。FPGA上模拟RRAM,个人感觉用查找表搭个可配置阻变模型就够用了,重点是把写入延迟和读干扰的时序特性仿出来,别一上来就追精度。仿真工具的话,Vivado自带的行为级建模够用,开源项目可以搜一下存算一体相关的HLS库,但别指望直接拿来用。你老板说的原型验证平台,主要目的是验证数据流还是验证器件特性?这个定了才好往下拆。

说个实际点的思路:混合架构的关键不在阵列怎么摆,而在你愿不愿意接受异构的编程模型。行级混合的好处是控制简单,一行SRAM一行RRAM轮着用,但带宽容易卡在RRAM那侧;列级混合带宽均衡些,可权重映射就得按列拆,软件那边要改的东西多不少。建议你按层来切,别按行或列较劲——把整个卷积层映射到一种存储上,层间用流水线衔接,这样FPGA验证时还能复用现成的加速器框架。RRAM建模的话,别用纯Verilog死磕,用SystemVerilog写个行为模型,把阻变简化成两态加一个写入时间参数,够验证数据流用了。仿真工具推荐Vivado HLS或者Vitis,配合MATLAB做权重分布预分析。开源项目可以看看几个大学实验室的存算原型,虽然大多是纯SRAM的,但数据流调度部分能参考。你现在的FPGA是什么型号?资源量决定你能放多大阵列,这直接影响混合比例的选型。

顺着你老板的思路往下推一层,混合架构的真正难点不是电路,是权重映射的粒度问题。论文里纯SRAM或纯RRAM好写,是因为整个阵列同质,编译器可以做全局最优;混合架构一出来,你得先定义什么叫混合——是同一层内不同矩阵块用不同存储,还是不同层用不同存储?前者是空间异构,后者是时间异构,数据流设计完全两回事。空间异构适合权重静态但分布不均的模型,比如某些层稀疏度很高,用RRAM省面积,但写一次太慢,权重更新频繁的层就得换SRAM;时间异构简单,按层切,但切换时存储间要搬权重,这个开销容易被忽略。FPGA验证时,建议先用纯SRAM把计算阵列跑通,再拿一小块区域模拟RRAM,对比两者在延迟和功耗上的差异。RRAM建模别太较真,阻变特性在原型验证阶段用两个反相器加个可变电阻模型就够了,重点测数据流调度——什么时刻该从RRAM读,什么时候该写回,这个比器件精度重要得多。仿真工具推荐用C++写个事务级模型,先算清楚带宽匹配,再落到RTL,效率高很多。开源项目可以去GitHub搜AI accelerator相关的,有几个存算一体框架的调度器能借鉴,但驱动和底层都得自己改。你老板如果只要求发论文,做到时间异构加行为级建模就够毕业了;要是真想流片,那FPGA原型只是第一步,后面还有器件模型校准和容错设计等着你。你目前课程里做过存储层次的性能分析吗?这个基础决定你上手快慢。

说点泼冷水的。你查论文发现混合架构案例少,不是没人做,是这方向太容易写成工程报告而不是学术贡献。老板让你搭FPGA原型,大概率是冲着验证可行性和拿项目结题去的,所以你的设计目标应该是快速跑通端到端推理,而不是在阵列划分上追求理论最优。建议你直接按层切,权重敏感的卷积层丢给RRAM模拟模块,全连接和归一化层放SRAM,这样工作量最小,还能跟论文里分层加速的叙事对上。数据流调度方面,别自己发明,参考经典的脉动阵列思路,把RRAM侧的读数据做成流水,SRAM侧做预取,中间加个FIFO缓冲就够用了。RRAM建模用查找表加状态机,写个支持写延迟和读扰动参数的模块,控制在两百行以内。仿真工具别折腾新玩意儿,Vivado自带仿真器加Python脚本做权重分布分析,足够应付中期检查。开源项目参考价值其实有限,不如直接看几篇2023年后的存算一体综述,把里面的架构图画出来对比一下。你最好先确认老板期望的交付物是能跑通ResNet还是只要单层验证,这两个工作量差着三倍以上。你目前是研一还是研二?这决定你该往深做还是往快做。
发表回答
登录后可在本页底部提交回答