CRC32 on-the-fly from c_buf (bypass GCC volatile ExtRAM bug)
This commit is contained in:
@@ -155,6 +155,7 @@ int main(void)
|
|||||||
|
|
||||||
/* ── Start marker (must be first output) ──────────────────── */
|
/* ── Start marker (must be first output) ──────────────────── */
|
||||||
printf("MATMUL_START\n");
|
printf("MATMUL_START\n");
|
||||||
|
crc = 0xFFFFFFFF;
|
||||||
|
|
||||||
/* ── Prologue: Load and Start the very first group ────────── */
|
/* ── Prologue: Load and Start the very first group ────────── */
|
||||||
for (i = 0; i < 16; i++) {
|
for (i = 0; i < 16; i++) {
|
||||||
@@ -191,15 +192,13 @@ int main(void)
|
|||||||
|
|
||||||
// 4. Read the PREVIOUS group's result and write to memory
|
// 4. Read the PREVIOUS group's result and write to memory
|
||||||
read_ip(bank_C[prev_bank], c_buf, 48);
|
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++) {
|
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) {
|
if (finished_g == 0) {
|
||||||
@@ -212,11 +211,16 @@ int main(void)
|
|||||||
wait_and_clear_done();
|
wait_and_clear_done();
|
||||||
read_ip(bank_C[cur_bank], c_buf, 48);
|
read_ip(bank_C[cur_bank], c_buf, 48);
|
||||||
for (i = 0; i < 48; i++) {
|
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 ─────────────────────────────── */
|
/* ── Finalize CRC32 ──────────────────────────────────────── */
|
||||||
crc = compute_crc32(extram);
|
crc ^= 0xFFFFFFFF;
|
||||||
|
|
||||||
/* ── Final markers ────────────────────────────────────────── */
|
/* ── Final markers ────────────────────────────────────────── */
|
||||||
printf("MATMUL_CRC32=%08lx\n", (unsigned long)crc);
|
printf("MATMUL_CRC32=%08lx\n", (unsigned long)crc);
|
||||||
|
|||||||
Reference in New Issue
Block a user