Line 280... |
Line 280... |
// CPU configuration
|
// CPU configuration
|
neorv32_uart_printf("\n=== << CPU >> ===\n");
|
neorv32_uart_printf("\n=== << CPU >> ===\n");
|
|
|
// ID
|
// ID
|
neorv32_uart_printf("Hart ID: 0x%x\n", neorv32_cpu_csr_read(CSR_MHARTID));
|
neorv32_uart_printf("Hart ID: 0x%x\n", neorv32_cpu_csr_read(CSR_MHARTID));
|
|
|
neorv32_uart_printf("Vendor ID: 0x%x\n", neorv32_cpu_csr_read(CSR_MVENDORID));
|
neorv32_uart_printf("Vendor ID: 0x%x\n", neorv32_cpu_csr_read(CSR_MVENDORID));
|
|
|
tmp = neorv32_cpu_csr_read(CSR_MARCHID);
|
tmp = neorv32_cpu_csr_read(CSR_MARCHID);
|
neorv32_uart_printf("Architecture ID: 0x%x", tmp);
|
neorv32_uart_printf("Architecture ID: 0x%x", tmp);
|
if (tmp == NEORV32_ARCHID) {
|
if (tmp == NEORV32_ARCHID) {
|
Line 351... |
Line 350... |
neorv32_uart_printf("Zba ");
|
neorv32_uart_printf("Zba ");
|
}
|
}
|
if (tmp & (1<<CSR_MZEXT_ZFINX)) {
|
if (tmp & (1<<CSR_MZEXT_ZFINX)) {
|
neorv32_uart_printf("Zfinx ");
|
neorv32_uart_printf("Zfinx ");
|
}
|
}
|
|
if (tmp & (1<<CSR_MZEXT_ZXNOCNT)) {
|
|
neorv32_uart_printf("Zxnocnt(!) ");
|
|
}
|
|
if (tmp & (1<<CSR_MZEXT_ZXSCNT)) {
|
|
neorv32_uart_printf("Zxscnt(!) ");
|
|
}
|
|
|
// check physical memory protection
|
// check physical memory protection
|
neorv32_uart_printf("\nPMP: ");
|
neorv32_uart_printf("\nPMP: ");
|
uint32_t pmp_num_regions = neorv32_cpu_pmp_get_num_regions();
|
uint32_t pmp_num_regions = neorv32_cpu_pmp_get_num_regions();
|
if (pmp_num_regions != 0) {
|
if (pmp_num_regions != 0) {
|
Line 363... |
Line 368... |
else {
|
else {
|
neorv32_uart_printf("not implemented\n");
|
neorv32_uart_printf("not implemented\n");
|
}
|
}
|
|
|
// check hardware performance monitors
|
// check hardware performance monitors
|
neorv32_uart_printf("HPM Counters: %u\n", neorv32_cpu_hpm_get_counters());
|
neorv32_uart_printf("HPM Counters: %ux, %u-bit wide\n", neorv32_cpu_hpm_get_counters(), neorv32_cpu_hpm_get_size());
|
|
|
|
|
// Memory configuration
|
// Memory configuration
|
neorv32_uart_printf("\n=== << Memory Configuration >> ===\n");
|
neorv32_uart_printf("\n=== << Memory Configuration >> ===\n");
|
|
|
neorv32_uart_printf("Instr. base address: 0x%x\n", SYSINFO_ISPACE_BASE);
|
neorv32_uart_printf("Instr. base address: 0x%x\n", SYSINFO_ISPACE_BASE);
|
|
|
|
// IMEM
|
neorv32_uart_printf("Internal IMEM: ");
|
neorv32_uart_printf("Internal IMEM: ");
|
__neorv32_rte_print_true_false(SYSINFO_FEATURES & (1 << SYSINFO_FEATURES_MEM_INT_IMEM));
|
if (SYSINFO_FEATURES & (1 << SYSINFO_FEATURES_MEM_INT_IMEM)) {
|
neorv32_uart_printf("IMEM size: %u bytes\n", SYSINFO_IMEM_SIZE);
|
neorv32_uart_printf("yes, %u bytes", SYSINFO_IMEM_SIZE);
|
neorv32_uart_printf("Internal IMEM as ROM: ");
|
if (SYSINFO_FEATURES & (1 << SYSINFO_FEATURES_MEM_INT_IMEM_ROM)) {
|
__neorv32_rte_print_true_false(SYSINFO_FEATURES & (1 << SYSINFO_FEATURES_MEM_INT_IMEM_ROM));
|
neorv32_uart_printf(", read-only (ROM)");
|
|
}
|
|
}
|
|
else {
|
|
neorv32_uart_printf("no");
|
|
}
|
|
neorv32_uart_printf("\n");
|
|
|
|
// DMEM
|
neorv32_uart_printf("Data base address: 0x%x\n", SYSINFO_DSPACE_BASE);
|
neorv32_uart_printf("Data base address: 0x%x\n", SYSINFO_DSPACE_BASE);
|
neorv32_uart_printf("Internal DMEM: ");
|
neorv32_uart_printf("Internal DMEM: ");
|
__neorv32_rte_print_true_false(SYSINFO_FEATURES & (1 << SYSINFO_FEATURES_MEM_INT_DMEM));
|
if (SYSINFO_FEATURES & (1 << SYSINFO_FEATURES_MEM_INT_DMEM)) { neorv32_uart_printf("yes, %u bytes\n", SYSINFO_DMEM_SIZE); }
|
neorv32_uart_printf("DMEM size: %u bytes\n", SYSINFO_DMEM_SIZE);
|
else { neorv32_uart_printf("no\n"); }
|
|
|
|
// i-cache
|
neorv32_uart_printf("Internal i-cache: ");
|
neorv32_uart_printf("Internal i-cache: ");
|
__neorv32_rte_print_true_false(SYSINFO_FEATURES & (1 << SYSINFO_FEATURES_ICACHE));
|
__neorv32_rte_print_true_false(SYSINFO_FEATURES & (1 << SYSINFO_FEATURES_ICACHE));
|
if (SYSINFO_FEATURES & (1 << SYSINFO_FEATURES_ICACHE)) {
|
if (SYSINFO_FEATURES & (1 << SYSINFO_FEATURES_ICACHE)) {
|
neorv32_uart_printf("- ");
|
neorv32_uart_printf("- ");
|
|
|