From: colepoirier Date: Fri, 5 Jun 2020 19:55:33 +0000 (-0700) Subject: Add trap_input_data.py for fu/trap, cookie-cut from X-Git-Tag: div_pipeline~550 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=20d167510e90aa81325f0334ef11bde47a81188a;p=soc.git Add trap_input_data.py for fu/trap, cookie-cut from fu/cr/cr_input_record with all 'CR' references changed to 'Trap' --- diff --git a/src/soc/fu/trap/trap_input_data.py b/src/soc/fu/trap/trap_input_data.py new file mode 100644 index 00000000..27c2ffad --- /dev/null +++ b/src/soc/fu/trap/trap_input_data.py @@ -0,0 +1,45 @@ +from nmigen.hdl.rec import Record, Layout + +from soc.decoder.power_enums import (InternalOp, Function) + + +class CompTrapOpSubset(Record): + """CompTrapOpSubset + + a copy of the relevant subset information from Decode2Execute1Type + needed for TRAP operations. use with eq_from_execute1 (below) to + grab subsets. + """ + def __init__(self, name=None): + layout = (('insn_type', InternalOp), + ('fn_unit', Function), + ('insn', 32), + ('read_trap_whole', 1), + ('write_trap_whole', 1), + ) + + Record.__init__(self, Layout(layout), name=name) + + # grrr. Record does not have kwargs + self.insn_type.reset_less = True + self.insn.reset_less = True + self.fn_unit.reset_less = True + self.read_trap_whole.reset_less = True + self.write_trap_whole.reset_less = True + + def eq_from_execute1(self, other): + """ use this to copy in from Decode2Execute1Type + """ + res = [] + for fname, sig in self.fields.items(): + eqfrom = other.fields[fname] + res.append(sig.eq(eqfrom)) + return res + + def ports(self): + return [self.insn_type, + self.insn, + self.fn_unit, + self.read_trap_whole, + self.write_trap_whole, + ]