
NPU的仿真测试:使用Python模拟NPU行为昨晚调试到凌晨三点,板子上NPU的卷积输出死活不对。硬件团队说RTL仿真通过了,软件团队说驱动没问题,两边互相甩锅。我盯着波形图看了两个小时,突然意识到问题出在量化精度上——硬件仿真用的是定点数,而我的测试向量是浮点生成的。这种“仿真通过、上板翻车”的坑,我踩了不下十次。今天这篇笔记,聊聊怎么用Python搭一个NPU行为级仿真器。不是为了替代RTL仿真,而是让你在写驱动、调算法的时候,能快速验证“我的理解对不对”。为什么需要行为级仿真先说说真实场景。你写了一个NPU的卷积加速器驱动,需要往寄存器里填一堆参数:输入特征图尺寸、卷积核大小、步长、量化系数。填完之后,你期望NPU输出一个张量。但问题是——你怎么知道驱动配置对了?跑RTL仿真?一次要等半小时,改个参数又要半小时。上板实测?板子还没调通,JTAG都连不上。这时候,一个Python写的NPU行为模型,能在毫秒级告诉你“这个配置下,NPU应该输出什么”。行为级仿真的核心是:只模拟NPU的计算逻辑,不模拟时序、不模拟总线、不模拟物理层。它像是一个“数学参考模型”,用来验证你的驱动配置和算法理解。从最简单的卷积单元开始NPU最核心的操作是卷积。我们先写一个最朴素的卷积函数,注意这里要模拟NPU的“硬件特性”——比如定点数计算、累加器溢出、量化舍入。