RISC-V MCU中文社区

【分享】 在vivado上基于二进制码对指令运行状态进行判断

发表于 全国大学生集成电路创新创业大赛 2023-05-24 00:43:08
0
1239
0

组别:CICC3327

背景

在扩展指令时我们常常需要一些手段来帮助我们判断指令是否能够成功运行、运行状态是否正确。一方面,我们可以通过模拟器来实现,另一方面,在没有模拟器的情况下,我们可以通过将所扩展指令的二进制代码导入vivado仿真运行判断状态是否正确。
获取二进制代码

在Nucleistudio中打开相关项目的Properties,按路径打开C/C++ Build ->setting,找到Build Steps 选项并在Post-build Steps下添加指令

riscv-nuclei-elf-objcopy -O verilog "${BuildArtifactFileBaseName}.elf" "${BuildArtifactFileBaseName}.verilog"

图片alt

应用后,点击build,会在project的路径下Debug中看到对应生成的.verilog文件。
同样的,加入

riscv-nuclei-elf-objdump -d "${BuildArtifactFileBaseName}.elf" > "${BuildArtifactFileBaseName}.dasm"

后build会生成对应的.dasm文件,用于查看对应的汇编指令。
获取测试指令
以helloworld为例,在生成对应的两个文件之后,我们可以选取想要测试的指令导入vivado

图片alt
图片alt
图片alt

我们以测试
li a0 8
addi a0 a0 -8
为例
获取相应的二进制码将其转换为16进制导入vivado,方法就是将代码文件修改为.verilog文件并存入蜂鸟的tb文件夹,在vivado的tb中修改测试用例路径即可进行仿真。
得到结果

图片alt

A0值为0,说明指令正确读取并运行

总结

通过这种方法我们可以在没有模拟器的情况下对自己扩展的指令进行测试,虽然略显复杂,但是在加深对代码理解的基础上还可以保证代码质量。

喜欢0
用户评论
chinhan

chinhan 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板