LMemLoopbackCpuCode.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /**
  2. * Document: MaxCompiler Tutorial (maxcompiler-tutorial.pdf)
  3. * Chapter: 13 Example: 2 Name: LMem Loopback
  4. * MaxFile name: LMemLoopback
  5. * Summary:
  6. * Adds two LMem input streams and writes the result to LMem.
  7. */
  8. #include <stdlib.h>
  9. #include <stdint.h>
  10. #include <string.h>
  11. #include "LMemLoopback.h"
  12. #include <MaxSLiCInterface.h>
  13. int check(int size, int32_t *outData, int32_t *inA, int32_t *inB)
  14. {
  15. int status = 0;
  16. for (int i = 0; i < size; i++)
  17. {
  18. if (outData[i] != inA[i] + inB[i])
  19. {
  20. fprintf(stderr, "[%d] Verification error, out: %u != expected: %u\n",
  21. i, outData[i], inA[i] + inB[i]);
  22. status = 1;
  23. }
  24. }
  25. return status;
  26. }
  27. int main()
  28. {
  29. const int size = 384;
  30. int sizeBytes = size * sizeof(int32_t);
  31. int32_t *inA = (int32_t*) malloc(sizeBytes);
  32. int32_t *inB = (int32_t*) malloc(sizeBytes);
  33. for (int i = 0; i < size; i++)
  34. {
  35. inA[i] = i;
  36. inB[i] = size - i;
  37. }
  38. printf("Loading DFE memory.\n");
  39. LMemLoopback_writeLMem(size, 0, inA);
  40. LMemLoopback_writeLMem(size, size, inB);
  41. printf("Running DFE.\n");
  42. LMemLoopback(size);
  43. printf("Reading DFE memory.\n");
  44. int32_t *outData = (int32_t*) malloc(sizeBytes);
  45. LMemLoopback_readLMem(size, 2 * size, outData);
  46. int status = check(size, outData, inA, inB);
  47. if (status)
  48. printf("Test failed.\n");
  49. else
  50. printf("Test passed OK!\n");
  51. return status;
  52. }