25fd1429d94921b9453de863a92914fd8fa8027b
[nmutil.git] / src / nmutil / mask.py
1 from nmigen import Module, Signal, Elaboratable
2 from nmigen.utils import log2_int
3
4 def masked(m_out, m_in, mask):
5 return (m_out & ~mask) | (m_in & mask)
6
7
8 class Mask(Elaboratable):
9 def __init__(self, sz):
10 self.sz = sz
11 self.shift = Signal(log2_int(sz, False)+1)
12 self.mask = Signal(sz)
13
14 def elaborate(self, platform):
15 m = Module()
16
17 for i in range(self.sz):
18 with m.If(self.shift > i):
19 m.d.comb += self.mask[i].eq(1)
20
21 return m
22