test: add board FFT validation and VCD capture

This commit is contained in:
2026-07-15 04:13:15 +08:00
parent 2359e7976c
commit d45646342b
10 changed files with 198 additions and 23 deletions

View File

@@ -15,6 +15,8 @@ unsigned long CORE_CLOCKS_PER_SEC = 33000000L;
const float PI = 3.14159265358979323846;
#define FFT_MAX_ABS_ERROR_LIMIT 8
// 读取定时器的当前Tick
unsigned int get_timer_ticks() {
return RegRead(CONFREG_TIMER_BASE);
@@ -139,14 +141,35 @@ int main(int argc, char** argv)
}
printf("\n--- Verification (Only showing Bins with energy > 10) ---\n");
int max_abs_err_re = 0;
int max_abs_err_im = 0;
for (int i = 0; i < FFT_POINT_NUM; i++) {
int sw_re = (int)sw_in_re[i] / FFT_POINT_NUM;
int sw_im = (int)sw_in_im[i] / FFT_POINT_NUM;
int err_re = hw_out_re[i] - sw_re;
int err_im = hw_out_im[i] - sw_im;
if (err_re < 0) err_re = -err_re;
if (err_im < 0) err_im = -err_im;
if (err_re > max_abs_err_re) max_abs_err_re = err_re;
if (err_im > max_abs_err_im) max_abs_err_im = err_im;
if (fabs(hw_out_re[i]) > 10 || fabs(hw_out_im[i]) > 10) {
printf("Bin [%4d] Hz: HW(Re:%6d, Im:%6d) | SW(Re:%6d, Im:%6d)\n",
i,
hw_out_re[i], hw_out_im[i],
(int)sw_in_re[i] / FFT_POINT_NUM, (int)sw_in_im[i] / FFT_POINT_NUM);
sw_re, sw_im);
}
}
return 0;
int passed = max_abs_err_re <= FFT_MAX_ABS_ERROR_LIMIT &&
max_abs_err_im <= FFT_MAX_ABS_ERROR_LIMIT;
printf("Max Abs Error : Re=%d, Im=%d\n", max_abs_err_re, max_abs_err_im);
printf("FFT_MAX_ABS_ERROR_RE=%d\n", max_abs_err_re);
printf("FFT_MAX_ABS_ERROR_IM=%d\n", max_abs_err_im);
printf("FFT_ERROR_LIMIT=%d\n", FFT_MAX_ABS_ERROR_LIMIT);
printf("FFT_RESULT=%s\n", passed ? "PASS" : "FAIL");
printf("FFT_DONE\n");
return passed ? 0 : 1;
}