I am seeing a hang when running apps/fft on AraXL RTL/Verilator simulation. The same FFT binary/path completes on Spike, but in RTL simulation the scalar DIF/DIT parts finish and the program stops making progress after entering the vector FFT implementation.Configuration used:NR_LANES=4 NR_CLUSTERS=2.
Original behavior:
Radix 2 DIF FFT on 64 points
Initializing Twiddle Factors
Initializing Swap Table
Initializing Inputs for DIT
Initializing Inputs for DIF
The DIF execution took xxxx cycles.
The DIT execution took xxxx cycles.
After that, the program enters the vector FFT path and does not finish. The Spike run completes.
With minimal debug instrumentation, I can see that fft_r2dif_vec() is entered and vsetvl completes, but the first vector load never appears to return:[fft] calling vector DIF FFT
[fft_vec] n_fft=64 samples_re=0x800032b0 samples_im=0x800033b0 twiddles_re=0x80003eb0 twiddles_im=0x800041b0
[fft_vec] before vsetvl vl=32
[fft_vec] after vsetvl
[fft_vec] before load upper_re
The corresponding C code is approximately:upper_wing_re = __riscv_vle32_v_f32m1(samples_re, vl);
I am seeing a hang when running apps/fft on AraXL RTL/Verilator simulation. The same FFT binary/path completes on Spike, but in RTL simulation the scalar DIF/DIT parts finish and the program stops making progress after entering the vector FFT implementation.Configuration used:NR_LANES=4 NR_CLUSTERS=2.
Original behavior:
Radix 2 DIF FFT on 64 points
Initializing Twiddle Factors
Initializing Swap Table
Initializing Inputs for DIT
Initializing Inputs for DIF
The DIF execution took xxxx cycles.
The DIT execution took xxxx cycles.
After that, the program enters the vector FFT path and does not finish. The Spike run completes.
With minimal debug instrumentation, I can see that fft_r2dif_vec() is entered and vsetvl completes, but the first vector load never appears to return:[fft] calling vector DIF FFT
[fft_vec] n_fft=64 samples_re=0x800032b0 samples_im=0x800033b0 twiddles_re=0x80003eb0 twiddles_im=0x800041b0
[fft_vec] before vsetvl vl=32
[fft_vec] after vsetvl
[fft_vec] before load upper_re
The corresponding C code is approximately:upper_wing_re = __riscv_vle32_v_f32m1(samples_re, vl);