LMemLoopbackCpuCode.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. if (outData[i] != inA[i] + inB[i]) {
  18. fprintf(stderr, "[%d] Verification error, out: %u != expected: %u\n",
  19. i, outData[i], inA[i] + inB[i]);
  20. status = 1;
  21. }
  22. }
  23. return status;
  24. }
  25. int main()
  26. {
  27. const int size = 384;
  28. int sizeBytes = size * sizeof(int32_t);
  29. int32_t *inA = (int32_t*) malloc(sizeBytes);
  30. int32_t *inB = (int32_t*) malloc(sizeBytes);
  31. for (int i = 0; i < size; i++) {
  32. inA[i] = i;
  33. inB[i] = size - i;
  34. }
  35. printf("Loading DFE memory.\n");
  36. LMemLoopback_writeLMem(size, 0, inA);
  37. LMemLoopback_writeLMem(size, size, inB);
  38. printf("Running DFE.\n");
  39. LMemLoopback(size);
  40. printf("Reading DFE memory.\n");
  41. int32_t *outData = (int32_t*) malloc(sizeBytes);
  42. LMemLoopback_readLMem(size, 2 * size, outData);
  43. int status = check(size, outData, inA, inB);
  44. if (status)
  45. printf("Test failed.\n");
  46. else
  47. printf("Test passed OK!\n");
  48. return status;
  49. }