6351d0ebf5b3cb84490f8e46f34c8581a065f79e
[soc.git] / TLB / CamEntry.py
1 from nmigen import Module, Signal
2 from nmigen.cli import main
3
4 class CamEntry():
5 def __init__(self, key_size, data_size):
6 # Internal
7 key = Signal(key_size)
8
9 # Input
10 self.write = Signal(1) # Read => 0 Write => 1
11 self.key_in = Signal(key_size) # Reference key for the CAM
12 self.data_in = Signal(data_size) # Data input when writing
13
14 # Output
15 self.match = Signal(1) # Result of the internal/input key comparison
16 self.data = Signal(data_size)
17
18
19 def elabotate(self, platform):
20 m = Module()
21 m.d.comb += [
22 If(self.write == 1,
23 key.eq(self.key_in),
24 self.data.eq(self.data_in)
25 ).Else(
26 If(self.key_in == key,
27 self.match.eq(0)
28 ).Else(
29 self.match.eq(1)
30 )
31 )
32 ]
33 return m