projects
/
soc.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
df8bcf1
)
Add VectorAssembler to accept match results from CamEntries to improve yosys graph...
author
Daniel Benusovich
<flyingmonkeys1996@gmail.com>
Sat, 9 Mar 2019 03:41:55 +0000
(19:41 -0800)
committer
Daniel Benusovich
<flyingmonkeys1996@gmail.com>
Sat, 9 Mar 2019 03:41:55 +0000
(19:41 -0800)
TLB/src/Cam.py
patch
|
blob
|
history
diff --git
a/TLB/src/Cam.py
b/TLB/src/Cam.py
index e1baab2227fe5d11bfae639b490c83f998faac12..37df135542324211b3be1ca151978ad35d89adc6 100644
(file)
--- a/
TLB/src/Cam.py
+++ b/
TLB/src/Cam.py
@@
-4,6
+4,7
@@
from nmigen.cli import main #, verilog
from CamEntry import CamEntry
from AddressEncoder import AddressEncoder
from CamEntry import CamEntry
from AddressEncoder import AddressEncoder
+from VectorAssembler import VectorAssembler
class Cam():
""" Content Addressable Memory (CAM)
class Cam():
""" Content Addressable Memory (CAM)
@@
-37,6
+38,7
@@
class Cam():
self.decoder = Decoder(cam_size)
self.entry_array = Array(CamEntry(data_size) \
for x in range(cam_size))
self.decoder = Decoder(cam_size)
self.entry_array = Array(CamEntry(data_size) \
for x in range(cam_size))
+ self.vector_assembler = VectorAssembler(cam_size)
# Input
self.enable = Signal(1)
# Input
self.enable = Signal(1)
@@
-56,10
+58,11
@@
class Cam():
# Encoder checks for multiple matches
m.submodules.AddressEncoder = self.encoder
# Decoder is used to select which entry will be written to
# Encoder checks for multiple matches
m.submodules.AddressEncoder = self.encoder
# Decoder is used to select which entry will be written to
- m.submodules.
d
ecoder = self.decoder
+ m.submodules.
D
ecoder = self.decoder
# Don't forget to add all entries to the submodule list
entry_array = self.entry_array
m.submodules += entry_array
# Don't forget to add all entries to the submodule list
entry_array = self.entry_array
m.submodules += entry_array
+ m.submodules.VectorAssembler = self.vector_assembler
# Decoder logic
m.d.comb += [
# Decoder logic
m.d.comb += [
@@
-85,10
+88,11
@@
class Cam():
# Send data input to all entries
m.d.comb += entry_array[index].data_in.eq(self.data_in)
#Send all entry matches to encoder
# Send data input to all entries
m.d.comb += entry_array[index].data_in.eq(self.data_in)
#Send all entry matches to encoder
- m.d.comb += self.
encoder.i
[index].eq(entry_array[index].match)
+ m.d.comb += self.
vector_assembler.input
[index].eq(entry_array[index].match)
# Accept output from encoder module
m.d.comb += [
# Accept output from encoder module
m.d.comb += [
+ self.encoder.i.eq(self.vector_assembler.o),
self.single_match.eq(self.encoder.single_match),
self.multiple_match.eq(self.encoder.multiple_match),
self.match_address.eq(self.encoder.o)
self.single_match.eq(self.encoder.single_match),
self.multiple_match.eq(self.encoder.multiple_match),
self.match_address.eq(self.encoder.o)