You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vivado中行为仿真与综合后功能仿真结果不匹配问题排查

排查Vivado中VHDL行为仿真与综合后仿真结果不一致问题

问题背景

我实现了一个VHDL模块,功能是将8位AXI Stream(包含tdata、tvalid、tready、tlast信号)转换为两个32位输出端口A和B:前4字节存入端口A,后续4字节存入端口B。A_valid/B_valid信号会在对应端口的4字节接收完成后置位,直到后续模块的ready信号有效(表示数据已被读取)才清除。模块采用双状态循环的状态机实现,同时编写了从.txt文件读取十六进制数据生成AXI Stream的激励模块及测试平台。

在Ubuntu 22.04环境的Vivado 2024.1中,出现行为仿真与综合后功能仿真结果不匹配的问题:

  • 综合后功能仿真结果符合预期:A=0xddccbbaa,B=0x44332211
  • 行为仿真存在1个时钟周期延迟,且输出结果错误

具体排查点

1. 状态机复位与编码逻辑

  • 确认状态机状态变量在复位时的初始化:行为仿真对复位信号的敏感度更高,若复位未将状态强制置为初始状态(如RECEIVE_A),仅依赖VHDL默认值,可能导致状态机启动延迟。
  • 检查状态机编码方式:默认的sequential编码在综合时会被优化,而行为仿真会严格执行代码逻辑。尝试显式指定one-hot编码(通过attribute enum_encoding of <state_type> : type is "one-hot";),对比仿真结果是否一致。

2. 数据拼接的时序控制

  • 验证8位到32位数据拼接逻辑:必须在tvalid和tready握手成功(即两者同时有效)的时钟沿,才将tdata写入移位寄存器或拼接寄存器。若使用组合逻辑直接拼接,行为仿真会暴露时序问题,而综合后仿真会优化延迟。
  • 检查A/B端口的赋值时机:确保收集满4字节后,在下一个时钟沿更新输出寄存器,避免组合逻辑输出带来的毛刺或延迟。

3. AXI Stream握手信号同步

  • 检查tready信号的实现:若tready是组合逻辑输出,行为仿真中可能出现与tvalid的时序不匹配,导致数据接收延迟。需将tready改为寄存器输出,与状态机状态同步。
  • 验证tlast信号的处理:确认tlast有效时,状态机是否在当前时钟沿完成跳转。行为仿真对信号边沿对齐要求更高,若tlast未与时钟沿同步,可能导致状态跳转滞后。

4. 测试平台与激励模块

  • 检查.txt文件读取模块的时序:确保tdata和tvalid在每个时钟沿稳定输出,无毛刺或提前变化。行为仿真会捕获这些时序问题,而综合后仿真可能因优化忽略。
  • 确认复位脉冲长度:仿真开始时需给出足够长的复位脉冲,保证状态机及所有寄存器完成初始化,避免行为仿真中因复位不充分导致的异常。

5. Vivado仿真配置

  • 调整行为仿真编译选项:默认行为仿真使用-O0无优化,尝试改为与综合一致的优化级别(如-O1),看结果是否对齐。
  • 检查仿真库一致性:确保行为仿真使用的unisim库与综合库版本一致,避免因库文件差异导致的仿真结果偏差。

内容的提问来源于stack exchange,提问作者aripod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:49:50