2026年FPGA大赛用国产高云做RISC-V软核,SPI Flash配置失败导致程序跑不起来,是引脚分配问题还是启动模式没设置对?

开放5 回答 51 浏览

备赛只剩一个月,板子是高云GW2A,RISC-V软核综合下载后串口没打印,怀疑是SPI Flash启动模式没配对。我们检查了引脚约束和MSPI模式,但文档太少,不确定是Flash地址映射还是启动模式跳线问题。有没有做过高云RISC-V软核启动的,能说说排查顺序吗?

分享:

5 个回答

  • FPGA萌新

    先说结论:一个月备赛,别把时间花在怀疑引脚约束上,优先按「谁在启动时读 Flash」这条主线排。高云 GW2A 的 MSPI 是硬核控制器,上电后是它去读 Flash,而不是你的 RISC-V 软核直接管 Flash。真正决定「能不能从 Flash 起来」的,是启动模式选择、MSPI 的专用引脚约束、以及你烧进去的镜像地址映射这三件事是否自洽。

    排查顺序我建议这样走。第一步,先确认启动模式。高云器件一般有 MSPI 启动、JTAG 配置等模式,靠 MODE 之类的跳线或配置脚电平决定。这一步最便宜,拿万用表量一下跳线电平,对照手册里那张启动模式表,确认板子上电后确实进的是 MSPI 主模式。很多人失败在这里:程序用 JTAG 能跑,一断电从 Flash 起就死,因为跳线还停在 JTAG 模式。

    第二步,查 MSPI 专用引脚。GW2A 的 MSPI 引脚是复用/专用功能,约束文件里必须把它们约束到对应 bank 的正确位置,而且这些脚在配置阶段的行为和普通 IO 不一样。常见坑是:约束里把 MSPI 脚当普通 SPI 又分配了一次,或者约束了但 bank 电压不对,导致上电读 Flash 时波形根本出不来。

    第三步才是地址映射和镜像。你的软核程序入口地址、链接脚本里的 ROM/RAM 基址,要和 Flash 里镜像被读取后落到哪块存储对上。如果软核期望从某段 BRAM 取指令,但 MSPI 只负责把数据搬进片内,那中间的搬运和入口跳转必须一致,否则现象就是串口一声不吭。

    验证手段上,逻辑分析仪抓 MSPI 的 CLK、CS、MOSI 最直接:上电瞬间有没有读命令、地址对不对、Flash 有没有回数据,一看就清楚。有波形,问题在地址映射和软核入口;没波形,问题在启动模式和引脚。按这个二分法,一天内能缩到具体环节。你们现在 JTAG 下载后能跑吗,还是说 JTAG 下也不打印?这个信息能直接决定先查哪一头。

  • HelloGeek

    先看跳线是不是 MSPI 启动,再确认约束里 MSPI 专用脚没被当普通 IO 重复分配,最后抓上电瞬间的 CS 和 CLK。有波形就是地址映射/入口问题,没波形就是模式或引脚。

  • 电子技术萌新

    个人感觉这类问题最容易把人带偏的地方,是一上来就盯着引脚约束反复改。其实高云这套流程里,配置阶段读 Flash 的是 MSPI 硬核,你的软核程序还没开始跑,所以「串口不打印」这个现象发生在很早的阶段,得先证明 MSPI 到底有没有在读 Flash。

    一个比较省事的判断办法:拿逻辑分析仪挂在 MSPI 的时钟和片选上,上电复位那一下看有没有活动。如果有,说明启动模式和引脚基本没问题,接下来去查镜像有没有正确烧进 Flash、链接脚本里的入口地址和实际加载地址是否一致,以及软核复位后取的第一条指令到底指向哪。如果没有活动,那八成是模式跳线不对,或者约束把 MSPI 脚配错了,这两件事比地址映射更靠前。

    备赛时间紧,建议就按「上电有没有读 Flash 波形」这一个信号做分水岭,先别同时改三四个地方,不然改对了也不知道是哪一步起的作用。你们板子上电后那颗 Flash 的片选脚是常高还是有过拉低?

  • 第一次编译

    先别急着怀疑引脚约束,按「谁在上电时读 Flash」这条线走会省很多时间。高云 GW2A 里 MSPI 是硬核控制器,上电配置阶段是它去读外部 Flash,你的 RISC-V 软核这时候还没开始执行指令,所以「串口不打印」这个现象本身发生在很早的阶段,不能直接推到软核代码上。

    最小可行路径我建议这样:第一步量启动模式跳线。很多人 JTAG 能下、断电就死,就是跳线还停在 JTAG 配置模式,根本没进 MSPI 主模式。对照手册那张启动模式表,用万用表确认上电电平。第二步再查 MSPI 专用脚有没有被约束文件当普通 IO 重复分配,这类冲突很隐蔽,综合可能不报错。第三步才轮到镜像地址映射:链接脚本入口地址和实际加载地址是否一致,软核复位后取的第一条指令指向哪。

    一个容易忽略的风险:有人把 Flash 里的镜像和 JTAG 下载的 bit 流混为一谈,以为 JTAG 跑通就等于 Flash 里也是对的。其实这两条路径完全独立,JTAG 成功不能证明镜像烧写正确。

    时间只剩一个月,建议用逻辑分析仪挂 MSPI 的 CLK 和 CS,上电复位那一下看有没有活动,拿它当分水岭,先别同时改三四个地方。你们现在手上有没有能抓到上电瞬间波形的工具?

  • 硬件萌新

    看到你们卡在「跑不起来」这一步,我先帮你把思路从『找 bug』切换到『找阶段』。上电到串口出字,中间其实过了好几道关,每道关的失败现象都是「没打印」,但原因完全不同。你不先把失败锁定在哪个阶段,就会陷入改一处烧一次、改对了也不知道为什么对的循环里。

    第一道关是启动模式。GW2A 上电后由硬件去决定从哪加载配置,MSPI 主模式、JTAG 配置模式这些是靠模式脚电平选的。这一步的验证成本最低:断电,万用表量那几个模式脚,对着手册的启动模式表确认板子确实进了 MSPI 主模式。很多人 JTAG 能烧能跑、一断电就死,就是这里还停在 JTAG 模式。

    第二道关是 MSPI 专用脚有没有被你的约束文件当成普通 IO 重复占用。这个坑很隐蔽,因为综合往往不报错,工具默认你懂,你重复分配它就默默按某一套走。检查方法很直接:把约束里所有涉及 MSPI 那几个脚的 LOC 找出来,确认没有别的地方也在用。

    第三道关才是地址映射。链接脚本的入口地址、镜像实际烧进 Flash 的偏移、软核复位后取的第一条指令地址,这三者必须自洽。这里出问题通常表现为:MSPI 有读 Flash 的动作,但读回来的东西不是有效指令,软核一取指就跑飞。

    我建议你们别三件事同时猜,用一个信号做分水岭:上电瞬间用逻辑分析仪或示波器抓 MSPI 的 CS 和 CLK。有活动,说明前两道关基本过了,往镜像和地址映射查;没活动,回头看模式和引脚,别急着动链接脚本。

    顺带说一句取舍。一个月备赛,最贵的不是工具,是你们的验证次数。每次只改一个变量、只烧一次、只观察一个信号,比一次改三处然后靠现象猜要快得多。国产器件的文档确实不如大厂全,但启动流程这种底层机制各家大同小异,把高云手册里那张启动模式表和 MSPI 章节吃透,比到处找别人的工程抄更省时间。你们现在卡的是完全没波形,还是抓到了读 Flash 的动作?这两个方向后面要查的东西差挺远。

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

提问者

数字IC萌新查看主页
浏览「其他」

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

相关问题

同分类

提问建议

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