RISC-V MCU中文社区

【分享】 利用蜂鸟内核实现指令的仿真模拟

发表于 开源蜂鸟E203 2023-05-09 16:49:47
3
1466
2

队伍编号:CICC1413

摘要

现在我们组在进行浮点扩展,既然要进行扩展,我们必须能够检验扩展的正确性,因此本篇文章介绍一下自己编写指令,并通过仿真观察指令结果的正确性。

RSIC-V指令架构

首先在编写指令前,我们必须先大概介绍一下RISC-V的指令架构,在RSIC-V中主要有以下6种指令格式:
图片alt
因此,我们在对于一条指令进行分析时,我们首先要知道其的指令类型,以及对应操作码,然后对应这个格式,我们便可以分析出一个二进制对应的汇编指令。

指令编写

在我们了解完,RSIC-V中的指令架构后,我们便可以编写对应的指令。由于我们在测试中,只需要检验一条特定的指令的正确性,因此我们只需要直接写出对应指令的二进制形式。在这里,我测试的指令是:
addi r1 r0 8
图片alt
该指令是I型指令,根据图可以看到OPCODE是0010011,FUN3是000,imm[11:0]为000000001000,rs1是00000,rd是00001。
因此可以知道该指令对应的二进制代码是:00000000100000000000000010010011。

指令存储

在E203关注的指令系统中,指令基本上是存储在ITCM中的,相关介绍可以参考我的这篇文章。另外值得一提的是:
图片alt
可以看出指令是以十六进制进行存储的,因此对于上述的指令,我们必须转换为十六进制,即为00800093,又因为蜂鸟E203是小端格式。所以存储时应该为93 00 80 00。

仿真验证

写好测试文件中的指令后,我们便可以运行仿真,首先可以看到TCL中输出:
图片alt
说明指令成功存入ITCM中。
然后我们再看仿真结果:
图片alt
可以看到当指令运行到0x8000_0004时,r1的值改为了8,由于r0的值始终为0,所以该结果与我们预期结果相符合。

附言

这次只是进行了一个很简单的addi指令的测试,因此如果我们要进行一些扩展时,我们首先是得知道它的二进制形式怎么编写,例如如果我们编写浮点指令时,如果只是使用Nuclei Studio,它是无法将对应浮点汇编指令转换为对应的二进制指令的。

喜欢2
用户评论 (3)
studying_drh

studying_drh 实名认证

能拿个好名次将是收获的附带品

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