main.c 2.7 KB

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