* type of FU required
"""
- def __init__(self, pspec, pilist=None, addrwid=6):
+ def __init__(self, pspec, pilist=None):
+ addrwid = pspec.addr_wid
+ units = pspec.units
+ if not isinstance(units, dict):
+ units = {'alu': 1, 'cr': 1, 'branch': 1, 'trap': 1, 'logical': 1,
+ 'div': 1, 'shiftrot': 1}
+ alus = {'alu': ALUFunctionUnit,
+ 'cr': CRFunctionUnit,
+ 'branch': BranchFunctionUnit,
+ 'trap': TrapFunctionUnit,
+ 'div': DIVFunctionUnit,
+ 'logical': LogicalFunctionUnit,
+ 'shiftrot': ShiftRotFunctionUnit,
+ }
self.fus = {}
- for (name, qty, kls) in (('alu', 1, ALUFunctionUnit),
- ('cr', 1, CRFunctionUnit),
- ('branch', 1, BranchFunctionUnit),
- ('trap', 1, TrapFunctionUnit),
- # far too large at the moment
- #('div', 1, DIVFunctionUnit),
- ('logical', 1, LogicalFunctionUnit),
- ('shiftrot', 1, ShiftRotFunctionUnit),
- ):
+ for name, qty in units.items():
+ kls = alus[name]
for i in range(qty):
self.fus["%s%d" % (name, i)] = kls(i)
if pilist is None:
class NonProductionCore(Elaboratable):
def __init__(self, pspec):
- addrwid = pspec.addr_wid
# single LD/ST funnel for memory access
self.l0 = TstL0CacheBuffer(pspec, n_units=1)
pi = self.l0.l0.dports[0]
# function units (only one each)
- self.fus = AllFunctionUnits(pilist=[pi], addrwid=addrwid)
+ self.fus = AllFunctionUnits(pspec, pilist=[pi])
# register files (yes plural)
self.regs = RegFiles()
if __name__ == '__main__':
+ units = {'alu': 1, 'cr': 1, 'branch': 1, 'trap': 1, 'logical': 1,
+ 'shiftrot': 1}
pspec = TestMemPspec(ldst_ifacetype='bare_wb',
imem_ifacetype='bare_wb',
addr_wid=48,
mask_wid=8,
- reg_wid=64)
+ reg_wid=64,
+ units=units)
dut = TestIssuer(pspec)
vl = rtlil.convert(dut, ports=dut.ports(), name="test_issuer")
with open("test_issuer.il", "w") as f: