@@ -119,6 +119,15 @@ module Q_srl (clock, reset, i_d, i_v, i_r, o_d, o_v, o_r, count, maxcount);
119119 reg i_b_reg // - true iff !full
120120 /* synthesis syn_allow_retiming=0 */ ;
121121
122+ // Parameter Checking
123+ initial begin
124+ if (depth < 2 ) begin
125+ $error("%m: FIFO depth must be two or higher." );
126+ $finish ;
127+ end
128+ end
129+
130+
122131 assign addr_full_ = (state_== state_more) && (addr_== depth- 2 );
123132 // - queue full
124133 assign addr_zero_ = (addr== 0 ); // - queue contains 2 (or 1,0)
@@ -184,58 +193,58 @@ module Q_srl (clock, reset, i_d, i_v, i_r, o_d, o_v, o_r, count, maxcount);
184193 end // always @ (posedge clock or negedge reset)
185194
186195 always @* begin // - combi always
187- srlo_ < = 'bx;
188- shift_en_o_ < = 1'bx ;
189- shift_en_ < = 1'bx ;
190- addr_ < = 'bx;
191- state_ < = 2'bx ;
196+ srlo_ = 'bx;
197+ shift_en_o_ = 1'bx ;
198+ shift_en_ = 1'bx ;
199+ addr_ = 'bx;
200+ state_ = 2'bx ;
192201 case (state)
193202
194203 state_empty: begin // - (empty, will not produce)
195204 if (i_v) begin // - empty & i_v => consume
196- srlo_ < = i_d;
197- shift_en_o_ < = 1 ;
198- shift_en_ < = 1'bx ;
199- addr_ < = 0 ;
200- state_ < = state_one;
205+ srlo_ = i_d;
206+ shift_en_o_ = 1 ;
207+ shift_en_ = 1'bx ;
208+ addr_ = 0 ;
209+ state_ = state_one;
201210 end
202211 else begin // - empty & !i_v => idle
203- srlo_ < = 'bx;
204- shift_en_o_ < = 0 ;
205- shift_en_ < = 1'bx ;
206- addr_ < = 0 ;
207- state_ < = state_empty;
212+ srlo_ = 'bx;
213+ shift_en_o_ = 0 ;
214+ shift_en_ = 1'bx ;
215+ addr_ = 0 ;
216+ state_ = state_empty;
208217 end
209218 end
210219
211220 state_one: begin // - (contains one)
212221 if (i_v && o_b) begin // - one & i_v & o_b => consume
213- srlo_ < = 'bx;
214- shift_en_o_ < = 0 ;
215- shift_en_ < = 1 ;
216- addr_ < = 0 ;
217- state_ < = state_more;
222+ srlo_ = 'bx;
223+ shift_en_o_ = 0 ;
224+ shift_en_ = 1 ;
225+ addr_ = 0 ;
226+ state_ = state_more;
218227 end
219228 else if (i_v && ! o_b) begin // - one & i_v & !o_b => cons+prod
220- srlo_ < = i_d;
221- shift_en_o_ < = 1 ;
222- shift_en_ < = 1 ;
223- addr_ < = 0 ;
224- state_ < = state_one;
229+ srlo_ = i_d;
230+ shift_en_o_ = 1 ;
231+ shift_en_ = 1 ;
232+ addr_ = 0 ;
233+ state_ = state_one;
225234 end
226235 else if (! i_v && o_b) begin // - one & !i_v & o_b => idle
227- srlo_ < = 'bx;
228- shift_en_o_ < = 0 ;
229- shift_en_ < = 1'bx ;
230- addr_ < = 0 ;
231- state_ < = state_one;
236+ srlo_ = 'bx;
237+ shift_en_o_ = 0 ;
238+ shift_en_ = 1'bx ;
239+ addr_ = 0 ;
240+ state_ = state_one;
232241 end
233242 else if (! i_v && ! o_b) begin // - one & !i_v & !o_b => produce
234- srlo_ < = 'bx;
235- shift_en_o_ < = 0 ;
236- shift_en_ < = 1'bx ;
237- addr_ < = 0 ;
238- state_ < = state_empty;
243+ srlo_ = 'bx;
244+ shift_en_o_ = 0 ;
245+ shift_en_ = 1'bx ;
246+ addr_ = 0 ;
247+ state_ = state_empty;
239248 end
240249 end // case: state_one
241250
@@ -244,60 +253,60 @@ module Q_srl (clock, reset, i_d, i_v, i_r, o_d, o_v, o_r, count, maxcount);
244253 // - (full, will not consume)
245254 // - (full here if depth==2)
246255 if (o_b) begin // - full & o_b => idle
247- srlo_ < = 'bx;
248- shift_en_o_ < = 0 ;
249- shift_en_ < = 0 ;
250- addr_ < = addr;
251- state_ < = state_more;
256+ srlo_ = 'bx;
257+ shift_en_o_ = 0 ;
258+ shift_en_ = 0 ;
259+ addr_ = addr;
260+ state_ = state_more;
252261 end
253262 else begin // - full & !o_b => produce
254- srlo_ < = srl[addr];
255- shift_en_o_ < = 1 ;
256- shift_en_ < = 0 ;
257- // addr_ < = addr-1;
258- // state_ < = state_more;
259- addr_ < = addr_zero_ ? 0 : addr- 1 ;
260- state_ < = addr_zero_ ? state_one : state_more;
263+ srlo_ = srl[addr];
264+ shift_en_o_ = 1 ;
265+ shift_en_ = 0 ;
266+ // addr_ = addr-1;
267+ // state_ = state_more;
268+ addr_ = addr_zero_ ? 0 : addr- 1 ;
269+ state_ = addr_zero_ ? state_one : state_more;
261270 end
262271 end
263272 else begin // - (mid: neither empty nor full)
264273 if (i_v && o_b) begin // - mid & i_v & o_b => consume
265- srlo_ < = 'bx;
266- shift_en_o_ < = 0 ;
267- shift_en_ < = 1 ;
268- addr_ < = addr+ 1 ;
269- state_ < = state_more;
274+ srlo_ = 'bx;
275+ shift_en_o_ = 0 ;
276+ shift_en_ = 1 ;
277+ addr_ = addr+ 1 ;
278+ state_ = state_more;
270279 end
271280 else if (i_v && ! o_b) begin // - mid & i_v & !o_b => cons+prod
272- srlo_ < = srl[addr];
273- shift_en_o_ < = 1 ;
274- shift_en_ < = 1 ;
275- addr_ < = addr;
276- state_ < = state_more;
281+ srlo_ = srl[addr];
282+ shift_en_o_ = 1 ;
283+ shift_en_ = 1 ;
284+ addr_ = addr;
285+ state_ = state_more;
277286 end
278287 else if (! i_v && o_b) begin // - mid & !i_v & o_b => idle
279- srlo_ < = 'bx;
280- shift_en_o_ < = 0 ;
281- shift_en_ < = 0 ;
282- addr_ < = addr;
283- state_ < = state_more;
288+ srlo_ = 'bx;
289+ shift_en_o_ = 0 ;
290+ shift_en_ = 0 ;
291+ addr_ = addr;
292+ state_ = state_more;
284293 end
285294 else if (! i_v && ! o_b) begin // - mid & !i_v & !o_b => produce
286- srlo_ < = srl[addr];
287- shift_en_o_ < = 1 ;
288- shift_en_ < = 0 ;
289- addr_ < = addr_zero_ ? 0 : addr- 1 ;
290- state_ < = addr_zero_ ? state_one : state_more;
295+ srlo_ = srl[addr];
296+ shift_en_o_ = 1 ;
297+ shift_en_ = 0 ;
298+ addr_ = addr_zero_ ? 0 : addr- 1 ;
299+ state_ = addr_zero_ ? state_one : state_more;
291300 end
292301 end // else: !if(addr_full)
293302 end // case: state_more
294303
295304 default : begin
296- srlo_ < = 'bx;
297- shift_en_o_ < = 1'bx ;
298- shift_en_ < = 1'bx ;
299- addr_ < = 'bx;
300- state_ < = 2'bx ;
305+ srlo_ = 'bx;
306+ shift_en_o_ = 1'bx ;
307+ shift_en_ = 1'bx ;
308+ addr_ = 'bx;
309+ state_ = 2'bx ;
301310 end // case: default
302311
303312 endcase // case(state)
0 commit comments