2026年了,FPGA工程师在国产安路FPGA上做RISC-V软核,串口打印乱码,是波特率配置问题还是软核启动时序问题?求排查思路

开放4 回答 43 浏览

最近在安路的国产FPGA上搭了一个RISC-V软核,跑通之后想通过串口打印调试信息,结果出来的全是乱码。我用的是115200波特率,时钟频率也核对过了,但就是不行。目前怀疑是波特率配置有问题,也可能是软核启动时时钟没稳定,导致UART初始化失败。请问哪位大佬遇到过类似问题?这种乱码一般要先排查哪些地方?有没有系统性的调试思路?

分享:

4 个回答

  • 嵌入式新手2024

    先别急着怀疑软核启动时序,把示波器或逻辑分析仪直接怼到 TX 引脚上看波形,数一下每个字节的位宽。如果 1 个 bit 的时间不是 8.68us 左右,那就是分频算错了;如果波形是对的但电脑上还是乱码,再回头看复位释放后时钟是否稳定。多半是波特率分频寄存器没写对,安路的 UART 外设有些默认是 16 倍过采样,别按 8 倍算。

  • FPGA探索者

    我建议你先做个最朴素的实验:把波特率降到 9600,同时把发送内容改成 0x55(二进制 01010101),这样示波器上能直接看到方波,数数每个 bit 的宽度对不对。如果 9600 下还是乱码,那基本可以排除是高速误码,问题就锁定在初始化时序或者时钟源上。安路这边常见的一个坑是软核用的时钟和 UART 外设的时钟不是同一个 PLL 输出,或者复位释放后你立刻就去写 UART 寄存器,但此时时钟还没完全稳定。你可以试着在复位释放后加个延时,比如用计数器数 1000 个周期再初始化 UART,同时确认你读到的系统时钟寄存器值和实际 PLL 配置一致。另外,检查一下 RISC-V 软核的启动地址和 UART 驱动代码是否在同一个时钟域里,有时候软核跑在 PLL 输出上,而 UART 挂在另一个时钟域,两边频率对不上也会出这种问题。

  • 码电路的阿明

    这个问题我去年在安路某款芯片上踩过,当时排查了整整两天,最后发现是串口助手的锅——它默认把接收数据当作 ASCII 文本显示,但你的软核发的是二进制调试信息,比如直接发了寄存器地址或者指针值。你先在串口助手里切到 HEX 显示,如果看到的是规律的 0x00 0x01 这类数据,那说明 UART 收发链路其实是通的,你只是没做格式化输出。如果 HEX 下也是乱码,再按下面顺序查:第一,确认软核的时钟频率和你在 UART 驱动里写的时钟频率参数一致,特别是安路的软核有时默认用内部 RC 振荡器,频率偏差能到 5% 以上,这对 115200 来说可能就超了容限;第二,检查复位释放时序,安路官方推荐的启动流程是:先拉高复位,等 PLL lock 信号有效后再释放软核复位,然后延时几个时钟周期再初始化外设,很多人会漏掉等 PLL lock 这一步;第三,别用 115200,先降到 19200 试试,如果 19200 正常而 115200 乱码,那大概率是时钟精度不够或者 PCB 走线太长导致信号边沿变差。另外提醒一下,安路的开发环境里 UART 的波特率分频寄存器有两位是小数分频,如果你用的是整数分频配置,实际波特率会偏离标称值。你现在的软核是从安路官方的示例工程改的,还是自己写的启动代码?这个信息对判断问题很关键。

  • 嵌入式爱好者小王

    讲真,看到你描述的第一反应是:既然时钟频率核对过了,那大概率不是PLL没锁,而是你「核对」的方式和软核实际跑起来的时钟对不上。安路这边有个很隐蔽的坑,就是软核里如果用了内部RC或者某个默认的divider配置,而你仿真或者阅读代码时默认它是外部晶振直连,两边差了百分之几,115200这种高速率下就是会出乱码,但9600可能就勉强能看。建议你第一步别改代码,直接降波特率到9600,同时把打印内容改成固定值比如0x55,这样在示波器上能看到01010101的方波,数一下每个bit宽度是不是约104us,如果宽度不对,说明分频系数或时钟源根本没对上,这时候再去翻软核的启动文件里时钟初始化那段,看它实际用的是哪个时钟源、分频比是多少,而不是只看顶层模块里写的频率参数。另外一个容易忽略的点是复位释放后你隔了多久才初始化UART,安路官方推荐的流程是等PLL锁定信号有效后再释放软核复位,然后最好用计数器延时几百个周期再碰外设寄存器,如果你在复位释放的同一个always块里立刻去写UART控制寄存器,时钟树可能还没稳定,寄存器写进去是错的,但你又读不出来。顺便提一句,看看你的UART IP是不是16倍过采样,如果驱动代码里按8倍算分频,出来的波特率会差一倍,表现就是每个字符错得很有规律。你现在的工程是直接把软核跑在PLL输出上,还是又经过了一个MMCM/PLL分频给UART?方便的话说下这个拓扑,能帮你缩小范围。

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

提问者

电子技术萌新查看主页
浏览「其他」

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

相关问题

同分类

提问建议

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