package cpustream; import com.maxeler.maxcompiler.v2.kernelcompiler.Kernel; import com.maxeler.maxcompiler.v2.kernelcompiler.KernelParameters; import com.maxeler.maxcompiler.v2.kernelcompiler.types.base.DFEType; import com.maxeler.maxcompiler.v2.kernelcompiler.types.base.DFEVar; class CpuStreamKernel extends Kernel { private static final DFEType type1 = dfeInt(32); private static final DFEType type2 = dfeFloat(8, 24); private static final DFEType type3 = dfeUInt(4); protected CpuStreamKernel(KernelParameters parameters) { super(parameters); DFEVar x = io.input("x", type1); DFEVar N = io.scalarInput("N", type3); /* stream.offset nam sluzi da pogledamo prethodne ili sledece vrednosti u * datom toku podataka */ /* dovoljan nam je brojac sa 4 bita jer je tok podataka najvise 16 */ DFEVar brojac = control.count.simpleCounter(4); DFEVar xpre = brojac.eq(0)?0:stream.offset(x, -1); DFEVar xposle = brojac.eq(N-1)?0:stream.offset(x, +1); DFEVar sum = (brojac.eq(0) | brojac.eq(N-1))?(x + xpre+xposle).cast(type2)/2:(x+xpre+xposle).cast(type2)/3; io.output("s", sum, type2); } }