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

开放4 回答 43 浏览

我们队伍用高云GW1N-9做了个RISC-V软核的项目参加FPGA大赛,现在备赛只剩一个月了。昨天把工程下载到开发板上,发现程序完全跑不起来,用示波器看SPI Flash的时钟信号也是乱的。我们用的是高云自带的SPI Flash配置模式,引脚按照原理图分配了,但就是不行。查了高云的UG说默认是Auto Boot模式,但不知道是不是还需要手动设置什么寄存器或者烧录选项。有没有用过高云FPGA做软核的大佬指点一下,是引脚分配的问题还是启动模式没设置对?

分享:

4 个回答

  • 新手村

    先别急着怀疑引脚,Auto Boot 模式下高云默认从 flash 启动,但如果你在工程里开了 JTAG 调试或者把 bitstream 下载到了 SRAM,那上电后它根本不看 flash。你示波器看到时钟乱,很可能就是 flash 那边压根没被正确选中。查一下烧录时是不是选了「配置模式」而不是「调试模式」,顺便确认一下 MCS 文件有没有真的写进 flash,很多队伍栽在只下了 SRAM 没烧 flash 这一步。

  • 码电路的小王

    一个月时间,别在启动模式上耗太久。高云 GW1N-9 的 SPI Flash 配置,常见坑其实就三个:一是引脚分配,尤其 MISO/MOSI/SCK/CS 这四个脚,原理图上标了不代表软件里就自动对齐,你得在 gowin 的工程里手动确认 pin 约束文件里这些脚和 flash 芯片的物理连接一致,特别是 CS 脚,有些板子会把它接到普通 IO 而不是专用配置脚上。二是烧录选项,高云 Programmer 里有个「Boot Mode」下拉,默认是 Auto Boot,但你要是之前烧过别的配置或者选了 Non-Boot 模式,它就不会从 flash 启动。三是时钟,RISC-V 软核如果用了 PLL,上电后 PLL 锁定需要时间,如果 flash 配置在 PLL 稳定前就尝试读数据,也会乱。我的建议是:先拿高云官方的 LED 流水灯例程,直接烧到 flash 里,看能不能跑——如果不能,说明是板级或烧录流程问题,跟你的软核无关;如果能跑,再回来查你的工程里是不是动了什么启动相关的设置。这能帮你把问题缩小一半。

  • 编程入门

    时间紧就按「排除法」走,别一上来就翻 UG 里那一大堆寄存器描述。我去年带过类似队伍,最后发现根本不是启动模式的问题,而是他们把 flash 的 VCCIO 电压域和 FPGA 的 bank 电压配错了,导致 flash 读出来的全是乱码,时钟自然就是乱的。你这边先做三件事,按优先级排:第一,用高云自带的「Programmer」软件,把工程重新生成 .fs 文件,然后在烧录界面里明确选「Flash」而不是「SRAM」,烧完后看状态栏有没有「Verify OK」;第二,用示波器量一下 flash 的 CS 脚,上电后应该有一个低脉冲,如果一直高或者一直低,那就是引脚或者配置模式的问题,如果 CS 有动作但 SCK 乱,那大概率是 flash 型号不兼容或者电压问题;第三,如果条件允许,把 flash 拆下来,用编程器单独读写一下,确认芯片本身没坏。还有个容易被忽略的点——高云 GW1N-9 的 Auto Boot 模式默认是从 flash 的 0x00 地址启动,但如果你在工程里设置了「Bitstream Compression」或者开了「Security」选项,某些版本的工具链会改变启动头,导致软核的起始 PC 跳不对。你可以先关掉压缩和加密,用最朴素的配置重新综合一次。至于 RISC-V 软核本身,只要能在 JTAG 下用调试器看到它跑起来,就说明逻辑没问题,问题只在启动链路。最后提醒一句:一个月备赛,如果这周还搞不定 flash 启动,干脆改用 JTAG 在线调试模式做演示,很多评委其实更看重你软核的功能实现,而不是启动方式。你现在用的高云官方开发板还是自己画的板子?如果是自己画的,flash 的封装和引脚顺序很容易看错,建议先拍照核对一下。

  • 数字电路入门者

    别把锅都甩给启动模式,先把「配置完成后有没有 Verify」这条线走完再谈别的。高云 GW1N-9 的 Auto Boot 本身不需要你手动设寄存器,但很多人忽略了一个前置条件:烧录时如果选了 SRAM 模式,或者用了 JTAG 的 debug 功能,芯片上电后根本不会主动去读 flash,哪怕你之前烧过 flash 也会被覆盖掉。所以你第一步不是看引脚,而是打开高云 Programmer,重新选 Flash 模式烧一遍,烧完看状态栏是不是真的显示 Verify OK。如果 Verify 过了还是跑不起来,再回头查引脚不迟。我见过一个队,折腾了两周,最后发现是原理图上 flash 的 CS 接到了普通 IO,而高云默认的配置引脚是专用的,软件里 pin 约束没改,导致 CS 根本没接到对应位置。你拿示波器看时钟乱,其实乱的不是时钟本身,是 flash 压根没被选中,SCK 上飘的是悬空电平。建议你先把 CS 脚单独拉出来看,上电后有没有一个干净的低脉冲,如果一直高,那基本就是引脚约束或者烧录模式的问题,跟启动模式寄存器没关系。另外提醒一句,一个月时间别去翻 UG 里那些配置寄存器,高云这块基本不需要你手动碰,除非你要做多镜像或者加密启动。先把烧录流程和物理连接确认死,再考虑软核代码的问题。你现在能确认 Programmer 里选的是 Flash 且 Verify 通过吗?

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

提问者

FPGA实践者查看主页
浏览「其他」

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

相关问题

同分类

提问建议

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