Пример #1
0
# Reduce interface
inType2 = m.In(m.Array(a * b, TIN))
outType2 = TOUT

# Top level module: line buffer input, reduce output
args = ['I', inType, 'O', outType2, 'WE', m.BitIn, 'V', m.Out(m.Bit)] + \
        m.ClockInterface(False, False)
dscale = m.DefineCircuit('Downscale', *args)

# Line buffer declaration
lb = Linebuffer(cirb, inType, outType, imgType, True)
m.wire(lb.I, dscale.I)
m.wire(lb.wen, dscale.WE)

# Reduce declaration
red = ReduceParallel(cirb, samples, renameCircuitForReduce(DeclareAdd(width)))
# additive identity
coreirConst = DefineCoreirConst(width, 0)()

# select 16 samples to keep
k = 0
for i in [0, 3, 5, 8]:
    for j in [0, 3, 7, 10]:
        m.wire(red.I.data[k], lb.out[i][j])
        k += 1

m.wire(red.I.identity, coreirConst.O)
m.wire(dscale.O, red.out)
m.wire(dscale.V, lb.valid)

m.EndCircuit()
Пример #2
0
inType2 = m.In(m.Array(4, TIN))
outType2 = m.Out(m.Array(16, Bit))

# Test circuit has line buffer's input and reduce's output
args = ['I', inType, 'O', outType2, 'WE', BitIn, 'V', m.Out(m.Bit),
        'L00', TOUT, 'L01', TOUT, 'L10', TOUT, 'L11', TOUT] + \
        m.ClockInterface(False, False)
testcircuit = m.DefineCircuit('STEN', *args)

# Line buffer declaration
lb = Linebuffer(cirb, inType, outType, imgType, True)
m.wire(lb.I, testcircuit.I)
m.wire(lb.wen, testcircuit.WE)

# # Reduce declaration
reducePar = ReduceParallel(cirb, 4, renameCircuitForReduce(DeclareAdd(16)))
coreirConst = DefineCoreirConst(16, 0)()
m.wire(reducePar.I.data[0], lb.out[0][0])
m.wire(reducePar.I.data[1], lb.out[0][1])
m.wire(reducePar.I.data[2], lb.out[1][0])
m.wire(reducePar.I.data[3], lb.out[1][1])
m.wire(reducePar.I.identity, coreirConst.O)
m.wire(testcircuit.O, reducePar.out)
m.wire(testcircuit.V, lb.valid)

m.wire(lb.out[0][0], testcircuit.L00)
m.wire(lb.out[0][1], testcircuit.L01)
m.wire(lb.out[1][0], testcircuit.L10)
m.wire(lb.out[1][1], testcircuit.L11)

Пример #3
0
width = 16
TIN = m.Array(width, m.BitIn)
TOUT = m.Array(width, m.Out(m.Bit))

# interface
inType = m.In(m.Array(a, TIN))
outType = TOUT

# test circuit has line buffer's input and reduce's output
args = ['I', inType, 'O', outType, 'WE', m.BitIn, 'V', m.Out(m.Bit)] + \
        m.ClockInterface(False, False)
reduceHybrid = m.DefineCircuit('ReduceHybrid', *args)

# reduce Parallel
reducePar = ReduceParallel(cirb, a, renameCircuitForReduce(DeclareAdd(width)))
coreirConst = DefineCoreirConst(width, 0)()

# reduce sequential
reduceSeq = ReduceSequential(cirb, b, renameCircuitForReduce(DefineAdd(width)))

# top level input fed to reduce parallel input
m.wire(reduceHybrid.I, reducePar.I.data)
m.wire(reducePar.I.identity, coreirConst.out)

# reduce parallel output fed to reduce sequential input
m.wire(reducePar.out, reduceSeq.I)

# output of reduce sequential fed to top level output
m.wire(reduceSeq.out, reduceHybrid.O)
m.wire(reduceSeq.valid, reduceHybrid.V)
Пример #4
0
# Reduce interface
inType2 = In(Array(m * n, TIN))
outType2 = TOUT

# Top level module: line buffer input, reduce output
args = ['I', inType, 'O', outType2, 'WE', BitIn, 'V',
        Out(Bit)] + ClockInterface(False, False)
top = DefineCircuit('Downscale', *args)

# Line buffer declaration
lb = Linebuffer(cirb, inType, outType, imgType, True)
wire(lb.I, top.I)
wire(lb.wen, top.WE)

# Reduce declaration
red = ReduceParallel(cirb, m * n, renameCircuitForReduce(DeclareAdd(b)))
# additive identity
coreirConst = DefineCoreirConst(b, 0)()

# flatten linebuffer output and wire to reduce parallel input
for i in range(n):
    for j in range(m):
        k = m * i + j
        wire(red.I.data[k], lb.out[i][j])

wire(red.I.identity, coreirConst.out)
wire(top.O, red.out)
wire(top.V, lb.valid)

EndCircuit()
Пример #5
0
import magma as m
from magma.clock import *
from magma.backend.coreir_ import CoreIRBackend
from magma.bitutils import *
from coreir.context import *
from magma.simulator.coreir_simulator import CoreIRSimulator
import coreir
from magma.scope import Scope
from mantle.coreir import DefineCoreirConst
from mantle import CounterModM, Decode, SIPO
from magma.frontend.coreir_ import GetCoreIRModule
from mantle.coreir.arith import *
from mantle.primitives import DeclareAdd

c = coreir.Context()
cirb = CoreIRBackend(c)
scope = Scope()

width = 16

addID = DefineCoreirConst(width, 0)()
rpp = ReducePartiallyParallel(cirb, 8, 2,
                              renameCircuitForReduce(DeclareAdd(width)))

m.wire(addID.out, rpp.C)

m.EndCircuit()

module = GetCoreIRModule(cirb, rpp)
module.save_to_file("reducehybrid.json")