|
@@ -6,51 +6,56 @@ import com.maxeler.maxcompiler.v2.managers.custom.DFELink;
|
|
|
import com.maxeler.maxcompiler.v2.managers.custom.blocks.KernelBlock;
|
|
|
import com.maxeler.maxcompiler.v2.managers.custom.stdlib.LMemCommandGroup;
|
|
|
import com.maxeler.maxcompiler.v2.managers.custom.stdlib.LMemInterface;
|
|
|
-//import com.maxeler.maxcompiler.v2.managers.engine_interfaces.CPUTypes;
|
|
|
-//import com.maxeler.maxcompiler.v2.managers.engine_interfaces.EngineInterface;
|
|
|
-//import com.maxeler.maxcompiler.v2.managers.engine_interfaces.EngineInterface.Direction;
|
|
|
-//import com.maxeler.maxcompiler.v2.managers.engine_interfaces.InterfaceParam;
|
|
|
+import com.maxeler.maxcompiler.v2.managers.engine_interfaces.CPUTypes;
|
|
|
+import com.maxeler.maxcompiler.v2.managers.engine_interfaces.EngineInterface;
|
|
|
+import com.maxeler.maxcompiler.v2.managers.engine_interfaces.EngineInterface.Direction;
|
|
|
+import com.maxeler.maxcompiler.v2.managers.engine_interfaces.InterfaceParam;
|
|
|
import com.maxeler.platform.max5.manager.MAX5CManager;
|
|
|
|
|
|
public class StreamFMAManager extends MAX5CManager
|
|
|
{
|
|
|
- //private static final CPUTypes TYPE = CPUTypes.INT32;
|
|
|
- private static final String kernel_name = "StreamFMAKernel";
|
|
|
+ private static final CPUTypes TYPE = CPUTypes.INT32;
|
|
|
|
|
|
public StreamFMAManager(EngineParameters params)
|
|
|
{
|
|
|
super(params);
|
|
|
- KernelBlock kernel = addKernel(new StreamFMAKernel(makeKernelParameters(kernel_name)));
|
|
|
+ KernelBlock kernel1 = addKernel(new Task1(makeKernelParameters("Task1")));
|
|
|
+ KernelBlock kernel2 = addKernel(new Task2(makeKernelParameters("Task2")));
|
|
|
+ KernelBlock kernel3 = addKernel(new Task3(makeKernelParameters("Task3")));
|
|
|
|
|
|
LMemInterface iface = addLMemInterface();
|
|
|
|
|
|
- kernel.getInput("inAT1") <== addStreamFromCPU("inAT1");
|
|
|
- kernel.getInput("inBT1") <== addStreamFromCPU("inBT1");
|
|
|
|
|
|
- //addStreamToCPU("oDataT1") <== kernel.getOutput("oDataT1");
|
|
|
+ kernel1.getInput("inAT1") <== addStreamFromCPU("inAT1");
|
|
|
+
|
|
|
+ kernel1.getInput("inBT1") <== addStreamFromCPU("inBT1");
|
|
|
+
|
|
|
+ DFELink oDataT1 = iface.addStreamToLMem("oDataT1", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
|
|
|
+ oDataT1 <== kernel1.getOutput("oDataT1");
|
|
|
+
|
|
|
|
|
|
DFELink inAT2 = iface.addStreamFromLMem("inAT2", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
|
|
|
- kernel.getInput("inAT2") <== inAT2;
|
|
|
+ kernel2.getInput("inAT2") <== inAT2;
|
|
|
|
|
|
DFELink inBT2 = iface.addStreamFromLMem("inBT2", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
|
|
|
- kernel.getInput("inBT2") <== inBT2;
|
|
|
+ kernel2.getInput("inBT2") <== inBT2;
|
|
|
+
|
|
|
+ DFELink oDataT2 = iface.addStreamToLMem("oDataT2", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
|
|
|
+ oDataT2 <== kernel2.getOutput("oDataT2");
|
|
|
+
|
|
|
|
|
|
DFELink inAT3 = iface.addStreamFromLMem("inAT3", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
|
|
|
- kernel.getInput("inAT3") <== inAT3;
|
|
|
+ kernel3.getInput("inAT3") <== inAT3;
|
|
|
|
|
|
DFELink inBT3 = iface.addStreamFromLMem("inBT3", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
|
|
|
- kernel.getInput("inBT3") <== inBT3;
|
|
|
+ kernel3.getInput("inBT3") <== inBT3;
|
|
|
|
|
|
- DFELink oDataT1 = iface.addStreamToLMem("oDataT1", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
|
|
|
- oDataT1 <== kernel.getOutput("oDataT1");
|
|
|
-
|
|
|
- DFELink oDataT2 = iface.addStreamToLMem("oDataT2", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
|
|
|
- oDataT2 <== kernel.getOutput("oDataT2");
|
|
|
+ addStreamToCPU("oDataT3") <== kernel3.getOutput("oDataT3");
|
|
|
|
|
|
- //DFELink oDataT3 = iface.addStreamToLMem("oDataT3", LMemCommandGroup.MemoryAccessPattern.LINEAR_1D);
|
|
|
- //oDataT3 <== kernel.getOutput("oDataT3");
|
|
|
|
|
|
- addStreamToCPU("oDataT3") <== kernel.getOutput("oDataT3");
|
|
|
+ createSlicInterface(interfaceT1("interfaceT1"));
|
|
|
+ createSlicInterface(interfaceT2("interfaceT2"));
|
|
|
+ createSlicInterface(interfaceT3("interfaceT3"));
|
|
|
}
|
|
|
|
|
|
public static void main(String[] args)
|
|
@@ -59,4 +64,89 @@ public class StreamFMAManager extends MAX5CManager
|
|
|
|
|
|
manager.build();
|
|
|
}
|
|
|
+
|
|
|
+ private static EngineInterface interfaceT1(String name)
|
|
|
+ {
|
|
|
+ EngineInterface ei = new EngineInterface(name);
|
|
|
+
|
|
|
+ InterfaceParam ptrC1;
|
|
|
+ InterfaceParam N;
|
|
|
+ InterfaceParam sizeInBytes;
|
|
|
+
|
|
|
+ N = ei.addParam("N", TYPE);
|
|
|
+ sizeInBytes = N * TYPE.sizeInBytes();
|
|
|
+ ptrC1 = ei.addParam("ptrC1", TYPE);
|
|
|
+
|
|
|
+ ei.setTicks("Task1", N);
|
|
|
+
|
|
|
+ ei.setStream("inAT1", TYPE, sizeInBytes);
|
|
|
+ ei.setStream("inBT1", TYPE, sizeInBytes);
|
|
|
+ ei.setLMemLinear("oDataT1", ptrC1, sizeInBytes);
|
|
|
+
|
|
|
+ ei.ignoreAll(Direction.IN_OUT);
|
|
|
+
|
|
|
+ ei.ignoreKernel("Task2");
|
|
|
+ ei.ignoreKernel("Task3");
|
|
|
+
|
|
|
+ return ei;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private static EngineInterface interfaceT2(String name)
|
|
|
+ {
|
|
|
+ EngineInterface ei = new EngineInterface(name);
|
|
|
+
|
|
|
+ InterfaceParam ptrA2;
|
|
|
+ InterfaceParam ptrB2;
|
|
|
+ InterfaceParam ptrC2;
|
|
|
+ InterfaceParam N;
|
|
|
+ InterfaceParam sizeInBytes;
|
|
|
+
|
|
|
+ N = ei.addParam("N", TYPE);
|
|
|
+ sizeInBytes = N * TYPE.sizeInBytes();
|
|
|
+ ptrA2 = ei.addParam("ptrA2", TYPE);
|
|
|
+ ptrB2 = ei.addParam("ptrB2", TYPE);
|
|
|
+ ptrC2 = ei.addParam("ptrC2", TYPE);
|
|
|
+
|
|
|
+ ei.setTicks("Task2", N);
|
|
|
+
|
|
|
+ ei.setLMemLinear("inAT2", ptrA2, sizeInBytes);
|
|
|
+ ei.setLMemLinear("inBT2", ptrB2, sizeInBytes);
|
|
|
+ ei.setLMemLinear("oDataT2", ptrC2, sizeInBytes);
|
|
|
+
|
|
|
+ ei.ignoreAll(Direction.IN_OUT);
|
|
|
+
|
|
|
+ ei.ignoreKernel("Task1");
|
|
|
+ ei.ignoreKernel("Task3");
|
|
|
+
|
|
|
+ return ei;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static EngineInterface interfaceT3(String name)
|
|
|
+ {
|
|
|
+ EngineInterface ei = new EngineInterface(name);
|
|
|
+
|
|
|
+ InterfaceParam ptrA3;
|
|
|
+ InterfaceParam ptrB3;
|
|
|
+ InterfaceParam N;
|
|
|
+ InterfaceParam sizeInBytes;
|
|
|
+
|
|
|
+ N = ei.addParam("N", TYPE);
|
|
|
+ sizeInBytes = N * TYPE.sizeInBytes();
|
|
|
+ ptrA3 = ei.addParam("ptrA3", TYPE);
|
|
|
+ ptrB3 = ei.addParam("ptrB3", TYPE);
|
|
|
+
|
|
|
+ ei.setTicks("Task3", N);
|
|
|
+
|
|
|
+ ei.setLMemLinear("inAT3", ptrA3, sizeInBytes);
|
|
|
+ ei.setLMemLinear("inBT3", ptrB3, sizeInBytes);
|
|
|
+ ei.setStream("oDataT3", TYPE, sizeInBytes);
|
|
|
+
|
|
|
+ ei.ignoreAll(Direction.IN_OUT);
|
|
|
+
|
|
|
+ ei.ignoreKernel("Task1");
|
|
|
+ ei.ignoreKernel("Task2");
|
|
|
+
|
|
|
+ return ei;
|
|
|
+ }
|
|
|
}
|