dc2f05d59f4e460b2692798cc749142b2abb933e
[nmutil.git] / src / nmutil / mask.py
1 """
2 This work is funded through NLnet under Grant 2019-02-012
3
4 License: LGPLv3+
5
6
7 """
8
9 from nmigen import Module, Signal, Elaboratable
10 from nmigen.utils import log2_int
11
12
13 def masked(m_out, m_in, mask):
14 return (m_out & ~mask) | (m_in & mask)
15
16
17 class Mask(Elaboratable):
18 def __init__(self, sz):
19 self.sz = sz
20 self.shift = Signal(sz.bit_length()+1)
21 self.mask = Signal(sz)
22
23 def elaborate(self, platform):
24 m = Module()
25
26 for i in range(self.sz):
27 with m.If(i < self.shift):
28 m.d.comb += self.mask[i].eq(1)
29
30 return m