1 from nmigen
import Array
, Module
, Signal
2 from nmigen
.lib
.coding
import Encoder
3 from nmigen
.cli
import main
7 from CamEntry
import CamEntry
10 def __init__(self
, key_size
, data_size
, cam_size
):
12 entry_array
= Array(CamEntry(key_size
, data_size
) for x
in range(cam_size
))
13 encoder_input
= Signal(cam_size
)
16 self
.write
= Signal(1)
17 self
.key
= Signal(key_size
)
18 self
.data_in
= Signal(key_size
)
21 self
.data_match
= Signal(1)
22 self
.data_out
= Signal(data_size
)
24 def elaborate(self
, platform
):
27 m
.d
.submodules
.encoder
= encoder
= Encoder(cam_size
)
29 for index
in range(cam_size
):
31 entry_array
[index
].write
.eq(self
.write
),
32 entry_array
[index
].key_in
.eq(self
.key
),
33 entry_array
[index
].data_in
.eq(self
.data_in
),
34 encoder_input
[index
].eq(entry_array
[index
].match
)
39 encoder
.i
.eq(encoder_input
),
43 # 0 denotes a mapping was found
45 self
.data_match
.eq(0),
46 self
.data_out
.eq(entry_array
[encoder
.o
].data
)
51 # 0 denotes a mapping was found
53 self
.data_match
.eq(0),
54 entry_array
[encoder
.o
].data_in
.eq(self
.data_in
)