rv_config.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * Copyright (c) 2006-2021, JuiceVm Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021/04/22 Juice the first version
  9. */
  10. #ifndef __RV_CONFIG_H__
  11. #define __RV_CONFIG_H__
  12. #define RV64I_SUPPORT_ENBALE
  13. #define RV64_MMU_ENBALE 1
  14. #define RV_ENDLESS_LOOP_CHECK_ENBALE 1
  15. #if defined(RV_ENDLESS_LOOP_CHECK_ENBALE) && RV_ENDLESS_LOOP_CHECK_ENBALE == 1
  16. #define RV_ENDLESS_LOOP_CHECK_BUF_SIZE (30)
  17. #define RV_ENDLESS_LOOP_CHECK_EXIT_CNT (3)
  18. #define RV_ENDLESS_LOOP_CHECK_MD5_HASH 1
  19. #endif
  20. // #define RISCV_ANGEL_ONLY
  21. #define Machine_Mode_SUPPORT
  22. #define Supervisor_Mode_SUPPORT
  23. // #define User_Mode_SUPPORT
  24. // #define Hypervisor_Mode_SUPPORT
  25. #define ATOMIC_Module_SUPPORT
  26. #define RV_CPU_CSR_DEF_Vendor_ID 0
  27. #define RV_CPU_CSR_DEF_March_ID 0
  28. #define RV_CPU_CSR_DEF_Mimp_ID 0
  29. #define RV_CPU_CSR_DEF_Mhart_ID 0
  30. #define JUICE_VM_LOG_MAX_NUM (600)
  31. #define JUICE_VM_INC_CHANGELOG 0
  32. #define RAM_SIZE_KB (1024)
  33. #define RAM_SIZE_MB (1024*RAM_SIZE_KB)
  34. #define RV_CPU_SIM_RAM_START_ADDR (0x80000000)
  35. #define RV_CPU_SIM_RAM_SIZE (300 * RAM_SIZE_MB)
  36. #define RV_CPU_SIM_CAUSETABLE_MAX_NUM 100//MXLEN-1 bit
  37. #define RV_CPU_SIM_PERDEV_NUM 50
  38. #define rv_peripheral_device_add_check_dev 1
  39. // | MXLEN-1 MXLEN-2 | MXLEN-3 26| 25 0 |
  40. // | MXL[1:0](WARL) | WLRL | Extensions[25:0] (WARL) |
  41. // | 2 | MXLEN-28 | 26 |
  42. // Figure 3.1: Machine ISA register (misa).
  43. // Bit | Character | Description
  44. // 0 | A | Atomic extension
  45. // 1 | B | Tentatively reserved for Bit-Manipulation extension
  46. // 2 | C | Compressed extension
  47. // 3 | D | Double-precision floating-point extension
  48. // 4 | E | RV32E base ISA
  49. // 5 | F | Single-precision floating-point extension
  50. // 6 | G | Reserved
  51. // 7 | H | Hypervisor extension
  52. // 8 | I | RV32I/64I/128I base ISA
  53. // 9 | J | Tentatively reserved for Dynamically Translated Languages extension
  54. // 10 | K | Reserved
  55. // 11 | L | Tentatively reserved for Decimal Floating-Point extension
  56. // 12 | M | Integer Multiply/Divide extension
  57. // 13 | N | User-level interrupts supported
  58. // 14 | O | Reserved
  59. // 15 | P | Tentatively reserved for Packed-SIMD extension
  60. // 16 | Q | Quad-precision floating-point extension
  61. // 17 | R | Reserved
  62. // 18 | S | Supervisor mode implemented
  63. // 19 | T | Tentatively reserved for Transactional Memory extension
  64. // 20 | U | User mode implemented
  65. // 21 | V | Tentatively reserved for Vector extension
  66. // 22 | W | Reserved
  67. // 23 | X | Non-standard extensions present
  68. // 24 | Y | Reserved
  69. // 25 | Z | Reserved
  70. #define RV_MISA_ATOMIC_EXT (1<<0)
  71. #define RV_MISA_INTEGER_EXT (1<<8)
  72. #define RV_MISA_UMODE_INT_EXT (1<<13)
  73. #define RV_MISA_SMODE_IMP_EXT (1<<18)
  74. #define RV_MISA_UMODE_IMP_EXT (1<<20)
  75. // | MXL | XLEN |
  76. // | 1 | 32 |
  77. // | 2 | 64 |
  78. // | 3 | 128 |
  79. #define RV_MISA_XLEN_32 (1<<(32-2))
  80. #define RV_MISA_XLEN_64 (uint64_t)((uint64_t)(2)<<(64-2))
  81. // #define RV_MISA_XLEN_128 ((uint128_t)(3)<<(128-2))
  82. #define RV_MISA_CSR_REGISTER ((uint64_t)(RV_MISA_XLEN_64 | RV_MISA_ATOMIC_EXT | RV_MISA_INTEGER_EXT /*| RV_MISA_UMODE_INT_EXT*/ | RV_MISA_SMODE_IMP_EXT /*| RV_MISA_UMODE_IMP_EXT*/))
  83. #endif // __RV_CONFIG_H__