Add SIMD_ADD regression and config (show case)
This commit is contained in:
parent
3307d6c3b5
commit
54b06e6438
|
@ -40,4 +40,5 @@ obj_dir
|
|||
*.memTrace
|
||||
*.regTrace
|
||||
*.tcl
|
||||
*.o
|
||||
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
package vexriscv.demo
|
||||
|
||||
import spinal.core._
|
||||
import vexriscv.plugin._
|
||||
import vexriscv.{VexRiscv, VexRiscvConfig, plugin}
|
||||
|
||||
/**
|
||||
* Created by spinalvm on 15.06.17.
|
||||
*/
|
||||
object GenCustomSimdAdd extends App{
|
||||
def cpu() = new VexRiscv(
|
||||
config = VexRiscvConfig(
|
||||
plugins = List(
|
||||
new SimdAddPlugin,
|
||||
new PcManagerSimplePlugin(
|
||||
resetVector = 0x00000000l,
|
||||
relaxedPcCalculation = false
|
||||
),
|
||||
new IBusSimplePlugin(
|
||||
interfaceKeepData = false,
|
||||
catchAccessFault = false
|
||||
),
|
||||
new DBusSimplePlugin(
|
||||
catchAddressMisaligned = false,
|
||||
catchAccessFault = false
|
||||
),
|
||||
new DecoderSimplePlugin(
|
||||
catchIllegalInstruction = false
|
||||
),
|
||||
new RegFilePlugin(
|
||||
regFileReadyKind = plugin.SYNC,
|
||||
zeroBoot = true
|
||||
),
|
||||
new IntAluPlugin,
|
||||
new SrcPlugin(
|
||||
separatedAddSub = false,
|
||||
executeInsertion = false
|
||||
),
|
||||
new LightShifterPlugin,
|
||||
new HazardSimplePlugin(
|
||||
bypassExecute = false,
|
||||
bypassMemory = false,
|
||||
bypassWriteBack = false,
|
||||
bypassWriteBackBuffer = false,
|
||||
pessimisticUseSrc = false,
|
||||
pessimisticWriteRegFile = false,
|
||||
pessimisticAddressMatch = false
|
||||
),
|
||||
new BranchPlugin(
|
||||
earlyBranch = false,
|
||||
catchAddressMisaligned = false,
|
||||
prediction = NONE
|
||||
),
|
||||
new YamlPlugin("cpu0.yaml")
|
||||
)
|
||||
)
|
||||
)
|
||||
SpinalVerilog(cpu())
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
|
||||
build/custom_simd_add.elf: file format elf32-littleriscv
|
||||
|
||||
|
||||
Disassembly of section .crt_section:
|
||||
|
||||
00000000 <_start>:
|
||||
0: 00100e13 li t3,1
|
||||
4: 060000b3 0x60000b3
|
||||
8: 08009c63 bnez ra,a0 <fail>
|
||||
c: 00200e13 li t3,2
|
||||
10: 00000093 li ra,0
|
||||
14: 00000113 li sp,0
|
||||
18: 062080b3 0x62080b3
|
||||
1c: 08009263 bnez ra,a0 <fail>
|
||||
20: 00300e13 li t3,3
|
||||
24: 010200b7 lui ra,0x1020
|
||||
28: 30408093 addi ra,ra,772 # 1020304 <pass+0x1020258>
|
||||
2c: 00000113 li sp,0
|
||||
30: 062081b3 0x62081b3
|
||||
34: 06119663 bne gp,ra,a0 <fail>
|
||||
38: 00400e13 li t3,4
|
||||
3c: 03061237 lui tp,0x3061
|
||||
40: 90c20213 addi tp,tp,-1780 # 306090c <pass+0x3060860>
|
||||
44: 010200b7 lui ra,0x1020
|
||||
48: 30408093 addi ra,ra,772 # 1020304 <pass+0x1020258>
|
||||
4c: 02040137 lui sp,0x2040
|
||||
50: 60810113 addi sp,sp,1544 # 2040608 <pass+0x204055c>
|
||||
54: 062081b3 0x62081b3
|
||||
58: 04419463 bne gp,tp,a0 <fail>
|
||||
5c: 00500e13 li t3,5
|
||||
60: ff000237 lui tp,0xff000
|
||||
64: 10220213 addi tp,tp,258 # ff000102 <pass+0xff000056>
|
||||
68: fff00093 li ra,-1
|
||||
6c: 00010137 lui sp,0x10
|
||||
70: 20310113 addi sp,sp,515 # 10203 <pass+0x10157>
|
||||
74: 062081b3 0x62081b3
|
||||
78: 02419463 bne gp,tp,a0 <fail>
|
||||
7c: 00600e13 li t3,6
|
||||
80: 00600293 li t0,6
|
||||
84: 00100093 li ra,1
|
||||
88: 00200113 li sp,2
|
||||
8c: 00300193 li gp,3
|
||||
90: 062080b3 0x62080b3
|
||||
94: 063080b3 0x63080b3
|
||||
98: 00509463 bne ra,t0,a0 <fail>
|
||||
9c: 0100006f j ac <pass>
|
||||
|
||||
000000a0 <fail>:
|
||||
a0: f0100137 lui sp,0xf0100
|
||||
a4: f2410113 addi sp,sp,-220 # f00fff24 <pass+0xf00ffe78>
|
||||
a8: 01c12023 sw t3,0(sp)
|
||||
|
||||
000000ac <pass>:
|
||||
ac: f0100137 lui sp,0xf0100
|
||||
b0: f2010113 addi sp,sp,-224 # f00fff20 <pass+0xf00ffe74>
|
||||
b4: 00012023 sw zero,0(sp)
|
||||
b8: 00000013 nop
|
||||
bc: 00000013 nop
|
||||
c0: 00000013 nop
|
||||
c4: 00000013 nop
|
||||
c8: 00000013 nop
|
||||
cc: 00000013 nop
|
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
:10000000130E1000B3000006639C0008130E2000BE
|
||||
:100010009300000013010000B380200663920008E3
|
||||
:10002000130E3000B700020193804030130100002E
|
||||
:10003000B381200663961106130E400037120603A3
|
||||
:100040001302C290B70002019380403037010402CE
|
||||
:1000500013018160B381200663944104130E5000A4
|
||||
:10006000370200FF130222109300F0FF3701010056
|
||||
:1000700013013120B381200663944102130E600006
|
||||
:1000800093026000930010001301200093013000E0
|
||||
:10009000B3802006B3803006639450006F000001E7
|
||||
:1000A000370110F0130141F22320C101370110F094
|
||||
:1000B000130101F2232001001300000013000000CF
|
||||
:1000C00013000000130000001300000013000000E4
|
||||
:00000001FF
|
|
@ -0,0 +1,30 @@
|
|||
|
||||
Memory Configuration
|
||||
|
||||
Name Origin Length Attributes
|
||||
onChipRam 0x0000000000000000 0x0000000000002000 w !xr
|
||||
*default* 0x0000000000000000 0xffffffffffffffff
|
||||
|
||||
Linker script and memory map
|
||||
|
||||
LOAD build/src/crt.o
|
||||
LOAD /opt/rv32i/bin/../lib/gcc/riscv32-unknown-elf/7.1.1/libgcc.a
|
||||
START GROUP
|
||||
LOAD /opt/rv32i/bin/../lib/gcc/riscv32-unknown-elf/7.1.1/../../../../riscv32-unknown-elf/lib/libc.a
|
||||
LOAD /opt/rv32i/bin/../lib/gcc/riscv32-unknown-elf/7.1.1/../../../../riscv32-unknown-elf/lib/libgloss.a
|
||||
END GROUP
|
||||
LOAD /opt/rv32i/bin/../lib/gcc/riscv32-unknown-elf/7.1.1/libgcc.a
|
||||
0x0000000000000000 . = 0x0
|
||||
|
||||
.crt_section 0x0000000000000000 0xd0
|
||||
0x0000000000000000 . = ALIGN (0x4)
|
||||
*crt.o(.text)
|
||||
.text 0x0000000000000000 0xd0 build/src/crt.o
|
||||
0x0000000000000000 _start
|
||||
OUTPUT(build/custom_simd_add.elf elf32-littleriscv)
|
||||
|
||||
.data 0x00000000000000d0 0x0
|
||||
.data 0x00000000000000d0 0x0 build/src/crt.o
|
||||
|
||||
.bss 0x00000000000000d0 0x0
|
||||
.bss 0x00000000000000d0 0x0 build/src/crt.o
|
|
@ -0,0 +1,14 @@
|
|||
@00000000
|
||||
13 0E 10 00 B3 00 00 06 63 9C 00 08 13 0E 20 00
|
||||
93 00 00 00 13 01 00 00 B3 80 20 06 63 92 00 08
|
||||
13 0E 30 00 B7 00 02 01 93 80 40 30 13 01 00 00
|
||||
B3 81 20 06 63 96 11 06 13 0E 40 00 37 12 06 03
|
||||
13 02 C2 90 B7 00 02 01 93 80 40 30 37 01 04 02
|
||||
13 01 81 60 B3 81 20 06 63 94 41 04 13 0E 50 00
|
||||
37 02 00 FF 13 02 22 10 93 00 F0 FF 37 01 01 00
|
||||
13 01 31 20 B3 81 20 06 63 94 41 02 13 0E 60 00
|
||||
93 02 60 00 93 00 10 00 13 01 20 00 93 01 30 00
|
||||
B3 80 20 06 B3 80 30 06 63 94 50 00 6F 00 00 01
|
||||
37 01 10 F0 13 01 41 F2 23 20 C1 01 37 01 10 F0
|
||||
13 01 01 F2 23 20 01 00 13 00 00 00 13 00 00 00
|
||||
13 00 00 00 13 00 00 00 13 00 00 00 13 00 00 00
|
|
@ -0,0 +1,73 @@
|
|||
PROJ_NAME=custom_simd_add
|
||||
|
||||
|
||||
RISCV_PATH=/opt/rv32i/
|
||||
CFLAGS += -march=rv32i -mabi=ilp32
|
||||
RISCV_NAME = riscv32-unknown-elf
|
||||
RISCV_OBJCOPY = $(RISCV_PATH)/bin/$(RISCV_NAME)-objcopy
|
||||
RISCV_OBJDUMP = $(RISCV_PATH)/bin/$(RISCV_NAME)-objdump
|
||||
RISCV_CLIB=$(RISCV_PATH)$(RISCV_NAME)/lib/
|
||||
RISCV_CC=$(RISCV_PATH)/bin/$(RISCV_NAME)-gcc
|
||||
LDSCRIPT=src/ld
|
||||
|
||||
|
||||
SRCS = $(wildcard src/*.c) \
|
||||
$(wildcard src/*.cpp) \
|
||||
$(wildcard src/*.S)
|
||||
|
||||
|
||||
CFLAGS += -static
|
||||
LDFLAGS += -e_start -T $(LDSCRIPT) -nostartfiles -Wl,-Map,$(OBJDIR)/$(PROJ_NAME).map -Wl,--print-memory-usage
|
||||
OBJDIR = build
|
||||
OBJS := $(SRCS)
|
||||
OBJS := $(OBJS:.c=.o)
|
||||
OBJS := $(OBJS:.cpp=.o)
|
||||
OBJS := $(OBJS:.S=.o)
|
||||
OBJS := $(addprefix $(OBJDIR)/,$(OBJS))
|
||||
|
||||
|
||||
|
||||
all: $(OBJDIR)/$(PROJ_NAME).elf $(OBJDIR)/$(PROJ_NAME).hex $(OBJDIR)/$(PROJ_NAME).asm $(OBJDIR)/$(PROJ_NAME).v
|
||||
@echo "done"
|
||||
|
||||
$(OBJDIR)/%.elf: $(OBJS) | $(OBJDIR)
|
||||
$(RISCV_CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS)
|
||||
|
||||
%.hex: %.elf
|
||||
$(RISCV_OBJCOPY) -O ihex $^ $@
|
||||
|
||||
%.bin: %.elf
|
||||
$(RISCV_OBJCOPY) -O binary $^ $@
|
||||
|
||||
%.v: %.elf
|
||||
$(RISCV_OBJCOPY) -O verilog $^ $@
|
||||
|
||||
%.asm: %.elf
|
||||
$(RISCV_OBJDUMP) -S -d $^ > $@
|
||||
|
||||
$(OBJDIR)/%.o: %.c
|
||||
mkdir -p $(dir $@)
|
||||
$(RISCV_CC) -c $(CFLAGS) $(INC) -o $@ $^
|
||||
|
||||
$(OBJDIR)/%.o: %.cpp
|
||||
mkdir -p $(dir $@)
|
||||
$(RISCV_CC) -c $(CFLAGS) $(INC) -o $@ $^
|
||||
|
||||
$(OBJDIR)/%.o: %.S
|
||||
mkdir -p $(dir $@)
|
||||
$(RISCV_CC) -c $(CFLAGS) -o $@ $^ -D__ASSEMBLY__=1
|
||||
|
||||
$(OBJDIR):
|
||||
mkdir -p $@
|
||||
|
||||
clean:
|
||||
rm -f $(OBJDIR)/$(PROJ_NAME).elf
|
||||
rm -f $(OBJDIR)/$(PROJ_NAME).hex
|
||||
rm -f $(OBJDIR)/$(PROJ_NAME).map
|
||||
rm -f $(OBJDIR)/$(PROJ_NAME).v
|
||||
rm -f $(OBJDIR)/$(PROJ_NAME).asm
|
||||
find $(OBJDIR) -type f -name '*.o' -print0 | xargs -0 -r rm
|
||||
|
||||
.SECONDARY: $(OBJS)
|
||||
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
.globl _start
|
||||
_start:
|
||||
|
||||
#define r_type_insn(_f7, _rs2, _rs1, _f3, _rd, _opc) \
|
||||
.word (((_f7) << 25) | ((_rs2) << 20) | ((_rs1) << 15) | ((_f3) << 12) | ((_rd) << 7) | ((_opc) << 0))
|
||||
|
||||
#define SIMD_ADD(_rd, _rs1, _rs2 ) \
|
||||
r_type_insn(0b0000011, _rs2, _rs1, 0b000, _rd, 0b0110011)
|
||||
|
||||
//Test 1
|
||||
li x28, 1
|
||||
SIMD_ADD(1, 0, 0)
|
||||
bne x1, x0, fail
|
||||
|
||||
//Test 2
|
||||
li x28, 2
|
||||
li x1, 0x00000000
|
||||
li x2, 0x00000000
|
||||
SIMD_ADD(1, 1, 2)
|
||||
bne x1, x0, fail
|
||||
|
||||
//Test 3
|
||||
li x28, 3
|
||||
li x1, 0x01020304
|
||||
li x2, 0x00000000
|
||||
SIMD_ADD(3, 1, 2)
|
||||
bne x3, x1, fail
|
||||
|
||||
//Test 4
|
||||
li x28, 4
|
||||
li x4, 0x0306090C
|
||||
li x1, 0x01020304
|
||||
li x2, 0x02040608
|
||||
SIMD_ADD(3, 1, 2)
|
||||
bne x3, x4, fail
|
||||
|
||||
//Test 5
|
||||
li x28, 5
|
||||
li x4, 0xFF000102
|
||||
li x1, 0xFFFFFFFF
|
||||
li x2, 0x00010203
|
||||
SIMD_ADD(3, 1, 2)
|
||||
bne x3, x4, fail
|
||||
|
||||
//Test 5
|
||||
li x28, 6
|
||||
li x5, 0x00000006
|
||||
li x1, 0x00000001
|
||||
li x2, 0x00000002
|
||||
li x3, 0x00000003
|
||||
SIMD_ADD(1, 1, 2)
|
||||
SIMD_ADD(1, 1, 3)
|
||||
bne x1, x5, fail
|
||||
|
||||
j pass
|
||||
|
||||
fail: //x28 => error code
|
||||
li x2, 0xF00FFF24
|
||||
sw x28, 0(x2)
|
||||
|
||||
pass:
|
||||
li x2, 0xF00FFF20
|
||||
sw x0, 0(x2)
|
||||
|
||||
|
||||
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
|
@ -0,0 +1,17 @@
|
|||
OUTPUT_ARCH( "riscv" )
|
||||
|
||||
MEMORY {
|
||||
onChipRam (W!RX)/*(RX)*/ : ORIGIN = 0x00000000, LENGTH = 8K
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = 0x000;
|
||||
|
||||
.crt_section :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
*crt.o(.text)
|
||||
} > onChipRam
|
||||
|
||||
}
|
|
@ -79,6 +79,9 @@ uint32_t hToI(char *c, uint32_t size) {
|
|||
|
||||
void loadHexImpl(string path,Memory* mem) {
|
||||
FILE *fp = fopen(&path[0], "r");
|
||||
if(fp == 0){
|
||||
cout << path << " not found" << endl;
|
||||
}
|
||||
fseek(fp, 0, SEEK_END);
|
||||
uint32_t size = ftell(fp);
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
|
@ -275,6 +278,10 @@ public:
|
|||
else
|
||||
fail();
|
||||
break;
|
||||
case 0xF00FFF24u:
|
||||
cout << "TEST ERROR CODE " << *data << endl;
|
||||
fail();
|
||||
break;
|
||||
#endif
|
||||
case 0xF00FFF48u: mTimeCmp = (mTimeCmp & 0xFFFFFFFF00000000) | *data;break;
|
||||
case 0xF00FFF4Cu: mTimeCmp = (mTimeCmp & 0x00000000FFFFFFFF) | (((uint64_t)*data) << 32); /*cout << "mTimeCmp <= " << mTimeCmp << endl; */break;
|
||||
|
@ -1711,6 +1718,11 @@ int main(int argc, char **argv, char **env) {
|
|||
redo(REDO,DebugPluginTest().run(1e6););
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CUSTOM_SIMD_ADD
|
||||
redo(REDO,Workspace("custom_simd_add").loadHex("../custom/simd_add/build/custom_simd_add.hex")->bootAt(0x00000000u)->run(50e3););
|
||||
#endif
|
||||
|
||||
#ifdef DHRYSTONE
|
||||
Dhrystone("dhrystoneO3_Stall","dhrystoneO3",true,true).run(1.1e6);
|
||||
#if defined(MUL) && defined(DIV)
|
||||
|
|
|
@ -10,6 +10,7 @@ CSR?=yes
|
|||
MMU?=yes
|
||||
DEBUG_PLUGIN?=STD
|
||||
DEBUG_PLUGIN_EXTERNAL?=no
|
||||
CUSTOM_SIMD_ADD?=no
|
||||
DHRYSTONE=yes
|
||||
FREERTOS=no
|
||||
REDO?=10
|
||||
|
@ -37,6 +38,10 @@ ifeq ($(CSR),yes)
|
|||
ADDCFLAGS += -CFLAGS -DCSR
|
||||
endif
|
||||
|
||||
ifeq ($(CUSTOM_SIMD_ADD),yes)
|
||||
ADDCFLAGS += -CFLAGS -DCUSTOM_SIMD_ADD
|
||||
endif
|
||||
|
||||
ifeq ($(TRACE_WITH_TIME),yes)
|
||||
ADDCFLAGS += -CFLAGS -DTRACE_WITH_TIME
|
||||
endif
|
||||
|
|
Loading…
Reference in New Issue