Optimize matmul CRC pipeline and expose DMA cycles
This commit is contained in:
@@ -33,6 +33,23 @@ static void uart_put_matmul_start_fifo(void)
|
||||
UART_THR = 'T';
|
||||
}
|
||||
|
||||
static void uart_put_crc_prefix_fifo(void)
|
||||
{
|
||||
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 = '=';
|
||||
}
|
||||
|
||||
static inline void uart_wait_tx_empty(void)
|
||||
{
|
||||
while ((UART_LSR & LSR_THRE) == 0) {
|
||||
@@ -49,24 +66,9 @@ static inline unsigned char hex_digit(unsigned int val, int shift)
|
||||
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);
|
||||
@@ -107,6 +109,7 @@ unsigned long UART_BASE = 0xbf000000;
|
||||
#define MATMUL_DMA_SRC_BASE (MATMUL_BASE_UNCACHED + 0x020)
|
||||
#define MATMUL_DMA_GROUPS (MATMUL_BASE_UNCACHED + 0x028)
|
||||
#define MATMUL_DMA_SRC_STRIDE (MATMUL_BASE_UNCACHED + 0x02C)
|
||||
#define MATMUL_DMA_CYCLES (MATMUL_BASE_UNCACHED + 0x034)
|
||||
|
||||
#define CTRL_START_B0 0x1
|
||||
#define CTRL_START_B1 0x2
|
||||
@@ -121,6 +124,8 @@ unsigned long UART_BASE = 0xbf000000;
|
||||
#define DMA_CTRL_VAL (CTRL_BURST_SIZE(2) | CTRL_BURST_LEN(63) | CTRL_START_BIT)
|
||||
#define MATMUL_EP_ID 0
|
||||
|
||||
volatile unsigned int matmul_dma_cycles;
|
||||
|
||||
int main(void)
|
||||
{
|
||||
if (MATMUL_GROUP_NUM <= 0) {
|
||||
@@ -141,7 +146,9 @@ int main(void)
|
||||
*(volatile unsigned int *)MATMUL_DMA_GROUPS = MATMUL_GROUP_NUM;
|
||||
*(volatile unsigned int *)MATMUL_DMA_SRC_STRIDE = 128;
|
||||
*mat_ctrl = CTRL_DMA_START;
|
||||
uart_put_crc_prefix_fifo();
|
||||
while (!(*mat_status & STATUS_DMA_DONE)) {}
|
||||
matmul_dma_cycles = *(volatile unsigned int *)MATMUL_DMA_CYCLES;
|
||||
*mat_status = STATUS_DMA_DONE;
|
||||
|
||||
crc = *mat_crc;
|
||||
|
||||
Reference in New Issue
Block a user