@@ -66,17 +66,39 @@ def make_tmp(self, data, valid, ready, width=None, initval=0):
6666
6767 self .tmp_count += 1
6868
69- if valid is not None and ready :
70- self .par .add ( tmp_data (data ), cond = vtypes .AndList (valid , tmp_ready ) )
71- elif valid is None and ready :
72- self .par .add ( tmp_data (data ), cond = tmp_ready )
73- else :
74- self .par .add ( tmp_data (data ), cond = valid )
75-
69+ # data
70+ data_valid_vars = []
7671 if valid is not None :
77- self .par .add ( tmp_valid (valid ), cond = tmp_ready )
72+ data_valid_vars .append (valid )
73+ if tmp_ready is not None :
74+ data_valid_vars .append (tmp_ready )
75+
76+ if len (data_valid_vars ) == 0 :
77+ data_cond = None
78+ elif len (data_valid_vars ) == 1 :
79+ data_cond = data_valid_vars [0 ]
80+ else :
81+ data_cond = vtypes .AndList (* data_valid_vars )
82+
83+ self .par .add ( tmp_data (data ), cond = data_cond )
7884
79- if ready :
85+ # valid
86+ valid_valid_vars = []
87+ if tmp_ready is not None :
88+ valid_valid_vars .append ( tmp_ready )
89+
90+ if len (valid_valid_vars ) == 0 :
91+ valid_cond = None
92+ elif len (valid_valid_vars ) == 1 :
93+ valid_cond = valid_valid_vars [0 ]
94+ else :
95+ valid_cond = vtypes .AndList (* valid_valid_vars )
96+
97+ if tmp_valid is not None :
98+ self .par .add ( tmp_valid (valid ), cond = tmp_ready )
99+
100+ # ready
101+ if tmp_ready is not None :
80102 for r in ready :
81103 if r : self .m .Assign ( r (tmp_ready ) )
82104
@@ -102,27 +124,62 @@ def make_prev(self, data, valid, ready, root_valid=None, width=None, initval=0):
102124 next_valid = None
103125
104126 self .tmp_count += 1
127+
128+ # data
129+ data_valid_vars = []
130+ if valid is not None :
131+ data_valid_vars .append (valid )
132+ if tmp_ready is not None :
133+ data_valid_vars .append (tmp_ready )
134+
135+ if len (data_valid_vars ) == 0 :
136+ data_cond = None
137+ elif len (data_valid_vars ) == 1 :
138+ data_cond = data_valid_vars [0 ]
139+ else :
140+ data_cond = vtypes .AndList (* data_valid_vars )
105141
106- if valid is not None and ready is not None :
107- self .par .add ( tmp_data (data ), cond = vtypes .AndList (valid , tmp_ready ) )
108- elif valid is None and ready is not Noone :
109- self .par .add ( tmp_data (data ), cond = tmp_ready )
142+ self .par .add ( tmp_data (data ), cond = data_cond )
143+
144+ # valid
145+ valid_valid_vars = []
146+ if valid is not None :
147+ valid_valid_vars .append (valid )
148+ if tmp_ready is not None :
149+ valid_valid_vars .append (tmp_ready )
150+
151+ if len (valid_valid_vars ) == 0 :
152+ valid_cond = None
153+ elif len (valid_valid_vars ) == 1 :
154+ valid_cond = valid_valid_vars [0 ]
110155 else :
111- self .par .add ( tmp_data (data ), cond = valid )
156+ valid_cond = vtypes .AndList (* valid_valid_vars )
157+
158+ if tmp_valid is not None :
159+ self .par .add ( tmp_valid (valid ), cond = valid_cond )
160+
161+ next_valid_valid_vars = []
162+ if root_valid is not None :
163+ next_valid_valid_vars .append (root_valid )
164+ if tmp_valid is not None :
165+ next_valid_valid_vars .append (tmp_valid )
166+ if tmp_ready is not None :
167+ next_valid_valid_vars .append (tmp_ready )
112168
113- if valid is not None and ready is not None :
114- self .par .add ( tmp_valid (valid ), cond = vtypes .AndList (valid , tmp_ready ) )
115- self .m .Assign ( next_valid (vtypes .AndList (tmp_valid , root_valid , tmp_ready )) )
116- elif valid is None and ready is not None :
117- self .par .add ( tmp_valid (valid ), cond = tmp_ready )
118- self .m .Assign ( next_valid (tmp_ready ) )
169+ if len (next_valid_valid_vars ) == 0 :
170+ next_valid_cond = None
171+ elif len (next_valid_valid_vars ) == 1 :
172+ next_valid_cond = next_valid_valid_vars [0 ]
119173 else :
120- self .par .add ( tmp_valid (valid ), cond = valid )
121- self .m .Assign ( next_valid (vtypes .AndList (tmp_valid , root_valid )) )
174+ next_valid_cond = vtypes .AndList (* next_valid_valid_vars )
175+
176+ if next_valid is not None :
177+ self .m .Assign ( next_valid (next_valid_cond ) )
122178
179+ # ready
123180 if ready is not None :
124181 self .m .Assign ( ready (tmp_ready ) )
125-
182+
126183 return tmp_data , next_valid , tmp_ready
127184
128185 #---------------------------------------------------------------------------
@@ -260,7 +317,7 @@ def __init__(self, pipe):
260317
261318 def make_valid (self , lvalid , rvalid ):
262319 if rvalid is not None and lvalid is not None :
263- return vtypes .And (lvalid , rvalid )
320+ return vtypes .AndList (lvalid , rvalid )
264321 elif rvalid is None and lvalid is None :
265322 return None
266323 elif rvalid is None :
0 commit comments