looking for replacements of the hard-coded control blocks
[ieee754fpu.git] / src / add / queue.py
index f1ad3a2e2887f329c0688e5f7041ba859d55723c..e52ab5e9eb74cbd516b5b0daa8681023714055b3 100644 (file)
@@ -43,13 +43,16 @@ class Queue(FIFOInterface):
                      therefore if read is enabled, the data ABSOLUTELY MUST
                      be read.
 
+            Attributes:
+            * level: available free space (number of unread entries)
+
             din  = enq_data, writable  = enq_ready, we = enq_valid
             dout = deq_data, re = deq_ready, readable = deq_valid
         """
         FIFOInterface.__init__(self, width, depth, fwft)
         self.pipe = pipe
         self.depth = depth
-        self.count = Signal(bits_for(depth))
+        self.level = Signal(bits_for(depth))
 
     def elaborate(self, platform):
         m = Module()
@@ -132,17 +135,18 @@ class Queue(FIFOInterface):
                 with m.If(n_i_ready):
                     m.d.comb += do_enq.eq(0)
 
-        # pipe mode: read-enabled requires writability.
+        # pipe mode: if next stage says it's ready (readable), we
+        #            *must* declare the input ready (writeable).
         if self.pipe:
             with m.If(n_i_ready):
                 m.d.comb += p_o_ready.eq(1)
 
         # set the count (available free space), optimise on power-of-two
         if self.depth == 1 << ptr_width:  # is depth a power of 2
-            m.d.comb += self.count.eq(
+            m.d.comb += self.level.eq(
                 Mux(maybe_full & ptr_match, self.depth, 0) | ptr_diff)
         else:
-            m.d.comb += self.count.eq(Mux(ptr_match,
+            m.d.comb += self.level.eq(Mux(ptr_match,
                                           Mux(maybe_full, self.depth, 0),
                                           Mux(deq_ptr > enq_ptr,
                                               self.depth + ptr_diff,
@@ -159,7 +163,7 @@ if __name__ == "__main__":
 
     def queue_ports(queue, name_prefix):
         retval = []
-        for name in ["count",
+        for name in ["level",
                      "dout",
                      "readable",
                      "writable"]: