mirror of
https://github.com/xarc/harv.git
synced 2025-04-18 19:24:51 -04:00
Simple RV32I validation assembly code
This commit is contained in:
parent
2d54e7cbc2
commit
bc5edd7d16
2 changed files with 201 additions and 7 deletions
171
src/rv32i.asm
Normal file
171
src/rv32i.asm
Normal file
|
@ -0,0 +1,171 @@
|
|||
.data
|
||||
var0: 100
|
||||
res_auipc: 0x00020008
|
||||
res_lui: 0x00020000
|
||||
res_li: 0x00000194
|
||||
res_add: 350
|
||||
res_slt: 1
|
||||
res_xor: 158
|
||||
res_sll: 800
|
||||
res_srl: 12
|
||||
res_or: 254
|
||||
res_and: 96
|
||||
res_jal: 0x000000CA
|
||||
|
||||
# assembly code to validate entire rv32i
|
||||
.text
|
||||
j start
|
||||
error:
|
||||
j error
|
||||
|
||||
start:
|
||||
# add upper immediate to PC
|
||||
auipc t0, 0x20
|
||||
lw t1, res_auipc
|
||||
bne t0, t1, error
|
||||
|
||||
# load upper immediate
|
||||
lui t0, 0x20
|
||||
lw t1, res_lui
|
||||
bne t0, t1, error
|
||||
# TODO: asserts to ensure that the first instructions work
|
||||
|
||||
# load and store words
|
||||
la a0, var0
|
||||
lw t0, 0(a0)
|
||||
sw t0, 0(a0)
|
||||
lw t1, 0(a0)
|
||||
bne t0, t1, error
|
||||
# TODO: load and store half-words and bytes
|
||||
|
||||
# add immediate
|
||||
addi t0, x0, 0xCA
|
||||
addi t0, t0, 0xCA
|
||||
lw t1, res_li
|
||||
bne t0, t1, error
|
||||
|
||||
# initalize variables for next operations
|
||||
li a0, 100
|
||||
li a1, 250
|
||||
li a2, 3
|
||||
|
||||
# add
|
||||
add t0, a0, a1
|
||||
lw t1, res_add
|
||||
bne t0, t1, error
|
||||
|
||||
# set on less than
|
||||
slt t0, a0, a1
|
||||
lw t1, res_slt
|
||||
bne t0, t1, error
|
||||
# TODO: sltu
|
||||
|
||||
# exclusive-or
|
||||
xor t0, a0, a1
|
||||
lw t1, res_xor
|
||||
bne t0, t1, error
|
||||
|
||||
# shift left logical
|
||||
sll t0, a0, a2
|
||||
lw t1, res_sll
|
||||
bne t0, t1, error
|
||||
|
||||
# shift right logical
|
||||
srl t0, a0, a2
|
||||
lw t1, res_srl
|
||||
bne t0, t1, error
|
||||
|
||||
# shift right arithmetic
|
||||
sra t0, a0, a2
|
||||
lw t1, res_srl
|
||||
bne t0, t1, error
|
||||
|
||||
# or
|
||||
or t0, a0, a1
|
||||
lw t1, res_or
|
||||
bne t0, t1, error
|
||||
|
||||
# and
|
||||
and t0, a0, a1
|
||||
lw t1, res_and
|
||||
bne t0, t1, error
|
||||
|
||||
# jump and link
|
||||
jal ra, jal_test
|
||||
lw t1, res_jal
|
||||
bne t0, t1, error
|
||||
j jal_continue
|
||||
jal_test:
|
||||
addi t0, x0, 0xCA
|
||||
jalr x0, ra, 0
|
||||
|
||||
jal_continue:
|
||||
|
||||
# branch on equal
|
||||
# test: take branch
|
||||
li t0, 0x100
|
||||
li t1, 0x100
|
||||
beq t0, t1, equal0
|
||||
j error
|
||||
equal0:
|
||||
# test: dont take branch
|
||||
li t0, 0x100
|
||||
li t1, 0x101
|
||||
beq t0, t1, equal1
|
||||
j beq_continue
|
||||
equal1:
|
||||
j error
|
||||
beq_continue:
|
||||
|
||||
# branch on not equal
|
||||
# test: take branch
|
||||
li t0, 0x100
|
||||
li t1, 0x101
|
||||
bne t0, t1, not_equal0
|
||||
j error
|
||||
not_equal0:
|
||||
# test: dont take branch
|
||||
li t0, 0x100
|
||||
li t1, 0x100
|
||||
bne t0, t1, not_equal1
|
||||
j bne_continue
|
||||
not_equal1:
|
||||
j error
|
||||
bne_continue:
|
||||
|
||||
# branch on less than
|
||||
# test: take branch
|
||||
li t0, -0x10
|
||||
li t1, 0x10
|
||||
blt t0, t1, less0
|
||||
j error
|
||||
less0:
|
||||
# test: dont take branch
|
||||
li t0, 0x10
|
||||
li t1, 0x10
|
||||
blt t0, t1, less1
|
||||
j blt_continue
|
||||
less1:
|
||||
j error
|
||||
blt_continue:
|
||||
|
||||
# branch on greater or equal
|
||||
# test: take branch
|
||||
li t0, 0x10
|
||||
li t1, 0x10
|
||||
bge t0, t1, greater0
|
||||
j error
|
||||
greater0:
|
||||
# test: dont take branch
|
||||
li t0, -0x10
|
||||
li t1, 0x10
|
||||
bge t0, t1, greater1
|
||||
j bge_continue
|
||||
greater1:
|
||||
j error
|
||||
bge_continue:
|
||||
|
||||
# TODO: bltu, bgeu
|
||||
|
||||
success:
|
||||
j success
|
|
@ -12,15 +12,15 @@
|
|||
</db_ref>
|
||||
</db_ref_list>
|
||||
<zoom_setting>
|
||||
<ZoomStartTime time="0fs"></ZoomStartTime>
|
||||
<ZoomEndTime time="4890001fs"></ZoomEndTime>
|
||||
<Cursor1Time time="2070000fs"></Cursor1Time>
|
||||
<ZoomStartTime time="42035834fs"></ZoomStartTime>
|
||||
<ZoomEndTime time="44520835fs"></ZoomEndTime>
|
||||
<Cursor1Time time="43030834fs"></Cursor1Time>
|
||||
</zoom_setting>
|
||||
<column_width_setting>
|
||||
<NameColumnWidth column_width="204"></NameColumnWidth>
|
||||
<NameColumnWidth column_width="196"></NameColumnWidth>
|
||||
<ValueColumnWidth column_width="66"></ValueColumnWidth>
|
||||
</column_width_setting>
|
||||
<WVObjectSize size="28" />
|
||||
<WVObjectSize size="34" />
|
||||
<wvobject type="array" fp_name="/sim_from_dump/INST_DUMP_FILE_PATH">
|
||||
<obj_property name="ElementShortName">INST_DUMP_FILE_PATH[1:33]</obj_property>
|
||||
<obj_property name="ObjectShortName">INST_DUMP_FILE_PATH[1:33]</obj_property>
|
||||
|
@ -90,7 +90,7 @@
|
|||
<obj_property name="ElementShortName">[5][31:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">[5][31:0]</obj_property>
|
||||
<obj_property name="label">reg_t0</obj_property>
|
||||
<obj_property name="Radix">SIGNEDDECRADIX</obj_property>
|
||||
<obj_property name="Radix">HEXRADIX</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/sim_from_dump/harv_i/regfile_i/g_normal/regfile_w">
|
||||
<obj_property name="ElementShortName">regfile_w[31:0][31:0]</obj_property>
|
||||
|
@ -112,6 +112,30 @@
|
|||
<obj_property name="ElementShortName">wren_i</obj_property>
|
||||
<obj_property name="ObjectShortName">wren_i</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/sim_from_dump/harv_i/instr_fetch_i/jump_i">
|
||||
<obj_property name="ElementShortName">jump_i</obj_property>
|
||||
<obj_property name="ObjectShortName">jump_i</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/sim_from_dump/harv_i/instr_fetch_i/jump_imm_i">
|
||||
<obj_property name="ElementShortName">jump_imm_i[31:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">jump_imm_i[31:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/sim_from_dump/harv_i/imm_i_w">
|
||||
<obj_property name="ElementShortName">imm_i_w[11:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">imm_i_w[11:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/sim_from_dump/harv_i/imm_w">
|
||||
<obj_property name="ElementShortName">imm_w[31:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">imm_w[31:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/sim_from_dump/harv_i/ctl_aluop_w">
|
||||
<obj_property name="ElementShortName">ctl_aluop_w[3:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">ctl_aluop_w[3:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/sim_from_dump/harv_i/alu_data_w">
|
||||
<obj_property name="ElementShortName">alu_data_w[31:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">alu_data_w[31:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject fp_name="divider12648" type="divider">
|
||||
<obj_property name="label">MEMORIES</obj_property>
|
||||
<obj_property name="DisplayName">label</obj_property>
|
||||
|
@ -143,7 +167,6 @@
|
|||
<wvobject type="group" fp_name="group4275">
|
||||
<obj_property name="label">dmem</obj_property>
|
||||
<obj_property name="DisplayName">label</obj_property>
|
||||
<obj_property name="isExpanded"></obj_property>
|
||||
<wvobject type="array" fp_name="/sim_from_dump/dmem_data_i">
|
||||
<obj_property name="ElementShortName">dmem_data_i[31:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">dmem_data_i[31:0]</obj_property>
|
||||
|
|
Loading…
Add table
Reference in a new issue