126、NPU的FPGA原型验证:Intel OpenVINO流程
好的,我们开始。NPU的FPGA原型验证:Intel OpenVINO流程从一次半夜的“玄学”复位说起几年前,我在调一块自研的NPU原型,FPGA型号是Arria 10,跑一个轻量的MobileNet v1。仿真都过了,后仿也过了,上板一跑,前几帧推理结果全对,大概跑到第37帧,输出突然变成一坨随机数。复位重来,又是第37帧挂。我盯着逻辑分析仪抓出来的AXI总线波形,发现NPU的权重DMA在某个时刻读回的数据,地址竟然跳到了权重缓冲区的边界之外,拉回来一堆莫名其妙的数。查了三天,最后发现是OpenVINO的FPGA bitstream里,一个用于权重预取的Line Buffer深度,被我手欠改小了一格,导致在特定卷积层(恰好是MobileNet的depthwise层)的特定计算模式下,读地址计数器溢出。这个bug在纯RTL仿真里因为激励不够长,根本没触发。这件事让我深刻意识到:NPU的FPGA原型验证,不是把RTL烧进去跑个Hello World就完事的,它本质上是一个软硬件协同的“压力测试”过程,而OpenVINO就是那个帮你把压力灌进去的“水管工”。今天这篇笔记,我们就从OpenVINO的视角,聊聊怎么用Intel这套工具链,把NPU的FPGA原型跑起来,并且跑出点“真问题”。为什么是OpenVINO?而不是自己写个裸机驱动?很多做ASIC的兄弟,习惯了自己写C model,自己写testbench,然后对着波形一根一根数。但NPU的验证,难点不在