tidyup hit/multiple, move to main block
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 22 Apr 2019 03:18:04 +0000 (04:18 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 22 Apr 2019 03:18:04 +0000 (04:18 +0100)
TLB/src/SetAssociativeCache.py

index 1d1f94e71398b3fa8b67065e3e67ee6a2b124701..f0a6c7ba6c10cac194d8b4efa3d53ac9a3ea0e82 100644 (file)
@@ -110,31 +110,25 @@ class SetAssociativeCache():
         # Only one entry should be marked
         # This is due to already verifying the tags
         # matched and the valid bit is high
-        with m.If(self.encoder.single_match):
+        with m.If(self.hit):
             m.next = "FINISHED_READ"
             # Pull out data from the read port
-            data = 0
             read_port = self.mem_array[self.encoder.o].r
             data = read_port.data[self.data_start:self.data_end]
-
             m.d.comb += [
-                self.hit.eq(1),
-                self.multiple_hit.eq(0),
                 self.data_o.eq(data)
             ]
             self.access_plru(m)
         # Oh no! Seal the gates! Multiple tags matched?!? kasd;ljkafdsj;k
-        with m.Elif(self.encoder.multiple_match):
+        with m.Elif(self.multiple_hit):
+            # XXX TODO, m.next = "FINISHED_READ" ? otherwise stuck
             m.d.comb += [
-                self.hit.eq(0),
-                self.multiple_hit.eq(1),
                 self.data_o.eq(0)
             ]
         # No tag matches means no data
         with m.Else():
+            # XXX TODO, m.next = "FINISHED_READ" ? otherwise stuck
             m.d.comb += [
-                self.hit.eq(0),
-                self.multiple_hit.eq(0),
                 self.data_o.eq(0)
             ]
 
@@ -203,6 +197,12 @@ class SetAssociativeCache():
         m.submodules.AddressEncoder = self.encoder
         m.submodules += self.mem_array
 
+        # do these all the time?
+        m.d.comb += [
+            self.hit.eq(self.encoder.single_match),
+            self.multiple_hit.eq(self.encoder.multiple_match),
+        ]
+
         with m.If(self.enable):
             with m.Switch(self.command):
                 # Search all sets at a particular tag