开源一个能在 Tang Primer 25K 上实时跑 KWS 的 TinyML SoC
上一篇文章介绍的是 TinyML_NPU一个面向 TinyML 推理的 NPU IP。这次开源的是围绕这个 NPU 搭起来的完整 SoC 工程TinyML_SOC。项目地址TinyML_SOC GitHub 仓库TinyML_SOC v0.1.0 Release这篇文章只讲三件事这个项目做了什么它相比单独 NPU IP 多解决了什么问题当前实测结果是否可信1. 项目做了什么TinyML_SOC 是一个运行在Sipeed Tang Primer 25K / GW5A-25A上的实时关键词识别 SoC demo。整体路径如下I2S microphone | v VexRiscv CPU - VAD - fixed-point log-mel frontend | v TinyML_NPU - INT8 CNN inference | v UART structured log 8-bit LED result也就是麦克风持续采样CPU 做语音触发和特征提取NPU 做 CNN 推理UART 输出识别结果LED 显示类别结果它不是一个只停留在仿真的 IP demo而是已经完成了 FPGA 上板、Flash 启动、串口日志、LED 输出和自动化验证。2. 基本规格项目当前配置开发板Sipeed Tang Primer 25KFPGAGW5A-25A系统频率50 MHzCPUVexRiscv RV32IMNPUTinyML_NPURTOSFreeRTOSSRAM64 KiB固件启动SRAM boot stub QSPI XIP麦克风I2S digital mic输出UART 115200 8-bit LED任务12 类英文 KWS许可证Apache-2.0第三方组件保持原许可证仓库结构上TinyML_NPU、VexRiscv、FreeRTOS 都作为 submodule 引入。TinyML_SOC 自己负责 SoC 集成、板级工程、BSP、实时固件、烧录脚本和文档。3. 为什么要做成 SoC单独开源 NPU IP 只能说明“推理核心能工作”。但要让它变成一个真实可运行的 FPGA 应用还需要补齐很多系统问题CPU 如何配置 NPUNPU 如何通过总线访问 SRAM 和 Flash固件和模型如何从外部 Flash 启动麦克风数据如何实时进入系统frontend 放在哪里做推理结果如何输出板级时序、资源、下载、串口如何验证哪些构建产物不能放进公开仓库TinyML_SOC 做的是这部分工作。它把 NPU 放进一个 VexRiscv SoC 里通过 AHB/APB 总线连接 CPU、SRAM、QSPI XIP、I2S、UART、GPIO 和 NPU。最终效果是开发板上电后从 Flash 启动麦克风持续监听检测到语音后完成关键词识别并通过 UART 和 LED 输出结果。4. CPU 和 NPU 的分工这个项目里CPU 和 NPU 的边界是固定的。CPU 负责I2S 麦克风采样VAD 触发1024-point FFT40-bin log-melCMVNINT8 feature 准备FreeRTOS 任务调度UART/LED 输出NPU 负责读取 uOP读取 INT8 参数读取输入 feature执行 INT8 CNN写回 12 类输出 logits外部 Flash 保存XIP 固件模型参数NPU uOPFlash 布局如下External QSPI Flash 0x000000 FPGA bitstream 0x400000 KWS firmware model uOPSoC 内部把0x00100000映射到外部 Flash 的0x400000CPU 从 SRAM boot stub 跳到 XIP 固件执行。5. 串口输出启动时可以看到[TinyML_SOC] boot [TinyML_SOC] fe_init_start [TinyML_SOC] fe_init_ok [TinyML_SOC] ready mic_sr16276一次识别的输出类似[KWS] vad_trigger avg_abs... peak... [KWS] npu_start clip... [KWS] detect idx0 labelone score... margin... cycles... us...其中detect行是稳定接口脚本会解析idxlabelscoremargincyclesusLED 行为也固定one到eight对应单个 LEDup全亮down全灭noise/silence/reject不更新 LED6. 当前验证结果v0.1.0 做过以下检查项目结果make checkPASSRTL generationPASSFirmware buildPASSVCS testvectorPASSVCS PCM full pathPASSGowin implementationPASSTang Primer 25K demo checkPASS板级验证覆盖FPGA ID 可读external Flash ID 可读bitstream 写入 FlashKWS image 写入 Flash0x400000从 Flash 重新配置启动UART 正常输出 boot/ready/detectI2S 麦克风触发 VADCPU frontend 正常工作NPU 推理正常完成GPIO LED readback 正常最终板级 demo 中one/up/down都被识别到[KWS] detect idx0 labelone ... cycles2549232 us50984 ... [KWS] detect idx8 labelup ... cycles2600769 us52015 ... [KWS] detect idx9 labeldown ... cycles2550254 us51005 ...这不是只看仿真波形也不是只看 NPU 单点测试而是从麦克风输入到 UART/LED 输出的完整闭环。7. 资源和性能Gowin implementation 结果指标使用量占比Logic13980 / 2304061%Register9548 / 2328042%CLS10025 / 1152088%I/O26 / 8631%BSRAM50 / 5690%DSP19.5 / 2870%时序时钟约束Actual Fmaxclk50.000 MHz55.157 MHz固件和模型项目大小Flash KWS image188608 bytesSRAM boot stub32 bytesNPU uOP24 条768 bytesINT8 参数57344 bytesNPU input8000 bytesNPU output12 bytes板级 NPU 推理时间样本Cycles延迟one254923250.984 msup260076952.015 msdown255025451.005 ms平均256675251.335 ms这里要区分两个概念51.335 ms是 NPU 推理时间不是完整端到端 KWS 延迟当前音频窗口是 16000 samples实际采样率约16276 Hz所以音频窗口约0.983 s。NPU-only 的速度不能直接当成完整语音识别吞吐。8. 如何复现初始化gitclone https://github.com/XuZhanhe-Chi/TinyML_SOC.gitcdTinyML_SOCmakesetupmakeenv生成 RTL 和固件makesoc-rtlmakegw5a-fw生成 Gowin bitstreamexportGOWIN_IDE_BIN/path/to/Gowin/IDE/binmakegw5a-bitstream烧录 Tang Primer 25KexportGOWIN_PROGRAMMER/path/to/Gowin/Programmer/bin/programmer_climakegw5a-probemakegw5a-detect-flashmakegw5a-flash-bitstreammakegw5a-flash-kwsmakegw5a-reboot打开串口exportSERIAL_PORTftdi://ftdi:2232h/2makemonitor自动 demo checkexportSERIAL_PORTftdi://ftdi:2232h/2makegw5a-demo-check如果 VCS 可用可以跑makesim-vcs-testvectormakesim-vcs-pcm公开检查makecheck9. 开源边界这个仓库只提交源码、脚本、约束、文档和必要配置。不提交bitstreamELFbin波形文件综合实现目录训练数据训练脚本本地工具路径本地构建产物这样做是为了让仓库保持干净也方便别人 clone 后重新构建和验证。10. 适合看什么这个项目适合关注下面这些方向的人参考FPGA SoC 集成TinyML 推理加速VexRiscv SpinalHDLAHB/APB 外设集成QSPI XIP 启动FreeRTOS 裸机嵌入式固件I2S 实时音频输入NPU 和 CPU 的软硬件协同FPGA 项目开源整理TinyML_NPU 解决的是“CNN 推理核心怎么做”。TinyML_SOC 解决的是“怎样把这个核心放进一个真实系统并在 FPGA 板子上跑起来”。项目地址TinyML_SOC GitHub 仓库TinyML_SOC v0.1.0 Release

相关新闻

SpaceX 收购 Cursor、支付宝进入 AI 时代、DeepSeek 完成 500 亿元融资

SpaceX 收购 Cursor、支付宝进入 AI 时代、DeepSeek 完成 500 亿元融资

一台运行 Claude Code 的电子墨水屏设备在 X 上火了,不少开发者看完后的第一反应都是:「不知道是谁做的,但我想要一台。」有意思的是,Hackaday 报道称,开发者通过重新设计驱动方案,让电子墨水屏实现了接近 …

2026/6/30 4:28:18阅读更多 →
谷歌AI摘要系统架构解析:检索+精排+生成+校验四段式工程实践

谷歌AI摘要系统架构解析:检索+精排+生成+校验四段式工程实践

1. 这不是“一键生成”,而是工程、数据与认知的精密协作你点开一篇长新闻,右上角突然弹出三行加粗文字——“谷歌在2024年6月宣布将AI摘要功能扩展至全部英文搜索结果;该功能基于Gemini模型微调,但仅处理公开可索引网页&#xff1…

2026/6/30 4:28:18阅读更多 →
1分钟大白话___Agent是什么?为什么成为2026年最火

1分钟大白话___Agent是什么?为什么成为2026年最火

你可能没听过Agent这个词,但你大概率已经用过它了。 比如有些AI产品里多了个“智能体模式”的开关,点开之后它不再只是跟你聊天,而是会自己去翻文档、查日程、调工具,把你交代的事直接跑完。再比如你让AI自动处理表格、定时发邮件…

2026/6/30 4:28:18阅读更多 →
【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (6)--- Rollout

【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (6)--- Rollout

law-RL 是一个用于在线强化学习(Online RL)的框架,专门针对智能体工具使用场景。它通过从环境反馈中提取过程奖励信号来训练语言模型,支持三种主要模式:openclaw-rl:基于二元奖励的强化学习(Binary RL / GRPO)openclaw-opd&#x…

2026/6/30 5:38:22阅读更多 →
方法一:Manim 原生拆分法

方法一:Manim 原生拆分法

这是 Manim 中最常用、也是最灵活的方法。它的核心思想是:在创建公式时,将公式拆分成多个字符串片段,每个片段成为一个独立的对象。1.1. 代码演示from manim import *class LatexColor(Scene):def construct(self):# 1. 将公式拆分成多个字符…

2026/6/30 5:38:22阅读更多 →
Rocky 9 bond0 异常状态

Rocky 9 bond0 异常状态

报错信息&#xff1a;NetworkManager 叠加了多个连接配置&#xff0c;导致 bond0 上出现“多来源 IP” bond0: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 32:f8:3f:87:c3:b9 brd ff:ff:ff:ff:ff…

2026/6/30 5:38:22阅读更多 →
大桌面升降桌可以定制的有哪些

大桌面升降桌可以定制的有哪些

大桌面升降桌的定制可能&#xff1a;从尺寸到功能&#xff0c;解锁你的专属工作台这几年&#xff0c;越来越多朋友开始关注办公桌的“可塑性”——既想要大桌面放手头几个显示器、文件、书本&#xff0c;又希望能自由调节高度&#xff0c;坐累了站起来活动一下。市面上升降桌不…

2026/6/30 5:38:22阅读更多 →
OpenClaw.NET 重大更新:Goal 机制登场,让 AI Agent 不再“半途而废“合集 - AI开源项目(20)1.为 openclaw.net 集成 ElBruno.Mempala

OpenClaw.NET 重大更新:Goal 机制登场,让 AI Agent 不再“半途而废“合集 - AI开源项目(20)1.为 openclaw.net 集成 ElBruno.Mempala

一个让所有 Agent 开发者都头疼的问题 如果你用过 Claude Code、Cursor Agent 或者任何基于大语言模型的编程助手&#xff0c;一定遇到过这样的场景&#xff1a;你让 Agent "帮我修复这个 CI 配置问题"&#xff0c;它分析了代码、修改了一两个文件&#xff0c;然后告…

2026/6/30 5:38:22阅读更多 →
音频文件太大了?常见编码格式的体积和音质取舍

音频文件太大了?常见编码格式的体积和音质取舍

播客节目录完一期原始 WAV 文件 2GB 没法上传、自己翻录的 CD 想存手机但 FLAC 一首就 50MB、面试录音要发微信但导出 MP3 发现还是 30MB 发不出去——音频压缩的需求很常见&#xff0c;但很多人搞不清楚到底该用什么格式和码率。从原始录音到分发格式的流程录音设备出来的原始…

2026/6/30 5:33:22阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月&#xff0c;Boris Cherny 公开宣布自己卸载了 IDE。一时间&#xff0c;Vibe Coding 成了全行业最热的话题。6个月后&#xff0c;当我们回过头来拉一份真实账本&#xff0c;发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/30 4:03:30阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言&#xff1a;审计结束三个月了&#xff0c;审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间&#xff0c;内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中&#xff0c;审计…

2026/6/30 4:36:27阅读更多 →
为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南

为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南

为什么你需要Destiny 2 Solo Enabler&#xff1a;技术原理与实战指南 【免费下载链接】Destiny-2-Solo-Enabler Repo containing the C# and XAML code for the D2SE program. Included is also the dependency for the program, and image asset. 项目地址: https://gitcode…

2026/6/30 0:02:58阅读更多 →
第六章:PowerPoint 2010 核心功能与实战应用 —— 从入门到精通

第六章:PowerPoint 2010 核心功能与实战应用 —— 从入门到精通

1. PowerPoint 2010基础操作全攻略 刚接触PowerPoint 2010时&#xff0c;很多人会被它复杂的界面吓到。其实只要掌握几个核心区域&#xff0c;就能快速上手。我最开始用PPT时&#xff0c;经常找不到功能按钮在哪&#xff0c;后来发现主要操作都集中在顶部功能区。 工作窗口主要…

2026/6/30 0:02:58阅读更多 →
XGBoost超参数实战:从理论到调优策略

XGBoost超参数实战:从理论到调优策略

1. XGBoost超参数基础认知 第一次接触XGBoost时&#xff0c;我被它那密密麻麻的参数列表吓到了。这感觉就像面对一架波音747的驾驶舱——每个按钮都可能有神奇的效果&#xff0c;但按错了就可能坠机。经过多年实战&#xff0c;我发现其实掌握十几个核心参数就能解决90%的问题。…

2026/6/30 0:02:59阅读更多 →