From 4c0646a5145491d21607efd38b64716fc6570d7b Mon Sep 17 00:00:00 2001 From: FallenSigh Date: Mon, 6 Jul 2026 00:16:23 +0800 Subject: [PATCH] Optimize asm matmul crc software path --- sdk/axi_ram.mif | 860 ++++-------------- sdk/software/bsp/common.mk | 13 +- sdk/software/examples/asm/Makefile | 11 +- .../examples/asm/script_matmul_fast.lds | 89 ++ sdk/software/examples/asm/start_matmul_fast.S | 54 ++ sdk/software/examples/asm/user-sample.c | 101 +- sdk/user-sample.bin | Bin 2816 -> 848 bytes 7 files changed, 422 insertions(+), 706 deletions(-) create mode 100644 sdk/software/examples/asm/script_matmul_fast.lds create mode 100644 sdk/software/examples/asm/start_matmul_fast.S diff --git a/sdk/axi_ram.mif b/sdk/axi_ram.mif index 7317fa8..37b5e71 100644 --- a/sdk/axi_ram.mif +++ b/sdk/axi_ram.mif @@ -1,49 +1,9 @@ -00000010100000000000000000000001 -00000010100000000000000000000010 -00000010100000000000000000000011 -00000010100000000000000000000100 -00000010100000000000000000000101 -00000010100000000000000000000110 -00000010100000000000000000000111 -00000010100000000000000000001000 -00000010100000000000000000001001 -00000010100000000000000000001010 -00000010100000000000000000001011 -00000010100000000000000000001100 -00000010100000000000000000001101 -00000010100000000000000000001110 -00000010100000000000000000001111 -00000010100000000000000000010000 -00000010100000000000000000010001 -00000010100000000000000000010010 -00000010100000000000000000010011 -00000010100000000000000000010100 -00000010100000000000000000010101 -00000010100000000000000000010110 -00000010100000000000000000010111 -00000010100000000000000000011000 -00000010100000000000000000011001 -00000010100000000000000000011010 -00000010100000000000000000011011 -00000010100000000000000000011100 -00000010100000000000000000011101 -00000010100000000000000000011110 -00000010100000000000000000011111 -00000000000101010000000000001100 -00000011100001000000000000001110 -00000000010000001001000110001101 -00000110000000000000000110100000 -00000110000000000000010110100000 -00000110000000000000000110100001 -00000110000000000000010110100001 -00000010100000000000010110001100 -01011111111111111110100110001110 00000011100000000010000000001100 00000011100000000110000000001101 00000100000000000000000110101100 00000100000001100000000000100000 00000100000001100000010000100000 -00000011100000000010010000001100 +00000011100000000110010000001100 00000100000001100000000000101100 00010101010000000000000000001100 00000011100000000010010110001100 @@ -51,655 +11,203 @@ 00000011100000000100000000001100 00000011100000000110000000001101 00000100000000000000000110101100 -00011100000000000000000000101100 -00000010101001111011000110001100 -00011100000000000001000000001101 -00000010101111001001000110101101 -00011100000000000001000000001110 -00000010101111010111000111001110 -01101100000000000001100110101110 -00101000100000000000000110001111 -00101001100000000000000110101111 -00000010100000000001000110001100 -00000010100000000001000110101101 -01101011111111111111000110101110 -00011100000000000001000000001100 -00000010101111001111000110001100 -00011100000000000001000000001101 -00000010101111001101000110101101 -01101100000000000001000110001101 -00101001100000000000000110000000 -00000010100000000001000110001100 -01101011111111111111100110001101 -00000011100000000110010000001100 -00000100000001100000000000101100 -00011100000000000001000000001100 -00000010101111000001000110001100 -00101000100000000000000110001101 -00000011100000000001110000001110 -00101001000000000000100110101110 -00000011100000100000000000001110 -00101001000000000000110110101110 -00000000000101010000000000001110 -00101001000000000000010110101110 -00010101011111100100000111101111 -00000011100101000000000111101111 -00101000100000000000000111101111 -00000011100000000110110000001110 -01011000000000000000100000001111 -00000011100000000000010000001110 -00101001000000000000000110101110 -00000011100000000000110000001110 -00101001000000000000110110101110 -00000000000101010000000000001110 -00101001000000000001000110101110 -00011100000000000000000000001100 -00000010100010010001000110001100 -00000100000000000011000000101100 -00000011100000000000010000001101 -00000100000000010001000000101101 -00000011100000000001000000001101 -00000100000000000000000110100000 +00000011100000000001000000001100 +00000100000000000000000110000000 00000100000000000000010000100000 -00010100000000000000000000101101 -00000011101111111111110110101101 00000100000000000001000000100000 -00000100000000000001000000101101 +00010101011111100000000000001100 +00000011100000000001110000001101 +00101001000000000000100110001101 +00000011100000100000000000001101 +00101001000000000000110110001101 +00101001000000000000010110000000 +00010101011111100100000111101110 +00000011100101000000000111001110 +00101000100000000000000111001110 +00000011100000000110110000001101 +01011000000000000000100000001110 +00000011100000000000010000001101 +00101001000000000000000110001101 +00000011100000000000110000001101 +00101001000000000000110110001101 +00101001000000000001000110000000 00011100000000000010000000000011 -00000010101110010101000001100011 +00000010101111011111000001100011 00000000000101010000000000000100 00000000000101010000000000000101 -01010100000000001000010000000000 -01010100000000000100000000000000 +01010100000000000000110000000000 01010000000000000000000000000000 00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -01010000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00010101011111100000000000010000 +00010101011111100000000000001100 +00000010100000010011010000010000 +00101001000000000000000110010000 +00000010100000010000010000001111 +00101001000000000000000110001111 +00000010100000010101000000001110 +00101001000000000000000110001110 +00101001000000000000000110010000 +00000010100000010101010000000100 +00101001000000000000000110000100 +00000010100000010011000000010100 +00101001000000000000000110010100 +00000010100000010111110000010011 +00101001000000000000000110010011 +00000010100000010100110000010010 +00101001000000000000000110010010 +00101001000000000000000110001110 +00101001000000000000000110001111 +00000010100000010100100000001001 +00101001000000000000000110001001 +00010101011111101010000000001101 +00101001000000000000000110001110 +00000011100000000100000110101000 +00101001100000000000000100000000 +00000011100000000001000110110001 +00000010100000000101100000000111 +00101001100000000000001000100111 +00000011100000001000000110100101 +00010100001110001000000000000110 +00010100000000000000000000110000 +00101001100000000000000010100110 +00000011100000001010000110100100 +00000011100011100010001000010000 +00101001100000000000000010010000 +00000011100000001011000110110011 +00000010100000100000000000010100 +00000010100001000000000000010010 +00101001100000000000001001110100 00000010101111111100000001100011 -00000010100000010011010000001100 -00011100000000000001000000001111 -00000010101101101101000111101111 -00000011100000000001011000001101 -00101001100000000011000001101100 -00101010000000000011000001101110 -00000010100000000000010111101111 -00101010000000000000000110101100 -00000011010000001000000110001100 -01011011111111111111100110000000 -00101001000000000000001000001110 -00101000000000000000000111101100 -01011111111111111110000110000000 -00010101011111101010000000001100 -00000011100000000100000110010000 -00101001100000000000001000000000 -00000010100000000101100000001110 -00000011100000000001000110001101 -00101001100000000000000110101110 -00010100001110001000000000000100 -00010100000000000000000000101111 -00000011100000001000000110010100 -00101001100000000000001010000100 -00000011100000001010000110010011 -00000011100011100010000111101111 -00101001100000000000001001101111 -00000011100000001011000110010001 -00000010100000100000000000010010 -00000010100001000000000000010000 -00101001100000000000001000110010 -00010101011111101010000000001110 -00101001100000000000000110010000 -00101000100000000000000110101100 +00010101011111101010000000001111 +00000000000101010000001000101110 +00101001100000000000000110110010 +00101000100000000000000111001100 00000011010000000100000110001100 01011011111111111111100110000000 -00000010100000000100000000001111 -00101001100000000000000110101111 -00000011100000000100000111001110 -00101000100000000000000111010001 -00010101011111100000000000010000 -00000010100000010011010000001100 -00011100000000000001000000001111 -00000010101101001001000111101111 -00000011100000000001011000001101 -00101001100000000011000001101100 -00101010000000000011000001101110 -00000010100000000000010111101111 -00101010000000000000000110101100 -00000011010000001000000110001100 -01011011111111111111100110000000 -00101001000000000000001000001110 -00101000000000000000000111101100 -01011111111111111110000110000000 -00010101011111100000000000010000 -00000010100000000111000000001110 -00000010100000000010010000010011 -00000010101111111111000000010010 -00000011100000000001011000001101 -00000000000101111011101000101100 -00000011010000000011110110001100 -00000010100000010101110110001111 -01101000000000000000101001101100 -00000010100000001100000110001111 -00101010000000000000000110101100 -00000011010000001000000110001100 -01011011111111111111100110000000 -00101001000000000000001000001111 -00000010101111111111000111001110 -01011111111111111101100111010010 -00010101011111100000000000010000 -00000010100000000010100000001100 -00011100000000000001000000001111 -00000010101100101111000111101111 -00000011100000000001011000001101 -00101001100000000011000001101100 -00101010000000000011000001101110 -00000010100000000000010111101111 +00000010100000000100000000010000 +00000011100000000100000111101100 +00101001100000000000000111010000 +00101000100000000000000110001110 +00010101011111100000000000001101 +00000011100000000001010110101111 00000011010000000000000000000000 +00101010000000000000000111101100 +00000011010000001000000110001100 +01011011111111111111100110000000 +00000010100000010011010000010000 +00101001000000000000000110110000 +00000010100000010000010000001100 +00101001000000000000000110101100 +00000010100000010101000000010001 +00101001000000000000000110110001 +00000000010001001111000111001100 +00101001100000000011000001101100 +00101010000000000011000001110001 +00000010100000010101010000001000 +00101001000000000000000110110000 +00101001000000000000000110101000 +00000010100000010011000000000111 +00101001000000000000000110100111 +00000010100000010111110000000110 +00101001000000000000000110100110 +00000010100000010000110000001111 +00101001000000000000000110101111 +00000010100000010100100000000101 +00101001000000000000000110100101 +00101001000000000000000110101111 +00000010100000001100110000000100 +00101001000000000000000110100100 +00000010100000001100100000010100 +00000010100000001111010000010011 +00101001000000000000000110110100 +00000010100000000010010000010010 +00101001000000000000000110110011 +00000010100000010101111000110000 +01101000000000000000101001001100 +00000010100000001100001000110000 +00010101011111100000000000001101 +00000000010001001110000111001100 +00000011010000000011110110001100 +00101001000000000000000110110000 +00000010100000000010010000001111 +00000010100000010101110110001101 +01101000000000000000100111101100 +00000010100000001100000110001101 +00010101011111100000000000001111 +00000000010001001101000111001100 +00000011010000000011110110001100 +00101001000000000000000111101101 +00000010100000000010010000010000 +00000010100000010101110110001111 +01101100000000010001101000001100 +00010101011111100000000000001101 +00101001000000000000000110101111 +00000011100000000001010110101101 00101010000000000000000110101100 00000011010000001000000110001100 01011011111111111111100110000000 -00101001000000000000001000001110 -00101000000000000000000111101100 -01011111111111111101110110000000 +00000000010001001100000111001100 +00000011010000000011110110001100 +00000010100000000010010000001111 +00000010100000010101110110001101 +01101000000000000000100111101100 +00000010100000001100000110001101 +00010101011111100000000000010000 +00000000010001001011000111001100 +00000011010000000011110110001100 +00101001000000000000001000001101 +00000010100000000010010000001111 +00000010100000010101110110001101 +01101000000000000000100111101100 +00000010100000001100000110001101 +00010101011111100000000000010000 +00000000010001001010000111001100 +00000011010000000011110110001100 +00101001000000000000001000001101 +00000010100000000010010000001111 +00000010100000010101110110001101 +01101000000000000000100111101100 +00000010100000001100000110001101 +00010101011111100000000000010000 +00000000010001001001000111001100 +00000011010000000011110110001100 +00101001000000000000001000001101 +00000010100000000010010000001111 +00000010100000010101110110001101 +01101000000000000000100111101100 +00000010100000001100000110001101 +00010101011111100000000000001111 +00000011010000000011110111001110 +00101001000000000000000111101101 +00000010100000000010010000001100 +00000010100000010101110111001111 +01101000000000000000100110001110 +00000010100000001100000111001111 +00010101011111100000000000001100 +00101001000000000000000110001111 +00000010100000010011010000001101 +00101001000000000000000110001101 +00000010100000010000010000001110 +00101001000000000000000110001110 +00000010100000010101000000000101 +00101001000000000000000110000101 +00101001000000000000000110001101 +00000010100000010101010000010100 +00101001000000000000000110010100 +00000010100000010011000000010011 +00101001000000000000000110010011 +00000010100000010111110000010010 +00101001000000000000000110010010 +00000010100000010001000000010001 +00101001000000000000000110010001 +00000010100000010011110000010000 +00101001000000000000000110010000 +00000010100000010011100000001111 +00101001000000000000000110001111 +00000010100000010001010000001110 +00101001000000000000000110001110 00000000000101010000000000000100 00000010100000000100000001100011 01001100000000000000000000100000 -00000011010000000000000000000000 -00000011010000000000000000000000 -00000011010000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000010101111100001000001100011 -00101001100000011110000001100001 -00101001100000011101000001100010 -00101001100000011100000001100011 -00101001100000011011000001100100 -00101001100000011010000001100101 -00101001100000011001000001100110 -00101001100000011000000001100111 -00101001100000010111000001101000 -00101001100000010110000001101001 -00101001100000010101000001101010 -00101001100000010100000001101011 -00101001100000010011000001101100 -00101001100000010010000001101101 -00101001100000010001000001101110 -00101001100000010000000001101111 -00101001100000001111000001110000 -00101001100000001110000001110001 -00101001100000001101000001110010 -00101001100000001100000001110011 -00101001100000001011000001110100 -00101001100000001010000001110101 -00101001100000001001000001110110 -00101001100000001000000001110111 -00101001100000000111000001111000 -00101001100000000110000001111001 -00101001100000000101000001111010 -00101001100000000100000001111011 -00101001100000000011000001111100 -00101001100000000010000001111101 -00101001100000000001000001111110 -00101001100000000000000001111111 -00000100000000000001010000000100 -00000100000000000001100000000101 -00000000010001001100000010001100 -01011100000000001001000000001100 -00000011010011111111000010001100 -00000000010001001000100110001101 -00000000000101010000000110101110 -00000011010000000000010111001110 -00000011100000000000010000010100 -01011000000000010000100111010100 -00000000000101010000000110101110 -00000011010000000000100111001110 -00000011100000000000100000010100 -01011000000000010000000111010100 -00000000000101010000000110101110 -00000011010000000001000111001110 -00000011100000000001000000010100 -01011000000000001111010111010100 -00000000000101010000000110101110 -00000011010000000010000111001110 -00000011100000000010000000010100 -01011000000000001110100111010100 -00000000000101010000000110101110 -00000011010000000100000111001110 -00000011100000000100000000010100 -01011000000000001101110111010100 -00000000000101010000000110101110 -00000011010000001000000111001110 -00000011100000001000000000010100 -01011000000000001101000111010100 -00000000000101010000000110101110 -00000011010000010000000111001110 -00000011100000010000000000010100 -01011000000000001100010111010100 -00000000000101010000000110101110 -00000011010000100000000111001110 -00000011100000100000000000010100 -01011000000000001011100111010100 -01010000000000000001000000000000 -00000010100000000001000010110100 -00000100000000000001100000110100 -01010000000000000000000000000000 -00101000100000011110000001100001 -00101000100000011101000001100010 -00101000100000011100000001100011 -00101000100000011011000001100100 -00101000100000011010000001100101 -00101000100000011001000001100110 -00101000100000011000000001100111 -00101000100000010111000001101000 -00101000100000010110000001101001 -00101000100000010101000001101010 -00101000100000010100000001101011 -00101000100000010011000001101100 -00101000100000010010000001101101 -00101000100000010001000001101110 -00101000100000010000000001101111 -00101000100000001111000001110000 -00101000100000001110000001110001 -00101000100000001101000001110010 -00101000100000001100000001110011 -00101000100000001011000001110100 -00101000100000001010000001110101 -00101000100000001001000001110110 -00101000100000001000000001110111 -00101000100000000111000001111000 -00101000100000000110000001111001 -00101000100000000101000001111010 -00101000100000000100000001111011 -00101000100000000011000001111100 -00101000100000000010000001111101 -00101000100000000001000001111110 -00101000100000000000000001111111 -00000010100000011111000001100011 -00000110010010000011100000000000 -01010100000000000010010000000000 -01010011111111110111101111111111 -01010011111111110111011111111111 -01010011111111110111001111111111 -01010011111111110110111111111111 -01010011111111110110101111111111 -01010011111111110110011111111111 -01010011111111110110001111111111 -01010011111111110101111111111111 -01010000000000000000000000000000 -00000011010000000000000000000000 -00000011010000000000000000000000 -00000011010000000000000000000000 -00000011010000000000000000000000 -00000011010000000000000000000000 -00000011010000000000000000000000 -00000011010000000000000000000000 -00000011010000000000000000000000 -00000011010000000000000000000000 -00000011010000000000000000000000 -00000011010000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -01001101010101000100000101001101 -01010011010111110100110001010101 -01010100010100100100000101010100 -00000000000000000000000000001010 -01001101010101000100000101001101 -01000011010111110100110001010101 -00110010001100110100001101010010 -00000000000000000000000000111101 -01010100010000010100110100001010 -01011111010011000101010101001101 -01000101010011100100111101000100 -00000000000000000000000000001010 -10111111000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 -00000000000000000000000000000000 +00000010100000001100000110001111 +01010011111111101110101111111111 +01010011111111101110101111111111 diff --git a/sdk/software/bsp/common.mk b/sdk/software/bsp/common.mk index 88764f5..b40ec06 100644 --- a/sdk/software/bsp/common.mk +++ b/sdk/software/bsp/common.mk @@ -19,27 +19,34 @@ CFLAGS += -nostartfiles -nostdlib -nostdinc -static -fno-builtin CFLAGS += -DCLOCKS_PER_SEC=CORE_CLOCKS_PER_SEC -D_CLOCKS_PER_SEC_=CORE_CLOCKS_PER_SEC CFLAGS += -DUSE_CPU_CLOCK_COUNT +LINKER_SCRIPT ?= $(COMMON_DIR)/env/script.lds +BSP_STARTUP ?= $(COMMON_DIR)/env/start.S +BSP_USE_TRAP ?= 1 +BSP_USE_DRIVERS ?= 1 + #若使用 newlib , 将下面的 -lsemihost 替换为 -lgloss LDFLAGS += -T $(LINKER_SCRIPT) \ -Wl,--gc-sections -Wl,--check-sections \ -lc -lm -lg -lsemihost -lgcc -L$(PICOLIBC_DIR)/lib -LINKER_SCRIPT := $(COMMON_DIR)/env/script.lds - -ASM_SRCS += $(COMMON_DIR)/env/start.S +ASM_SRCS += $(BSP_STARTUP) +ifeq ($(BSP_USE_TRAP),1) ifeq ($(TARGET), RTThread_Nano) else ASM_SRCS += $(COMMON_DIR)/env/trap_handler.S endif +endif +ifeq ($(BSP_USE_DRIVERS),1) C_SRCS += $(COMMON_DIR)/drivers/confreg_time.c C_SRCS += $(COMMON_DIR)/drivers/core_time.c C_SRCS += $(COMMON_DIR)/drivers/common_func.c C_SRCS += $(COMMON_DIR)/drivers/dvi.c \ $(COMMON_DIR)/drivers/led.c \ $(COMMON_DIR)/drivers/seg7.c +endif INCLUDES += -I./ \ -I$(COMMON_DIR)/include \ diff --git a/sdk/software/examples/asm/Makefile b/sdk/software/examples/asm/Makefile index 8e3e323..3fc5595 100644 --- a/sdk/software/examples/asm/Makefile +++ b/sdk/software/examples/asm/Makefile @@ -1,7 +1,8 @@ TARGET = user-sample MATMUL_GROUP_NUM ?= 5000 -CFLAGS += -O3 -g -DMATMUL_GROUP_NUM=$(MATMUL_GROUP_NUM) +MATMUL_FAST_START ?= 1 +CFLAGS += -O3 -g -DMATMUL_GROUP_NUM=$(MATMUL_GROUP_NUM) -DMATMUL_FAST_START=$(MATMUL_FAST_START) C_SRCS := $(wildcard ./*.c ) @@ -9,6 +10,14 @@ OBJDIR = obj COMMON_DIR = ../../bsp GCC_DIR=../../../toolchains/loongson-gnu-toolchain-8.3-x86_64-loongarch32r-linux-gnusf-v2.0 PICOLIBC_DIR=../../../toolchains/picolibc + +ifeq ($(MATMUL_FAST_START),1) +LINKER_SCRIPT := script_matmul_fast.lds +BSP_STARTUP := start_matmul_fast.S +BSP_USE_TRAP := 0 +BSP_USE_DRIVERS := 0 +endif + include ../../bsp/common.mk # Strip picolibc: no -lc -lm -lg -lsemihost, keep -lgcc only diff --git a/sdk/software/examples/asm/script_matmul_fast.lds b/sdk/software/examples/asm/script_matmul_fast.lds new file mode 100644 index 0000000..9117184 --- /dev/null +++ b/sdk/software/examples/asm/script_matmul_fast.lds @@ -0,0 +1,89 @@ +OUTPUT_ARCH(loongarch) +ENTRY(_start) + +MEMORY +{ + isram (rwxai) : ORIGIN = 0x1c000000, LENGTH = 512K + dsram (rwxai) : ORIGIN = 0x1c080000, LENGTH = 512K +} + +SECTIONS +{ + __stack_size = DEFINED(__stack_size) ? __stack_size : 4K; + + .init : + { + KEEP(*(SORT_NONE(.init))) + } >isram AT>isram + + . = ALIGN(16); + .text : + { + _ftext = .; + *(.text.unlikely .text.unlikely.*) + *(.text.startup .text.startup.*) + *(.text .text.*) + *(.gnu.linkonce.t.*) + } >isram AT>isram + + . = ALIGN(16); + .rodata : + { + *(.rdata) + *(.rodata .rodata.*) + *(.gnu.linkonce.r.*) + *(.srodata.cst16) + *(.srodata.cst8) + *(.srodata.cst4) + *(.srodata.cst2) + *(.srodata .srodata.*) + } >isram AT>isram + + . = ALIGN(16); + PROVIDE(__etext = .); + PROVIDE(_etext = .); + PROVIDE(etext = .); + PROVIDE(_data_lma = .); + + .data ORIGIN(dsram) : + { + PROVIDE(_data = .); + *(.data .data.*) + *(.gnu.linkonce.d.*) + . = ALIGN(16); + PROVIDE(__global_pointer$ = . + 0x800); + *(.sdata .sdata.*) + *(.gnu.linkonce.s.*) + . = ALIGN(16); + PROVIDE(_edata = .); + PROVIDE(edata = .); + } >dsram AT>isram + + .bss : + { + PROVIDE(__bss_start = .); + *(.sbss*) + *(.sbss.*) + *(.dynsbss) + *(.scommon) + *(.bss) + *(.bss.*) + *(.dynbss) + *(.gnu.linkonce.sb.*) + *(COMMON) + . = ALIGN(16); + PROVIDE(_end = .); + PROVIDE(end = .); + } >dsram AT>dsram + + PROVIDE(__heap_start = _end); + + .stack ORIGIN(dsram) + LENGTH(dsram) - __stack_size : + { + PROVIDE(_heap_end = .); + PROVIDE(__heap_end = _heap_end); + PROVIDE(__heap_size = __heap_end - __heap_start); + . = __stack_size; + PROVIDE(_stack = .); + } >dsram AT>dsram +} diff --git a/sdk/software/examples/asm/start_matmul_fast.S b/sdk/software/examples/asm/start_matmul_fast.S new file mode 100644 index 0000000..f276ad7 --- /dev/null +++ b/sdk/software/examples/asm/start_matmul_fast.S @@ -0,0 +1,54 @@ +#include "regdef.h" + + .section .init + .globl _start + .type _start, @function + +_start: + /* Enable direct mapped windows used by SRAM and uncached peripherals. */ + li.w t0, 0x8 + li.w t1, 0x18 + csrxchg t0, t1, csr_crmd + + csrwr zero, csr_dmw0 + csrwr zero, csr_dmw1 + li.w t0, 0x19 + csrwr t0, csr_dmw0 + li.w t0, 0xa0000009 + csrwr t0, csr_dmw1 + + li.w t0, 0x10 + li.w t1, 0x18 + csrxchg t0, t1, csr_crmd + + /* Polling-only benchmark: keep interrupts disabled. */ + li.w t0, 0x4 + csrxchg zero, t0, csr_crmd + csrwr zero, csr_prmd + csrwr zero, csr_ecfg + + /* UART0 init, 115200 baud with the same divisor selection as BSP start.S. */ + li.w t0, 0xbf000000 + li.w t1, 0x07 + st.b t1, t0, 2 + li.w t1, 0x80 + st.b t1, t0, 3 + st.b zero, t0, 1 + li.w t2, 0xbf20f500 + ld.w t2, t2, 0 + li.w t1, 0x1b + beq zero, t2, 1f + li.w t1, 0x1 +1: + st.b t1, t0, 0 + li.w t1, 0x03 + st.b t1, t0, 3 + st.b zero, t0, 4 + + la.local sp, _stack + li.w a0, 0 + li.w a1, 0 + bl main + +1: + b 1b diff --git a/sdk/software/examples/asm/user-sample.c b/sdk/software/examples/asm/user-sample.c index 6229d1a..bfe91ab 100644 --- a/sdk/software/examples/asm/user-sample.c +++ b/sdk/software/examples/asm/user-sample.c @@ -1,50 +1,104 @@ /** * user-sample - CIC-IEC 2026 Stage 3 Evaluation Program * - * Matmul AXI-master CRC-only path. + * Matmul AXI-master CRC-only path with fast startup and low-overhead UART output. */ #include -/* ─── UART 16550 direct access (bypasses slow printf/picolibc) ──────── */ #define UART_THR (*(volatile unsigned char *)0xbf000000) #define UART_LSR (*(volatile unsigned char *)0xbf000005) #define LSR_THRE 0x20 -static inline void uart_tx(unsigned char c) { - while (!(UART_LSR & LSR_THRE)) {} +static inline void uart_tx(unsigned char c) +{ + while ((UART_LSR & LSR_THRE) == 0) { + } UART_THR = c; } -static void uart_puts(const char *s) { - while (*s) uart_tx(*s++); +static void uart_put_matmul_start_fifo(void) +{ + UART_THR = 'M'; + UART_THR = 'A'; + UART_THR = 'T'; + UART_THR = 'M'; + UART_THR = 'U'; + UART_THR = 'L'; + UART_THR = '_'; + UART_THR = 'S'; + UART_THR = 'T'; + UART_THR = 'A'; + UART_THR = 'R'; + UART_THR = 'T'; } -static void uart_puthex(unsigned int val) { - int i; - for (i = 28; i >= 0; i -= 4) { - unsigned char nibble = (val >> i) & 0xF; - uart_tx(nibble < 10 ? '0' + nibble : 'a' + nibble - 10); +static inline void uart_wait_tx_empty(void) +{ + while ((UART_LSR & LSR_THRE) == 0) { } } -/* ─── Configurable group count (default 5000) ──────────────────────── */ +static inline unsigned char hex_digit(unsigned int val, int shift) +{ + unsigned char nibble = (unsigned char)((val >> shift) & 0xf); + + return (unsigned char)(nibble < 10 ? ('0' + nibble) : ('a' + nibble - 10)); +} + +static void uart_put_result_fifo(unsigned int crc) +{ + uart_wait_tx_empty(); + UART_THR = 'M'; + UART_THR = 'A'; + UART_THR = 'T'; + UART_THR = 'M'; + UART_THR = 'U'; + UART_THR = 'L'; + UART_THR = '_'; + UART_THR = 'C'; + UART_THR = 'R'; + UART_THR = 'C'; + UART_THR = '3'; + UART_THR = '2'; + UART_THR = '='; + UART_THR = hex_digit(crc, 28); + UART_THR = hex_digit(crc, 24); + UART_THR = hex_digit(crc, 20); + + uart_wait_tx_empty(); + UART_THR = hex_digit(crc, 16); + UART_THR = hex_digit(crc, 12); + UART_THR = hex_digit(crc, 8); + UART_THR = hex_digit(crc, 4); + UART_THR = hex_digit(crc, 0); + UART_THR = 'M'; + UART_THR = 'A'; + UART_THR = 'T'; + UART_THR = 'M'; + UART_THR = 'U'; + UART_THR = 'L'; + UART_THR = '_'; + UART_THR = 'D'; + UART_THR = 'O'; + UART_THR = 'N'; + UART_THR = 'E'; +} + #ifndef MATMUL_GROUP_NUM #define MATMUL_GROUP_NUM 5000 #endif -/* ─── BSP globals ─────────────────────────────────────────────────── */ +#if MATMUL_FAST_START == 0 unsigned long UART_BASE = 0xbf000000; +#endif -/* ─── Memory layout ────────────────────────────────────────────────── */ #define EXTRAM_BASE_PHYS 0x1c400000 #define EXTRAM_BASE_UNCACHED (0xA0000000 | (EXTRAM_BASE_PHYS & 0x1FFFFFFF)) #define SRC_BASE_WORDS 0 -/* ExtRAM physical address for matrix inputs. */ #define EXTRAM_PHYS_AB(g) (EXTRAM_BASE_PHYS + (SRC_BASE_WORDS * 4) + (g) * 128) -/* ─── MATMUL IP registers (Ping-Pong Memory Map) ──────────────────── */ #define MATMUL_BASE_PHYS 0x1f500000 #define MATMUL_BASE_UNCACHED 0xbf500000 @@ -64,24 +118,22 @@ unsigned long UART_BASE = 0xbf000000; #define MATMUL_CRC (MATMUL_BASE_UNCACHED + 0x010) -/* ─── Pre-computed DMA burst control word ──────────────────────────── */ #define DMA_CTRL_VAL (CTRL_BURST_SIZE(2) | CTRL_BURST_LEN(63) | CTRL_START_BIT) #define MATMUL_EP_ID 0 -/* ═══════════════════════════════════════════════════════════════════ */ int main(void) { - if (MATMUL_GROUP_NUM <= 0) return 0; + if (MATMUL_GROUP_NUM <= 0) { + return 0; + } - /* ── Hot-path local volatile pointers (one-time addr calc) ──────── */ volatile unsigned int *mat_ctrl = (volatile unsigned int *)MATMUL_CTRL; volatile unsigned int *mat_status = (volatile unsigned int *)MATMUL_STATUS; volatile unsigned int *mat_crc = (volatile unsigned int *)MATMUL_CRC; unsigned int crc; - /* ── Start marker (must be first output) ──────────────────── */ - uart_puts("MATMUL_START\n"); + uart_put_matmul_start_fifo(); *(volatile unsigned int *)MATMUL_CRC = 0; *mat_status = STATUS_DMA_DONE | STATUS_DONE | STATUS_ERROR; @@ -92,12 +144,9 @@ int main(void) while (!(*mat_status & STATUS_DMA_DONE)) {} *mat_status = STATUS_DMA_DONE; - /* ── Read hardware CRC32 ──────────────────────────────────── */ crc = *mat_crc; - uart_puts("MATMUL_CRC32="); - uart_puthex(crc); - uart_puts("\nMATMUL_DONE\n"); + uart_put_result_fifo(crc); return 0; } diff --git a/sdk/user-sample.bin b/sdk/user-sample.bin index 4d257a966fb24417ef5743ed08de9ef6a95affef..b631c9677a3b6339f826ce5d1c0bc5cd01e6fd0d 100755 GIT binary patch literal 848 zcmah{ziSjx5T2d4cge}_-QH!lkraz4x9Z}h!NGhH~~S|jQm+K?E)n}t(vw^iR38xTx~`JXVVNE zIp;UT6sKv~ccF8j^MI-=Q(|J8t$%sRE=82XA&-`bXb}ftGYT$RUdNr1Yq<+7E?VvY zHRmo_UIT`yR=GlJdsMSttqUB{bJXd>W2>4O`F?yY$b^Te z{|@<%dWVPo2=7s5h7QfO>_i7&&(MnpUzmSVhOZv5|8;>HsU){knwy3{)$HL+!Q*3K z9v*jrCC~CcFb8itK#kqL@HQ}fD?IZ}_yyw1Y2gE4dc$(<1g)fRgte#shXra~&WzSC zLDRl&d03#8_Mvb|`S)Y~6Zimp7rb}UX^i|J_Y|Jc_b)&F!?FI)T7lN;jX9tHerv>U z{fFQ9H?O@8;6wZL(B~2Q?7+tneCYn@|NEG=?p+bH*8k68*7ty#3o+x-?qI&7-NAfy jcglg~4PbC-vVZfF{R_u6bYJWE>zJt4#aqW8e_Z_uuQbfG literal 2816 zcmeH`&u<$=6vyArtW6Tu_PW^p0R~(tNb{;xSfz(vDy?adIJDGij1&ow11_`>)1(wA zPzZ0LTq=L313Bi$A`grE; zyxE!gyjh1tDWHK1VjvD40ezq!41h<02NEC&QosjkunRl}G9U|fgFRp`*asd5PkI>_xnQX)0S?X)5oqRVnysuYIEuyG7Ru!siNfpp81Bb_YTmXu02c zC8>yib;!sssBL{JJ6{w{N;o+x@E&;*cI8OsS)Bc<6+MHoFBV0&_g~Qy=r7z5y^E%C z_h!_gXkPRV%(({NVX?bLDi9Ubcopwn!}Dm5f9`ML=0DzFG%q=cyFG|IzTVuNH}vfu z3XcYQ?lr4w19W!ohwbM};e4wbP4&~yoyz9A2H#5LW#j9I)+Gv}d;PGRJDo~Y<0{UP zCpsSGZLz(~RsVbS`d!O!+_qd@v3&ZvTy72kC!tdP{zOW+v{&nFG>cSt+3ttrBk0ymb9uxkgBz!3l{lZz2t@~!{p7=tKs@dJ$reW8cvp0V}Z`#Ubp(4(apFYaUWu*7pD>9zPEm( z?)ZMh_}*LhdNJym!FS!d(~EJ3GJ<%m7du6rA*)+IK8T-3Jgr-|XcQN-bki4g7<+@U z5*!&gGH_(z$iR_-BLhbUjtm?bI5Kc#;K;y{fg=M)2969I88|X$F?14pL1ZWSGQF;0V2?p*4ObS{DmU;>PTGoT78osnp-Tebdc-T$t? z{XXnOI|g

=^jJ7&uWZpLqFrWu#m@RUW{hd-1VT$DTWM6!Ads!SKnKUWmr=Yj&IN F{~s?zeB}TD