kingdaxian 2024-05-29 17:35 采纳率: 33.3%
浏览 11
已结题

Vivado仿真数据出错

Vivado在仿真RISC-V的CPU时数据出错

img

\n

往寄存器堆写入的rs2,rs1,rd分别是指令的(24:20),(19:15),(11:7)位,但是在仿真时出现了以下情况:

img

\n

img

\n

0000c083 = 000000000000 00001 100 00001 0000011
按理说rs2=0, rs1=1, rd=1,但仿真显示这些数值全为3
随着pc和指令的变化,后续的数据呈现3和13循环的画面,直到指令读完:

img

\n
请问一下这是怎么回事?

  • 写回答

24条回答 默认 最新

  • 阿里嘎多学长 2024-05-29 17:44
    关注
    获得0.15元问题酬金

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    根据您提供的信息和文件内容,您在Vivado中仿真RISC-V CPU时遇到了数据错误的问题。具体来说,寄存器堆(RegFile)的rs1、rs2和rd寄存器应该分别从指令中提取相应的位(rs2从指令的[24:20]位,rs1从[19:15]位,rd从[11:7]位),但仿真结果显示这些寄存器的值都为3,而不是预期的0、1、1。

    以下是一些可能的原因和解决方法:

    1. 检查指令编码: 确保指令0000c083是正确的RISC-V指令编码,并且其位字段确实对应于预期的寄存器值。根据您提供的指令编码,它应该表示一个R类型指令,其中rs1 = 1, rs2 = 0, rd = 1。

    2. 检查RegFile模块的实现: 检查您的RegFile模块是否正确实现了从指令中提取rs1、rs2和rd字段的逻辑。根据您提供的代码片段,您应该检查rR1rR2wR的赋值逻辑是否正确。

    3. 检查仿真环境: 确保仿真环境正确设置,包括时钟信号(clk)和复位信号(rst)。检查是否有任何未预期的信号干扰或时序问题。

    4. 检查信号连接: 检查仿真中寄存器堆的输入信号是否正确连接到指令寄存器(inst)的相应位。

    5. 检查仿真波形: 使用Vivado的仿真波形查看工具,仔细检查在仿真过程中寄存器堆输入信号的变化,以确定问题发生的具体时刻。

    6. 检查代码逻辑: 检查您的代码逻辑是否有任何错误,比如是否在某些条件下错误地覆盖了寄存器的值。

    7. 检查综合和实现: 确保您的设计在综合和实现阶段没有产生任何错误,这可能会影响仿真结果。

    8. 查看仿真配置: 检查您的仿真配置,确保使用的测试平台和测试向量是正确的。

    由于我没有访问您的完整代码和项目设置,以上建议仅供参考。如果问题仍然存在,您可能需要提供更多的代码和项目细节,或者考虑在相关的技术论坛或社区中寻求帮助。

    至于相关的参考资料,您可以查看RISC-V官方文档,了解指令集架构和寄存器文件的具体实现细节。此外,Vivado的用户手册和应用指南也是解决仿真问题的好资源。

    如果您需要进一步的帮助,请提供更多的信息,例如您的RegFile模块的完整代码,以及您的仿真测试平台的设置。这样我可以提供更具体的建议。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月6日
  • 赞助了问题酬金15元 5月29日
  • 创建了问题 5月29日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见