main.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // See LICENSE for license details.
  2. #include <stdio.h>
  3. #include <time.h>
  4. #include <stdlib.h>
  5. #include "nuclei_sdk_soc.h"
  6. void print_misa(void)
  7. {
  8. CSR_MISA_Type misa_bits = (CSR_MISA_Type) __RV_CSR_READ(CSR_MISA);
  9. static char misa_chars[30];
  10. uint8_t index = 0;
  11. if (misa_bits.b.mxl == 1) {
  12. misa_chars[index++] = '3';
  13. misa_chars[index++] = '2';
  14. } else if (misa_bits.b.mxl == 2) {
  15. misa_chars[index++] = '6';
  16. misa_chars[index++] = '4';
  17. } else if (misa_bits.b.mxl == 3) {
  18. misa_chars[index++] = '1';
  19. misa_chars[index++] = '2';
  20. misa_chars[index++] = '8';
  21. }
  22. if (misa_bits.b.i) {
  23. misa_chars[index++] = 'I';
  24. }
  25. if (misa_bits.b.m) {
  26. misa_chars[index++] = 'M';
  27. }
  28. if (misa_bits.b.a) {
  29. misa_chars[index++] = 'A';
  30. }
  31. if (misa_bits.b.b) {
  32. misa_chars[index++] = 'B';
  33. }
  34. if (misa_bits.b.c) {
  35. misa_chars[index++] = 'C';
  36. }
  37. if (misa_bits.b.e) {
  38. misa_chars[index++] = 'E';
  39. }
  40. if (misa_bits.b.f) {
  41. misa_chars[index++] = 'F';
  42. }
  43. if (misa_bits.b.d) {
  44. misa_chars[index++] = 'D';
  45. }
  46. if (misa_bits.b.q) {
  47. misa_chars[index++] = 'Q';
  48. }
  49. if (misa_bits.b.h) {
  50. misa_chars[index++] = 'H';
  51. }
  52. if (misa_bits.b.j) {
  53. misa_chars[index++] = 'J';
  54. }
  55. if (misa_bits.b.l) {
  56. misa_chars[index++] = 'L';
  57. }
  58. if (misa_bits.b.n) {
  59. misa_chars[index++] = 'N';
  60. }
  61. if (misa_bits.b.s) {
  62. misa_chars[index++] = 'S';
  63. }
  64. if (misa_bits.b.p) {
  65. misa_chars[index++] = 'P';
  66. }
  67. if (misa_bits.b.t) {
  68. misa_chars[index++] = 'T';
  69. }
  70. if (misa_bits.b.u) {
  71. misa_chars[index++] = 'U';
  72. }
  73. if (misa_bits.b.v) {
  74. misa_chars[index++] = 'V';
  75. }
  76. if (misa_bits.b.x) {
  77. misa_chars[index++] = 'X';
  78. }
  79. misa_chars[index++] = '\0';
  80. printf("MISA: RV%s\r\n", misa_chars);
  81. }
  82. #ifndef CFG_SIMULATION
  83. #define RUN_LOOPS 20
  84. #else
  85. #define RUN_LOOPS 5
  86. #endif
  87. int main(void)
  88. {
  89. uint32_t rval, seed;
  90. unsigned long hartid;
  91. rv_csr_t misa;
  92. // get hart id of current cluster
  93. hartid = __get_hart_id();
  94. misa = __RV_CSR_READ(CSR_MISA);
  95. printf("Hart %lu, MISA: 0x%lx\r\n", hartid, misa);
  96. print_misa();
  97. // Generate random value with seed
  98. seed = (uint32_t)(__get_rv_cycle() | __get_rv_instret() | __RV_CSR_READ(CSR_MCYCLE));
  99. srand(seed);
  100. rval = rand();
  101. printf("Got rand integer %d using seed %d.\r\n", seed, rval);
  102. for (unsigned long i = 0; i < RUN_LOOPS; i ++) {
  103. printf("%lu: Hello World From Nuclei RISC-V Processor!\r\n", i);
  104. }
  105. return 0;
  106. }