MyTasksManager.maxj 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package fpga;
  2. import com.maxeler.maxcompiler.v2.build.EngineParameters;
  3. //import com.maxeler.maxcompiler.v2.kernelcompiler.Kernel;
  4. import com.maxeler.maxcompiler.v2.managers.custom.DFELink;
  5. import com.maxeler.maxcompiler.v2.managers.custom.blocks.KernelBlock;
  6. import com.maxeler.maxcompiler.v2.managers.custom.stdlib.LMemCommandGroup;
  7. import com.maxeler.maxcompiler.v2.managers.custom.stdlib.LMemInterface;
  8. import com.maxeler.maxcompiler.v2.managers.engine_interfaces.CPUTypes;
  9. import com.maxeler.maxcompiler.v2.managers.engine_interfaces.EngineInterface;
  10. import com.maxeler.maxcompiler.v2.managers.engine_interfaces.EngineInterface.Direction;
  11. import com.maxeler.maxcompiler.v2.managers.engine_interfaces.InterfaceParam;
  12. import com.maxeler.platform.max5.manager.MAX5CManager;
  13. public class MyTasksManager extends MAX5CManager
  14. {
  15. private static final CPUTypes TYPE = CPUTypes.INT32;
  16. public MyTasksManager(EngineParameters params)
  17. {
  18. super(params);
  19. KernelBlock kernel1 = addKernel(new Task1(makeKernelParameters("Task1")));
  20. KernelBlock kernel2 = addKernel(new Task2(makeKernelParameters("Task2")));
  21. KernelBlock kernel3 = addKernel(new Task3(makeKernelParameters("Task3")));
  22. LMemInterface iface = addLMemInterface();
  23. kernel1.getInput("inAT1") <== addStreamFromCPU("inAT1");
  24. kernel1.getInput("inBT1") <== addStreamFromCPU("inBT1");
  25. DFELink outCT1 = iface.addStreamToLMem("outCT1", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
  26. outCT1 <== kernel1.getOutput("outCT1");
  27. DFELink inAT2 = iface.addStreamFromLMem("inAT2", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
  28. kernel2.getInput("inAT2") <== inAT2;
  29. DFELink inBT2 = iface.addStreamFromLMem("inBT2", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
  30. kernel2.getInput("inBT2") <== inBT2;
  31. DFELink outCT2 = iface.addStreamToLMem("outCT2", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
  32. outCT2 <== kernel2.getOutput("outCT2");
  33. DFELink inAT3 = iface.addStreamFromLMem("inAT3", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
  34. kernel3.getInput("inAT3") <== inAT3;
  35. DFELink inBT3 = iface.addStreamFromLMem("inBT3", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
  36. kernel3.getInput("inBT3") <== inBT3;
  37. addStreamToCPU("outCT3") <== kernel3.getOutput("outCT3");
  38. createSlicInterface(interfaceT1("interfaceT1"));
  39. createSlicInterface(interfaceT2("interfaceT2"));
  40. createSlicInterface(interfaceT3("interfaceT3"));
  41. }
  42. public static void main(String[] args)
  43. {
  44. MyTasksManager manager = new MyTasksManager(new EngineParameters(args));
  45. manager.build();
  46. }
  47. private static EngineInterface interfaceT1(String name)
  48. {
  49. EngineInterface ei = new EngineInterface(name);
  50. InterfaceParam ptrC1;
  51. InterfaceParam N;
  52. InterfaceParam sizeInBytes;
  53. N = ei.addParam("N", TYPE);
  54. sizeInBytes = N * TYPE.sizeInBytes();
  55. ptrC1 = ei.addParam("ptrC1", TYPE);
  56. ei.setTicks("Task1", N);
  57. ei.setStream("inAT1", TYPE, sizeInBytes);
  58. ei.setStream("inBT1", TYPE, sizeInBytes);
  59. ei.setLMemLinear("outCT1", ptrC1, sizeInBytes);
  60. ei.ignoreAll(Direction.IN_OUT);
  61. ei.ignoreKernel("Task2");
  62. ei.ignoreKernel("Task3");
  63. return ei;
  64. }
  65. private static EngineInterface interfaceT2(String name)
  66. {
  67. EngineInterface ei = new EngineInterface(name);
  68. InterfaceParam ptrA2;
  69. InterfaceParam ptrB2;
  70. InterfaceParam ptrC2;
  71. InterfaceParam N;
  72. InterfaceParam sizeInBytes;
  73. N = ei.addParam("N", TYPE);
  74. sizeInBytes = N * TYPE.sizeInBytes();
  75. ptrA2 = ei.addParam("ptrA2", TYPE);
  76. ptrB2 = ei.addParam("ptrB2", TYPE);
  77. ptrC2 = ei.addParam("ptrC2", TYPE);
  78. ei.setTicks("Task2", N);
  79. ei.setLMemLinear("inAT2", ptrA2, sizeInBytes);
  80. ei.setLMemLinear("inBT2", ptrB2, sizeInBytes);
  81. ei.setLMemLinear("outCT2", ptrC2, sizeInBytes);
  82. ei.ignoreAll(Direction.IN_OUT);
  83. ei.ignoreKernel("Task1");
  84. ei.ignoreKernel("Task3");
  85. return ei;
  86. }
  87. private static EngineInterface interfaceT3(String name)
  88. {
  89. EngineInterface ei = new EngineInterface(name);
  90. InterfaceParam ptrA3;
  91. InterfaceParam ptrB3;
  92. InterfaceParam N;
  93. InterfaceParam sizeInBytes;
  94. N = ei.addParam("N", TYPE);
  95. sizeInBytes = N * TYPE.sizeInBytes();
  96. ptrA3 = ei.addParam("ptrA3", TYPE);
  97. ptrB3 = ei.addParam("ptrB3", TYPE);
  98. ei.setTicks("Task3", N);
  99. ei.setLMemLinear("inAT3", ptrA3, sizeInBytes);
  100. ei.setLMemLinear("inBT3", ptrB3, sizeInBytes);
  101. ei.setStream("outCT3", TYPE, sizeInBytes);
  102. ei.ignoreAll(Direction.IN_OUT);
  103. ei.ignoreKernel("Task1");
  104. ei.ignoreKernel("Task2");
  105. return ei;
  106. }
  107. }