33from .. import *
44from ..asserts import *
55from .._utils import log2_int
6+ from .wiring import Signature , In , Out
67from .coding import GrayEncoder , GrayDecoder
78from .cdc import FFSynchronizer , AsyncFFSynchronizer
89
@@ -64,7 +65,7 @@ class FIFOInterface:
6465 w_attributes = "" ,
6566 r_attributes = "" )
6667
67- def __init__ (self , * , width , depth , fwft ):
68+ def __init__ (self , * , width : int , depth : int , fwft ):
6869 if not isinstance (width , int ) or width < 0 :
6970 raise TypeError ("FIFO width must be a non-negative integer, not {!r}"
7071 .format (width ))
@@ -85,6 +86,17 @@ def __init__(self, *, width, depth, fwft):
8586 self .r_en = Signal ()
8687 self .r_level = Signal (range (depth + 1 ))
8788
89+ @property
90+ def signature (self ):
91+ return Signature ({
92+ "w_data" : In (self .width ),
93+ "w_rdy" : Out (1 ),
94+ "w_en" : In (1 ),
95+ "r_data" : Out (self .width ),
96+ "r_rdy" : Out (1 ),
97+ "w_en" : In (1 ),
98+ })
99+
88100
89101def _incr (signal , modulo ):
90102 if modulo == 2 ** len (signal ):
@@ -116,7 +128,7 @@ class SyncFIFO(Elaboratable, FIFOInterface):
116128 r_attributes = "" ,
117129 w_attributes = "" )
118130
119- def __init__ (self , * , width , depth , fwft = True ):
131+ def __init__ (self , * , width : int , depth : int , fwft = True ):
120132 super ().__init__ (width = width , depth = depth , fwft = fwft )
121133
122134 self .level = Signal (range (depth + 1 ))
@@ -220,7 +232,7 @@ class SyncFIFOBuffered(Elaboratable, FIFOInterface):
220232 r_attributes = "" ,
221233 w_attributes = "" )
222234
223- def __init__ (self , * , width , depth ):
235+ def __init__ (self , * , width : int , depth : int ):
224236 super ().__init__ (width = width , depth = depth , fwft = True )
225237
226238 self .level = Signal (range (depth + 1 ))
@@ -295,7 +307,7 @@ class AsyncFIFO(Elaboratable, FIFOInterface):
295307 """ .strip (),
296308 w_attributes = "" )
297309
298- def __init__ (self , * , width , depth , r_domain = "read" , w_domain = "write" , exact_depth = False ):
310+ def __init__ (self , * , width : int , depth : int , r_domain = "read" , w_domain = "write" , exact_depth = False ):
299311 if depth != 0 :
300312 try :
301313 depth_bits = log2_int (depth , need_pow2 = exact_depth )
0 commit comments