bb248c23ba9a538f9554ea9b87e171231ffdeb7a
[soc.git] / src / soc / cr / pipe_data.py
1 from nmigen import Signal, Const
2 from ieee754.fpcommon.getop import FPPipeContext
3
4
5 class IntegerData:
6
7 def __init__(self, pspec):
8 self.ctx = FPPipeContext(pspec)
9 self.muxid = self.ctx.muxid
10
11 def __iter__(self):
12 yield from self.ctx
13
14 def eq(self, i):
15 return [self.ctx.eq(i.ctx)]
16
17
18 class CRInputData(IntegerData):
19 def __init__(self, pspec):
20 super().__init__(pspec)
21 self.a = Signal(64, reset_less=True) # RA
22 self.cr = Signal(64, reset_less=True) # CR in
23
24 def __iter__(self):
25 yield from super().__iter__()
26 yield self.a
27 yield self.cr
28
29 def eq(self, i):
30 lst = super().eq(i)
31 return lst + [self.a.eq(i.a),
32 self.cr.eq(i.cr)]
33
34 class CROutputData(IntegerData):
35 def __init__(self, pspec):
36 super().__init__(pspec)
37 self.o = Signal(64, reset_less=True) # RA
38 self.cr = Signal(64, reset_less=True) # CR in
39
40 def __iter__(self):
41 yield from super().__iter__()
42 yield self.o
43 yield self.cr
44
45 def eq(self, i):
46 lst = super().eq(i)
47 return lst + [self.o.eq(i.o),
48 self.cr.eq(i.cr)]