now using readable/writable from fu-fu matrix, seems to be working
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 18 May 2019 06:50:36 +0000 (07:50 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 18 May 2019 06:50:36 +0000 (07:50 +0100)
src/experiment/cscore.py
src/scoreboard/fn_unit.py
src/scoreboard/fu_picker_vec.py

index 0a321b5f9713ad969f3b5a7980bcd9aecfed933d..b57190cf3a9f6b1cf80896ae4fc4cd2ab3bd20dd 100644 (file)
@@ -174,15 +174,15 @@ class Scoreboard(Elaboratable):
         intfu_rd_pend_v = Signal(n_int_fus, reset_less = True)
         intfu_wr_pend_v = Signal(n_int_fus, reset_less = True)
         for i in range(n_int_fus):
-            m.d.comb += intfu_rd_pend_v[i].eq(if_l[i].int_rd_pend_o.bool())
-            m.d.comb += intfu_wr_pend_v[i].eq(if_l[i].int_wr_pend_o.bool())
-            #m.d.comb += intfu_rd_pend_v[i].eq(if_l[i].int_readable_o)
-            #m.d.comb += intfu_wr_pend_v[i].eq(if_l[i].int_writable_o)
+            #m.d.comb += intfu_rd_pend_v[i].eq(if_l[i].int_rd_pend_o.bool())
+            #m.d.comb += intfu_wr_pend_v[i].eq(if_l[i].int_wr_pend_o.bool())
+            m.d.comb += intfu_rd_pend_v[i].eq(if_l[i].int_readable_o)
+            m.d.comb += intfu_wr_pend_v[i].eq(if_l[i].int_writable_o)
 
         # Connect INT Fn Unit global wr/rd pending
         for fu in if_l:
-            m.d.comb += fu.g_int_wr_pend_i.eq(intfu_wr_pend_v)
-            m.d.comb += fu.g_int_rd_pend_i.eq(intfu_rd_pend_v)
+            m.d.sync += fu.g_int_wr_pend_i.eq(intfu_wr_pend_v)
+            m.d.sync += fu.g_int_rd_pend_i.eq(intfu_rd_pend_v)
 
         # Connect FU-FU Matrix, NOTE: FN Units readable/writable considered
         # to be unit "read-pending / write-pending"
index 3edabbde16eb2c2dc41eb4b5f9e8a4d508835090..306694291224eb84c7a7e31bc6e764673512ae75 100644 (file)
@@ -164,8 +164,8 @@ class FnUnit(Elaboratable):
         g_rd = Signal(self.reg_width, reset_less=True)
         ro = Signal(reset_less=True)
         m.d.comb += g_rd.eq(self.g_wr_pend_i & self.rd_pend_o)
-        m.d.comb += ro.eq(~g_rd.bool())
-        m.d.comb += self.readable_o.eq(ro & rd_l.q)
+        m.d.comb += ro.eq(~g_rd.bool() & rd_l.q)
+        m.d.comb += self.readable_o.eq(ro)
 
         # writable output signal
         g_wr_v = Signal(self.reg_width, reset_less=True)
@@ -173,7 +173,7 @@ class FnUnit(Elaboratable):
         wo = Signal(reset_less=True)
         m.d.comb += g_wr_v.eq(g_pend_i & xx_pend_o)
         m.d.comb += g_wr.eq(~g_wr_v.bool())
-        m.d.comb += wo.eq(g_wr & rd_l.qn & self.req_rel_i & shadown)
+        m.d.comb += wo.eq(g_wr & rd_l.q & shadown)
         m.d.comb += writable_o.eq(wo)
 
         return m
index 21ed7fc2ddf0d015b34956a806ec3d4e41b90cda..fd44c45ff5a95db3e1a66cb6a5903f47704d0b01 100644 (file)
@@ -16,6 +16,6 @@ class FU_Pick_Vec(Elaboratable):
     def elaborate(self, platform):
         m = Module()
         m.d.comb += self.readable_o.eq(self.rd_pend_i.bool())
-        m.d.comb += self.writable_o.eq(~self.wr_pend_i.bool())
+        m.d.comb += self.writable_o.eq(self.wr_pend_i.bool())
         return m