队伍编号:CICC1413
现在我们组在进行浮点扩展,既然要进行扩展,我们必须能够检验扩展的正确性,因此本篇文章介绍一下自己编写指令,并通过仿真观察指令结果的正确性。
首先在编写指令前,我们必须先大概介绍一下RISC-V的指令架构,在RSIC-V中主要有以下6种指令格式:
因此,我们在对于一条指令进行分析时,我们首先要知道其的指令类型,以及对应操作码,然后对应这个格式,我们便可以分析出一个二进制对应的汇编指令。
在我们了解完,RSIC-V中的指令架构后,我们便可以编写对应的指令。由于我们在测试中,只需要检验一条特定的指令的正确性,因此我们只需要直接写出对应指令的二进制形式。在这里,我测试的指令是:addi r1 r0 8
该指令是I型指令,根据图可以看到OPCODE是0010011,FUN3是000,imm[11:0]为000000001000,rs1是00000,rd是00001。
因此可以知道该指令对应的二进制代码是:00000000100000000000000010010011。
在E203关注的指令系统中,指令基本上是存储在ITCM中的,相关介绍可以参考我的这篇文章。另外值得一提的是:
可以看出指令是以十六进制进行存储的,因此对于上述的指令,我们必须转换为十六进制,即为00800093,又因为蜂鸟E203是小端格式。所以存储时应该为93 00 80 00。
写好测试文件中的指令后,我们便可以运行仿真,首先可以看到TCL中输出:
说明指令成功存入ITCM中。
然后我们再看仿真结果:
可以看到当指令运行到0x8000_0004时,r1的值改为了8,由于r0的值始终为0,所以该结果与我们预期结果相符合。
这次只是进行了一个很简单的addi指令的测试,因此如果我们要进行一些扩展时,我们首先是得知道它的二进制形式怎么编写,例如如果我们编写浮点指令时,如果只是使用Nuclei Studio,它是无法将对应浮点汇编指令转换为对应的二进制指令的。