diff --git a/sdk/software/examples/asm/user-sample.c b/sdk/software/examples/asm/user-sample.c index 8905b57..76af472 100644 --- a/sdk/software/examples/asm/user-sample.c +++ b/sdk/software/examples/asm/user-sample.c @@ -155,6 +155,7 @@ int main(void) /* ── Start marker (must be first output) ──────────────────── */ printf("MATMUL_START\n"); + crc = 0xFFFFFFFF; /* ── Prologue: Load and Start the very first group ────────── */ for (i = 0; i < 16; i++) { @@ -191,15 +192,13 @@ int main(void) // 4. Read the PREVIOUS group's result and write to memory read_ip(bank_C[prev_bank], c_buf, 48); - - // Required DBG prints logic modified to match the pipelined flow - if (finished_g == 1) { - printf("DBG C[0..2]=%08lx %08lx %08lx\n", - (unsigned long)c_buf[0], (unsigned long)c_buf[1], (unsigned long)c_buf[2]); - } - for (i = 0; i < 48; i++) { - extram[DST_BASE + finished_g * 48 + i] = c_buf[i]; + uint32_t w = c_buf[i]; + crc = crc32_table[(crc ^ (w & 0xFF)) & 0xFF] ^ (crc >> 8); + crc = crc32_table[(crc ^ ((w >> 8) & 0xFF)) & 0xFF] ^ (crc >> 8); + crc = crc32_table[(crc ^ ((w >> 16) & 0xFF)) & 0xFF] ^ (crc >> 8); + crc = crc32_table[(crc ^ (w >> 24) ) & 0xFF] ^ (crc >> 8); + extram[DST_BASE + finished_g * 48 + i] = w; } if (finished_g == 0) { @@ -212,11 +211,16 @@ int main(void) wait_and_clear_done(); read_ip(bank_C[cur_bank], c_buf, 48); for (i = 0; i < 48; i++) { - extram[DST_BASE + (MATMUL_GROUP_NUM - 1) * 48 + i] = c_buf[i]; + uint32_t w = c_buf[i]; + crc = crc32_table[(crc ^ (w & 0xFF)) & 0xFF] ^ (crc >> 8); + crc = crc32_table[(crc ^ ((w >> 8) & 0xFF)) & 0xFF] ^ (crc >> 8); + crc = crc32_table[(crc ^ ((w >> 16) & 0xFF)) & 0xFF] ^ (crc >> 8); + crc = crc32_table[(crc ^ (w >> 24) ) & 0xFF] ^ (crc >> 8); + extram[DST_BASE + (MATMUL_GROUP_NUM - 1) * 48 + i] = w; } - /* ── CRC32 over result region ─────────────────────────────── */ - crc = compute_crc32(extram); + /* ── Finalize CRC32 ──────────────────────────────────────── */ + crc ^= 0xFFFFFFFF; /* ── Final markers ────────────────────────────────────────── */ printf("MATMUL_CRC32=%08lx\n", (unsigned long)crc);