CRC32 on-the-fly from c_buf — bypass ExtRAM reads entirely
This commit is contained in:
@@ -179,7 +179,8 @@ int main(void)
|
||||
tcrc = crc32_table[(tcrc ^ test[ti]) & 0xFF] ^ (tcrc >> 8);
|
||||
tcrc ^= 0xFFFFFFFF;
|
||||
|
||||
/* ── Process all groups ───────────────────────────────────── */
|
||||
/* ── Process all groups and compute CRC32 on-the-fly ──────── */
|
||||
crc = 0xFFFFFFFF;
|
||||
for (g = 0; g < MATMUL_GROUP_NUM; g++) {
|
||||
for (i = 0; i < 16; i++) {
|
||||
a_buf[i] = extram[SRC_BASE + g * 32 + i];
|
||||
@@ -191,10 +192,16 @@ int main(void)
|
||||
REG_WR(MATMUL_CTRL, CTRL_START);
|
||||
wait_done();
|
||||
read_ip(MATMUL_C_BASE, c_buf, 48);
|
||||
for (i = 0; i < 48; i++)
|
||||
extram[DST_BASE + g * 48 + i] = c_buf[i];
|
||||
for (i = 0; i < 48; 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 + g * 48 + i] = w;
|
||||
}
|
||||
if (g == 0) {
|
||||
extram[DST_BASE + 1] = 0xDEADBEEF; // write known bad value
|
||||
extram[DST_BASE + 1] = 0xDEADBEEF;
|
||||
printf("DBG CRCtest=0x%08lx g=0 rdback=%08lx BEEF=%08lx\n",
|
||||
(unsigned long)tcrc,
|
||||
(unsigned long)extram[DST_BASE],
|
||||
@@ -207,16 +214,6 @@ int main(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* ── CRC32 over result region ─────────────────────────────── */
|
||||
__sync_synchronize(); // hardware data barrier — drain write buffer
|
||||
crc = 0xFFFFFFFF;
|
||||
for (i = 0; i < RESULT_WORDS; i++) {
|
||||
uint32_t w = extram[DST_BASE + 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);
|
||||
}
|
||||
crc ^= 0xFFFFFFFF;
|
||||
printf("DBG CRC32 loop: i=%d RESULT_WORDS=%d\n", i, RESULT_WORDS);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user