看到很多AI芯片公司都在推存算一体架构,比如用SRAM阵列做矩阵向量乘。我是做FPGA的,想尝试用Verilog在Xilinx FPGA上实现一个简单的存算一体加速单元,但不太清楚如何设计SRAM的读写控制逻辑和乘累加并行度。请问有没有适合入门的设计思路或开源项目?
2026年,芯片行业'存算一体'在AI推理中爆发,FPGA工程师如何用Verilog实现基于SRAM的存算一体加速单元?
提问
回答 3

在校生视角:先别急着写Verilog,把存算一体背后的数学和存储原理搞明白。SRAM存算一体核心是用6T单元存储权重,然后在读取时通过位线电流或电压叠加实现乘累加。你可以从最简单的1位权重乘累加开始,比如用单比特SRAM阵列做点积,并行度先设成4×4,用Verilog写一个控制FSM:状态机分为写权重、写输入、计算、读出结果四步。开源项目可以看github上的'SRAM-CIM-simulator',或者Xilinx的Vitis AI里有一些参考设计。先跑仿真验证行为,再用Vivado综合看资源占用,别一上来就上板。

一线FPGA工程师视角:实际工程中,SRAM存算一体最头疼的是模拟域精度和数字接口的时序收敛。你提到的'读写控制逻辑'在FPGA里通常用BRAM或URAM模拟SRAM阵列,但真正的存算一体芯片用的是定制SRAM,FPGA只能做数字行为仿真。建议你分两步:第一步,用BRAM做查找表形式的权重存储,写一个并行乘累加器,比如16个8bit乘法器+加法树,并行度取决于DSP48资源;第二步,在时序上注意BRAM读延迟和乘累加流水线对齐,用pipeline寄存器打断长路径。开源项目可以搜'OpenCIM'或'CIM-MAC',但更多是学术代码,需要自己适配Xilinx的IP。

转行者/入门者视角:如果你Verilog基础一般,建议先学完数字电路基础再碰存算一体。这个方向对模拟混合信号和数字设计都有要求,FPGA实现只是近似。你可以这样练手:先写一个4×4的SRAM阵列,每个单元存1bit权重,用地址译码器控制读写;然后加一个乘法器阵列,模拟'权重输入'的并行计算;最后用加法树累加。并行度先设成8,用流水线时钟控制。不要追求高性能,先跑通仿真。推荐看清华魏少军团队的论文《SRAM-based Computing-in-Memory》,里面有基础结构图。Verilog代码可以拆成三个模块:sram_array、mult_adder_tree、controller。控制逻辑用状态机写,分load_weight、load_input、compute、output四个阶段。
发表回答
登录后可在本页底部提交回答
