add grant links, and record of funding under #538
[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 def masked(m_out, m_in, mask):
13 return (m_out & ~mask) | (m_in & mask)
14
15
16 class Mask(Elaboratable):
17 def __init__(self, sz):
18 self.sz = sz
19 self.shift = Signal(log2_int(sz, False)+1)
20 self.mask = Signal(sz)
21
22 def elaborate(self, platform):
23 m = Module()
24
25 for i in range(self.sz):
26 with m.If(self.shift > i):
27 m.d.comb += self.mask[i].eq(1)
28
29 return m
30