MIPS/resources/soft/func/include/cpu_cde.h
Paul Pan 7b33e4213a a big update
1. add test soft
2. modify verilator (TODO: crossbar need to replace)
3. fix CP0: now CU0 is always 1
4. Controller: cacheop
5. Controller: fix TEN
6. mycpu_top fix CP0_i
7. fix AXI.sv
8. fix AXIReader.sv
9. fix AXIWriter.sv: getting the correct data and length
10. MU: fix cache writeback, fix mem data mux, fix writer address, fix read request
2022-07-29 18:25:58 +08:00

108 lines
5.1 KiB
C

//soc confreg
#define CONFREG_NULL 0xbfaf8ffc
#define CONFREG_CR0 0xbfaf8000
#define CONFREG_CR1 0xbfaf8004
#define CONFREG_CR2 0xbfaf8008
#define CONFREG_CR3 0xbfaf800c
#define CONFREG_CR4 0xbfaf8010
#define CONFREG_CR5 0xbfaf8014
#define CONFREG_CR6 0xbfaf8018
#define CONFREG_CR7 0xbfaf801c
#define IO_SIMU_ADDR 0xbfafffec
#define UART_ADDR 0xbfaffff0
#define SIMU_FLAG_ADDR 0xbfaffff4
#define OPEN_TRACE_ADDR 0xbfaffff8
#define NUM_MONITOR_ADDR 0xbfaffffc
#define LED_ADDR 0xbfaff000
#define LED_RG0_ADDR 0xbfaff004
#define LED_RG1_ADDR 0xbfaff008
#define NUM_ADDR 0xbfaff010
#define SWITCH_ADDR 0xbfaff020
#define BTN_KEY_ADDR 0xbfaff024
#define BTN_STEP_ADDR 0xbfaff028
#define SW_INTER_ADDR 0xbfaff02c //switch interleave
#define TIMER_ADDR 0xbfafe000
#define SOC_LED (* (volatile unsigned *) LED_ADDR )
#define SOC_LED_RG0 (* (volatile unsigned *) LED_RG0_ADDR )
#define SOC_LED_RG1 (* (volatile unsigned *) LED_RG1_ADDR )
#define SOC_NUM (* (volatile unsigned *) NUM_ADDR )
#define SOC_SWITCHE (* (volatile unsigned *) SWITCH_ADDR )
#define SOC_BTN_KEY (* (volatile unsigned *) BTN_KEY_ADDR )
#define SOC_BTN_STEP (* (volatile unsigned *) BTN_STEP_ADDR )
#define SOC_TIMER (* (volatile unsigned *) TIMER_ADDR )
//#define disable_trace_cmp *((volatile int *)OPEN_TRACE_ADDR) = 0; \
// *((volatile int *)CONFREG_NULL ) = 0; \
// *((volatile int *)CONFREG_NULL ) = 0
//#define enable_trace_cmp *((volatile int *)OPEN_TRACE_ADDR) = 1; \
// *((volatile int *)CONFREG_NULL ) = 0; \
*((volatile int *)CONFREG_NULL ) = 0
#define trace_cmp_flag (*((volatile int *)OPEN_TRACE_ADDR))
#define disable_trace_cmp asm volatile( \
".set noreorder;" \
"lui $25,0xbfb0\n\t" \
"sw $0,-0x7004($25)\n\t" \
"sw $0,-0x7004($25)\n\t" \
"sw $0,-0x8($25)\n\t" \
"sw $0,-0x7004($25)\n\t" \
"sw $0,-0x7004($25)\n\t" \
"lw $0,-0x7004($25)\n\t" \
"lw $25,-0x8($25)\n\t" \
".set reorder" \
:::"$25" \
)
#define disable_trace_cmp_s .set noreorder; \
lui k1,0xbfb0; \
sw $0,-0x7004(k1); \
sw $0,-0x7004(k1); \
sw $0,-0x8(k1); \
sw $0,-0x7004(k1); \
sw $0,-0x7004(k1); \
lw $0,-0x7004(k1); \
lw k1,-0x8(k1); \
.set reorder; \
#define disable_num_monitor_s .set noreorder; \
lui k1,0xbfb0; \
sw $0,-0x7004(k1); \
sw $0,-0x7004(k1); \
sw $0,-0x4(k1); \
sw $0,-0x7004(k1); \
sw $0,-0x7004(k1); \
lw $0,-0x7004(k1); \
lw k1,-0x4(k1); \
.set reorder; \
#define enable_trace_cmp asm volatile( \
".set noreorder;" \
"lui $25,0xbfb0\n\t" \
"sw $0,-0x7004($25)\n\t" \
"sw $0,-0x7004($25)\n\t" \
"sw $25,-8($25)\n\t" \
"sw $0,-0x7004($25)\n\t" \
"sw $0,-0x7004($25)\n\t" \
"lw $0,-0x7004($25)\n\t" \
"lw $25,-0x8($25)\n\t" \
".set reorder" \
:::"$25" \
)
#define enable_trace_cmp_s .set noreorder; \
lui k1,0xbfb0; \
sw $0,-0x7004(k1); \
sw $0,-0x7004(k1); \
sw k1,-8(k1); \
sw $0,-0x7004(k1); \
sw $0,-0x7004(k1); \
lw $0,-0x7004(k1); \
lw k1,-0x8(k1); \
.set reorder; \
#define write_confreg_cr(num,data) *((volatile int *)(CONFREG_CR0+4*num)) = data
#define read_confreg_cr(num,data) data=*((volatile int *)(CONFREG_CR0+4*num))
#define NOP addu zero, zero, zero
#define LI(reg, imm) \
li reg, imm