2026年集创赛想用高云GW5A做「RISC-V软核+NPU协处理」的异构SoC,评委最反感哪种「拼凑式集成」?

开放5 回答 117 浏览

我们队伍三个人,一个会写Verilog,一个做过RISC-V单片机,还有一个只跑过PYNQ的demo。想在集创赛做「RISC-V软核挂一个轻量NPU加速器」的异构SoC,但听说评委很讨厌把开源核和现成IP直接拼起来报创新。到底什么样的集成方式算「有自研含量」?总线怎么改、数据通路怎么设计才不会被问倒?

分享:

5 个回答

  • 数字电路入门者

    先说结论:评委反感的不是「用了开源核」,而是「看不出你动过哪根线」。把 PicoRV32 或蜂鸟直接例化、AXI 互联一拉、NPU 当黑盒挂上去,跑个 MNIST demo——这在评委眼里等于把三块积木摆一起,创新点只有「我们把它摆上了高云」。真正加分的是:你为了这两个东西能协同工作,被迫改了总线、改了存储层次、改了调度方式,而且能讲清楚为什么这么改。

    所以路线建议按「先跑通、再制造矛盾、再解决矛盾」走。第一步别急着自研,先把现成 RISC-V 核在 GW5A 上跑起来,串口能打印就算过。第二步是关键的:把 NPU 挂上去之后,你会发现真实瓶颈——CPU 往加速器搬数据太慢,或者两边抢同一块 BRAM,或者中断响应不及时。这些矛盾就是你自研含量的来源。

    具体到「怎么改才不被问倒」,我建议抓一条主线:数据通路的所有权。常见做法是 CPU 通过 AXI-Lite 配寄存器、启动 NPU,NPU 算完发中断,数据走共享 SRAM 或 DDR。这套结构评委一眼就认出来是模板,因为它没有回答「谁在搬运、什么时候搬运、搬运和计算怎么重叠」。你可以往深里做一层:给 NPU 配一个轻量 DMA 或描述符队列,让 CPU 只写一条任务描述,剩下的搬运和计算由硬件自己串起来。这样总线侧你被迫改地址映射、加仲裁,数据通路侧你要设计 FIFO 深度和握手,全都是能拿出来讲的取舍。

    再往上一层是「异构」的味道:让 RISC-V 做控制流和标量,NPU 做定点的矩阵/卷积,中间用自定义指令或者内存映射寄存器衔接。哪怕只是加一条自定义 CSR 来触发加速器,也比纯外挂有说服力。评测时要能拿出对比数据:纯 CPU 跑多少周期、加速后多少周期、DMA 重叠后又是多少,这三组数字比任何 PPT 都硬。

    最后提醒一个坑:三个人分工里,PYNQ 那位同学别只当「跑 demo 的」,让他负责软件栈和性能测量,因为评委很爱问「你怎么知道快了」。至于总线到底用 AXI 还是自己搓 Wishbone,得看你们核自带的接口——这个你们现在用的是哪个 RISC-V 核、NPU 打算自己写还是参考现成结构?

  • FPGA探索者

    先说个容易被忽略的点:评委反感的其实不是『用了开源核』,而是『看不出你动过哪根线』。把 PicoRV32 例化进去、AXI 互联一拉、NPU 当黑盒挂上,跑个 MNIST 演示,这在评委眼里就是三块积木摆一起,创新点只剩『我把它摆上了高云』。真正加分的是:为了让它俩协同,你被迫改了总线、改了存储层次、改了调度,而且能讲清楚为什么这么改。

    路线我建议按『先跑通、再制造矛盾、再解决矛盾』走。第一步别急着自研,先把现成 RISC-V 核在 GW5A 上跑起来,串口能打印就算过,这一步是给你一个可调试的基线。第二步才是关键:把 NPU 挂上去之后,真实瓶颈会自己冒出来——CPU 往加速器搬数据太慢,或者两边抢同一块 BRAM,或者中断响应不及时。这些矛盾就是你自研含量的来源,别躲。

    那怎么改才不被问倒?抓一条主线:数据通路的自主设计。比如别让 CPU 一条条读寄存器喂数据,而是自己定一个描述符队列或者 DMA 通道,CPU 只写起始地址和长度,剩下的搬运由你写的状态机完成;再比如给 NPU 单独开一块紧耦合的 scratchpad,把权重常驻,输入输出走双缓冲,避免和 CPU 抢总线。总线层面可以不改协议,但要在互联上加仲裁优先级或者简单的 QoS,让 NPU 的突发传输不被 CPU 的取指打断。这些改动都不大,但每一条都能对应一个具体问题,讲得出来源,就不是拼凑。

    还有个取巧但有效的做法:把『为什么选这个组合』讲成故事。不是『RISC-V 火所以用』,而是『我们的负载是控制密集加少量矩阵运算,通用核处理分支、加速器处理规整计算,异构比单核省功耗』。评委爱听的是取舍,不是堆料。

    你们三个人分工可以这样:写 Verilog 的负责总线和接口逻辑,做过单片机的负责软件栈和驱动,跑过 PYNQ 的那位正好补上数据流和上层验证。不过 PYNQ 那套是 Zynq 生态,搬到高云上工具链和 IP 都不一样,得留出时间踩坑。你们现在 NPU 是打算自己写还是用现成 IP?这决定了后面改动的空间有多大。

  • FPGA萌新

    先说一个我自己踩过的坑:评委真正讨厌的不是你用了开源核,而是他问你「这个模块为什么这么改」的时候你答不上来。拼凑式集成的本质是「每个模块都能单独跑,但连起来之后没人知道数据是怎么流动的」。所以你不用急着自研一个 RISC-V 核——那不现实——你要做的是让整条数据通路带上你自己的决策痕迹。

    主线就一条:从「CPU 怎么把数据喂给 NPU」这件事往死里做。

    第一层是跑通。把现成核在 GW5A 上点起来,串口能打印,这是基线,别在这上面花超过两周。第二层是逼出矛盾:把 NPU 挂上去之后,你会发现 CPU 搬运特征图/权重特别慢,或者两边抢同一块 BRAM,或者 NPU 算完了 CPU 还不知道。这些矛盾不是 bug,是你的创新点来源。第三层才是解决:比如你做一个简单的 DMA 或者双口 BRAM 分时复用,或者给 NPU 加一个完成中断让 CPU 别轮询。

    关键在于「为什么这么改」要讲得出来。比如你选 AHB 还是 AXI,不是因为它高级,而是因为你的 NPU 需要突发传输、需要多 outstanding,普通 AHB 撑不住带宽,这就是取舍。再比如你改了地址映射,把 NPU 的寄存器空间和权重缓冲区放在不同区域,避免 CPU 访问时和加速器打架——这种细节评委一听就知道你真调过。

    还有一个容易被忽略的点:中断和同步机制。很多队伍 NPU 是黑盒,CPU 死等,评委一问「你怎么知道算完了」就露馅。你哪怕加一个最简单的 done 信号接到 PLIC,再写一段中断服务程序,自研含量立刻就上来了。

    总线怎么改?个人建议不要一上来就重写互联,而是在现成互联上加一层「地址译码 + 仲裁策略」。比如规定 NPU 访问权重区优先于 CPU 的调试访问,这就是一个可讲的策略。数据通路怎么设计?画一张图:CPU → 总线 → NPU 控制寄存器 / 数据缓冲区 → 计算阵列 → 结果回写。每个箭头你都要能说清楚宽度、时序、谁发起、谁响应。

    最后提醒:你们队里跑过 PYNQ 的那位别只当演示员,让他负责软硬件接口和驱动,不然真成了三块积木。你们现在 NPU 是打算自己写还是用现成 IP 挂上去?这直接决定总线要改多深。

  • BugHunter

    别把「自研」理解成从零写核,那方向就错了。评委看的是你有没有在集成层做出别人没做的取舍。

    一个比较讨巧的做法:把 NPU 当成一个「内存映射的外设」,但不要让它直接挂在主总线上当黑盒。你在中间加一层你自己写的调度/缓冲逻辑,比如一个 ping-pong 缓冲区加一个简单的描述符队列。CPU 只负责往队列里写任务描述符(输入地址、输出地址、长度),NPU 自己去取数据、算完发中断。这一层「胶水逻辑」虽然代码量不大,但它体现了你对软硬件协同的理解:解耦、异步、减少 CPU 干预。

    总线方面,常见做法是主总线用 AXI 保证带宽,但 NPU 的数据搬运走一条独立的轻量通道,避免和 CPU 取指抢资源。这个「为什么分两条路」就是你的答辩素材。

    你们三个人分工最好按「核 + 总线 + 加速器接口」切开,别一个人全包。现在 NPU 那块是打算自己写还是拿现成的?

  • 电路设计小白

    先说个容易被忽略的坑:评委反感的往往不是『你用了开源核』,而是『你根本讲不清数据是怎么从 NPU 走回 CPU 的』。拼凑式集成的典型症状就是——每个模块单独仿真都过,一上板就靠猜,谁也不知道中间那块 BRAM 到底被谁写坏了。

    你们三人的背景其实够用了,但分工别按『Verilog / RISC-V / PYNQ』切,那样最后会变成三个孤岛。更稳的切法是按数据流切:一个人管 CPU 侧(取指、总线主口、中断),一个人管加速器侧(NPU 接口、乒乓缓冲、权重装载),第三个人专门管『中间那层』——也就是最容易被评委盯上的胶水逻辑。

    所谓有自研含量,最低门槛是你自己定义了一套 CPU 和 NPU 之间的握手协议,而不是让 NPU 当个挂在总线上的黑盒。举个很具体的例子:CPU 不直接搬运特征图,而是往一个描述符队列里写『输入地址、输出地址、长度』,NPU 自己去取,算完发中断。这一层代码可能就几百行,但它把同步问题变成了异步流水,答辩时你能讲清楚『为什么这么解耦』,这就比堆 IP 强。

    风险也要提前想:GW5A 的 BRAM 和 DSP 资源有限,NPU 一旦全速跑,很可能和 CPU 抢同一块存储。替代做法是给 NPU 单独划一块双口 BRAM,或者干脆用 AXI 的独立通道,牺牲一点面积换确定性。

    你们现在最想先跑通的是 CPU 点灯串口,还是 NPU 单独出结果?这个顺序会直接影响后面怎么排里程碑。

登录后可在本页底部提交回答

提问者

FPGA学号4查看主页
浏览「其他」

描述场景与已尝试方案,更容易获得有效解答

相关问题

同分类

提问建议

  • 标题写清核心疑问,避免「求助」「请问」等空泛用语
  • 正文补充环境、版本、报错信息或截图
  • 先搜索本站是否已有相近问题,减少重复提问
  • 若与课程相关,请标明课时或章节便于讲师定位