Skip to content

Commit ff1d013

Browse files
committed
Updated for unbalanced pipeline
1 parent 23f6179 commit ff1d013

File tree

19 files changed

+1160
-62
lines changed

19 files changed

+1160
-62
lines changed

sample/tests/lib_pipeline/average/led.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def mkLed():
88
clk = m.Input('CLK')
99
rst = m.Input('RST')
1010
x = m.Input('x', 32)
11-
y = m.OutputReg('y', 32, initval=0)
11+
y = m.Output('y', 32)
1212

1313
pipe = lib.Pipeline(m, 'pipe')
1414

sample/tests/lib_pipeline/average/test_led.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,16 @@
9191
input CLK,
9292
input RST,
9393
input [32-1:0] x,
94-
output reg [32-1:0] y
94+
output [32-1:0] y
9595
);
9696
9797
reg [32-1:0] _pipe_data_0;
9898
reg [32-1:0] _pipe_data_1;
9999
reg [32-1:0] _pipe_data_2;
100100
reg [32-1:0] _pipe_data_3;
101101
reg [32-1:0] _pipe_data_4;
102+
reg [32-1:0] _pipe_data_5;
103+
assign y = _pipe_data_5;
102104
103105
always @(posedge CLK) begin
104106
if(RST) begin
@@ -107,14 +109,14 @@
107109
_pipe_data_2 <= 0;
108110
_pipe_data_3 <= 0;
109111
_pipe_data_4 <= 0;
110-
y <= 0;
112+
_pipe_data_5 <= 0;
111113
end else begin
112114
_pipe_data_0 <= x;
113115
_pipe_data_1 <= _pipe_data_0;
114116
_pipe_data_2 <= (_pipe_data_0 + _pipe_data_1);
115117
_pipe_data_3 <= x;
116118
_pipe_data_4 <= (_pipe_data_2 + _pipe_data_3);
117-
y <= _pipe_data_4;
119+
_pipe_data_5 <= _pipe_data_4;
118120
end
119121
end
120122

sample/tests/lib_pipeline/average_valid/led.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ def mkLed():
99
rst = m.Input('RST')
1010
x = m.Input('x', 32)
1111
vx = m.Input('vx')
12-
y = m.OutputReg('y', 32, initval=0)
13-
vy = m.OutputReg('vy', initval=0)
12+
y = m.Output('y', 32)
13+
vy = m.Output('vy')
1414

1515
pipe = lib.Pipeline(m, 'pipe')
1616

sample/tests/lib_pipeline/average_valid/test_led.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@
103103
input RST,
104104
input [32-1:0] x,
105105
input vx,
106-
output reg [32-1:0] y,
107-
output reg vy
106+
output [32-1:0] y,
107+
output vy
108108
);
109109
110110
reg [32-1:0] _pipe_data_0;
@@ -125,6 +125,11 @@
125125
reg _pipe_valid_4;
126126
reg [32-1:0] _pipe_data_5;
127127
reg _pipe_valid_5;
128+
reg [32-1:0] _pipe_data_6;
129+
reg _pipe_valid_6;
130+
131+
assign y = _pipe_data_6;
132+
assign vy = _pipe_valid_6;
128133
129134
always @(posedge CLK) begin
130135
if(RST) begin
@@ -140,8 +145,8 @@
140145
_pipe_valid_4 <= 0;
141146
_pipe_data_5 <= 0;
142147
_pipe_valid_5 <= 0;
143-
y <= 0;
144-
vy <= 0;
148+
_pipe_data_6 <= 0;
149+
_pipe_valid_6 <= 0;
145150
end else begin
146151
if(vx) begin
147152
_pipe_data_0 <= x;
@@ -173,8 +178,10 @@
173178
_pipe_data_5 <= (_pipe_data_3 + _pipe_data_4);
174179
end
175180
_pipe_valid_5 <= (_pipe_valid_3 && _pipe_valid_4);
176-
y <= _pipe_data_5;
177-
vy <= _pipe_valid_5;
181+
if(_pipe_valid_5) begin
182+
_pipe_data_6 <= _pipe_data_5;
183+
end
184+
_pipe_valid_6 <= _pipe_valid_5;
178185
end
179186
end
180187

sample/tests/lib_pipeline/average_validready/led.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ def mkLed():
1010
x = m.Input('x', 32)
1111
vx = m.Input('vx')
1212
rx = m.Output('rx')
13-
y = m.OutputReg('y', 32, initval=0)
14-
vy = m.OutputReg('vy', initval=0)
13+
y = m.Output('y', 32)
14+
vy = m.Output('vy')
1515
ry = m.Input('ry')
1616

1717
pipe = lib.Pipeline(m, 'pipe')

sample/tests/lib_pipeline/average_validready/test_led.py

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -199,36 +199,42 @@
199199
input [32-1:0] x,
200200
input vx,
201201
output rx,
202-
output reg [32-1:0] y,
203-
output reg vy,
202+
output [32-1:0] y,
203+
output vy,
204204
input ry
205205
);
206206
207+
assign rx = ((_pipe_ready_0 || (!_pipe_valid_0)) && (_pipe_ready_3 || (!_pipe_valid_3)));
207208
reg [32-1:0] _pipe_data_0;
208209
reg _pipe_valid_0;
209210
wire _pipe_ready_0;
210211
wire _pipe_nvalid_0;
211212
assign _pipe_nvalid_0 = ((vx && _pipe_valid_0) && _pipe_ready_0);
212-
assign rx = (_pipe_ready_0 && (_pipe_ready_3 || (!_pipe_valid_3)));
213+
assign _pipe_ready_0 = ((_pipe_ready_1 || (!_pipe_valid_1)) && (_pipe_ready_2 || (!_pipe_valid_2)));
213214
reg [32-1:0] _pipe_data_1;
214215
reg _pipe_valid_1;
215216
wire _pipe_ready_1;
216217
wire _pipe_nvalid_1;
217218
assign _pipe_nvalid_1 = ((vx && _pipe_valid_1) && _pipe_ready_1);
218-
assign _pipe_ready_0 = (_pipe_ready_1 && (_pipe_ready_2 || (!_pipe_valid_2)));
219+
assign _pipe_ready_1 = (_pipe_ready_2 || (!_pipe_valid_2));
219220
reg [32-1:0] _pipe_data_2;
220221
reg _pipe_valid_2;
221222
wire _pipe_ready_2;
222-
assign _pipe_ready_1 = (_pipe_ready_2 || (!_pipe_valid_2));
223+
assign _pipe_ready_2 = (_pipe_ready_4 || (!_pipe_valid_4));
223224
reg [32-1:0] _pipe_data_3;
224225
reg _pipe_valid_3;
225226
wire _pipe_ready_3;
227+
assign _pipe_ready_3 = (_pipe_ready_4 || (!_pipe_valid_4));
226228
reg [32-1:0] _pipe_data_4;
227229
reg _pipe_valid_4;
228230
wire _pipe_ready_4;
229-
assign _pipe_ready_2 = (_pipe_ready_4 || (!_pipe_valid_4));
230-
assign _pipe_ready_3 = (_pipe_ready_4 || (!_pipe_valid_4));
231-
assign _pipe_ready_4 = ry;
231+
assign _pipe_ready_4 = (_pipe_ready_5 || (!_pipe_valid_5));
232+
reg [32-1:0] _pipe_data_5;
233+
reg _pipe_valid_5;
234+
wire _pipe_ready_5;
235+
assign _pipe_ready_5 = ry;
236+
assign y = _pipe_data_5;
237+
assign vy = _pipe_valid_5;
232238
233239
always @(posedge CLK) begin
234240
if(RST) begin
@@ -242,8 +248,8 @@
242248
_pipe_valid_3 <= 0;
243249
_pipe_data_4 <= 0;
244250
_pipe_valid_4 <= 0;
245-
y <= 0;
246-
vy <= 0;
251+
_pipe_data_5 <= 0;
252+
_pipe_valid_5 <= 0;
247253
end else begin
248254
if((vx && (_pipe_ready_0 || (!_pipe_valid_0)))) begin
249255
_pipe_data_0 <= x;
@@ -275,8 +281,12 @@
275281
if((_pipe_ready_4 || (!_pipe_valid_4))) begin
276282
_pipe_valid_4 <= ((_pipe_valid_2 && _pipe_ready_2) && _pipe_valid_3);
277283
end
278-
y <= _pipe_data_4;
279-
vy <= _pipe_valid_4;
284+
if(((_pipe_valid_4 && _pipe_ready_4) && (_pipe_ready_5 || (!_pipe_valid_5)))) begin
285+
_pipe_data_5 <= _pipe_data_4;
286+
end
287+
if((_pipe_ready_5 || (!_pipe_valid_5))) begin
288+
_pipe_valid_5 <= (_pipe_valid_4 && _pipe_ready_4);
289+
end
280290
end
281291
end
282292

sample/tests/lib_pipeline/multi_input/test_led.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -258,28 +258,41 @@
258258
input rz
259259
);
260260
261+
assign rx = (_pipe_ready_0 || (!_pipe_valid_0));
262+
assign ry = (_pipe_ready_0 || (!_pipe_valid_0));
261263
reg [32-1:0] _pipe_data_0;
262264
reg _pipe_valid_0;
263265
wire _pipe_ready_0;
264-
assign rx = (_pipe_ready_0 || (!_pipe_valid_0));
265-
assign ry = (_pipe_ready_0 || (!_pipe_valid_0));
266-
assign z = _pipe_data_0;
267-
assign vz = _pipe_valid_0;
268-
assign _pipe_ready_0 = rz;
266+
assign _pipe_ready_0 = (_pipe_ready_1 || (!_pipe_valid_1));
267+
reg [32-1:0] _pipe_data_1;
268+
reg _pipe_valid_1;
269+
wire _pipe_ready_1;
270+
assign _pipe_ready_1 = rz;
271+
assign z = _pipe_data_1;
272+
assign vz = _pipe_valid_1;
269273
270274
always @(posedge CLK) begin
271275
if(RST) begin
272276
_pipe_data_0 <= 0;
273277
_pipe_valid_0 <= 0;
278+
_pipe_data_1 <= 0;
279+
_pipe_valid_1 <= 0;
274280
end else begin
275281
if((((vx && rx) && (vy && ry)) && (_pipe_ready_0 || (!_pipe_valid_0)))) begin
276282
_pipe_data_0 <= (x + y);
277283
end
278284
if((_pipe_ready_0 || (!_pipe_valid_0))) begin
279285
_pipe_valid_0 <= ((vx && rx) && (vy && ry));
280286
end
287+
if(((_pipe_valid_0 && _pipe_ready_0) && (_pipe_ready_1 || (!_pipe_valid_1)))) begin
288+
_pipe_data_1 <= _pipe_data_0;
289+
end
290+
if((_pipe_ready_1 || (!_pipe_valid_1))) begin
291+
_pipe_valid_1 <= (_pipe_valid_0 && _pipe_ready_0);
292+
end
281293
end
282294
end
295+
283296
endmodule
284297
"""
285298

sample/tests/lib_pipeline/multi_output/test_led.py

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -406,27 +406,39 @@
406406
input ra
407407
);
408408
409+
assign rx = ((_pipe_ready_0 || (!_pipe_valid_0)) && (_pipe_ready_1 || (!_pipe_valid_1)));
410+
assign ry = ((_pipe_ready_0 || (!_pipe_valid_0)) && (_pipe_ready_1 || (!_pipe_valid_1)));
409411
reg [32-1:0] _pipe_data_0;
410412
reg _pipe_valid_0;
411413
wire _pipe_ready_0;
412-
assign rx = ((_pipe_ready_0 || (!_pipe_valid_0)) && (_pipe_ready_1 || (!_pipe_valid_1)));
413-
assign ry = ((_pipe_ready_0 || (!_pipe_valid_0)) && (_pipe_ready_1 || (!_pipe_valid_1)));
414+
assign _pipe_ready_0 = (_pipe_ready_2 || (!_pipe_valid_2));
414415
reg [32-1:0] _pipe_data_1;
415416
reg _pipe_valid_1;
416417
wire _pipe_ready_1;
417-
assign z = _pipe_data_0;
418-
assign vz = _pipe_valid_0;
419-
assign _pipe_ready_0 = rz;
420-
assign a = _pipe_data_1;
421-
assign va = _pipe_valid_1;
422-
assign _pipe_ready_1 = ra;
418+
assign _pipe_ready_1 = (_pipe_ready_3 || (!_pipe_valid_3));
419+
reg [32-1:0] _pipe_data_2;
420+
reg _pipe_valid_2;
421+
wire _pipe_ready_2;
422+
assign _pipe_ready_2 = rz;
423+
assign z = _pipe_data_2;
424+
assign vz = _pipe_valid_2;
425+
reg [32-1:0] _pipe_data_3;
426+
reg _pipe_valid_3;
427+
wire _pipe_ready_3;
428+
assign _pipe_ready_3 = ra;
429+
assign a = _pipe_data_3;
430+
assign va = _pipe_valid_3;
423431
424432
always @(posedge CLK) begin
425433
if(RST) begin
426434
_pipe_data_0 <= 0;
427435
_pipe_valid_0 <= 0;
428436
_pipe_data_1 <= 0;
429437
_pipe_valid_1 <= 0;
438+
_pipe_data_2 <= 0;
439+
_pipe_valid_2 <= 0;
440+
_pipe_data_3 <= 0;
441+
_pipe_valid_3 <= 0;
430442
end else begin
431443
if((((vx && rx) && (vy && ry)) && (_pipe_ready_0 || (!_pipe_valid_0)))) begin
432444
_pipe_data_0 <= (x + y);
@@ -440,6 +452,18 @@
440452
if((_pipe_ready_1 || (!_pipe_valid_1))) begin
441453
_pipe_valid_1 <= ((vy && ry) && (vx && rx));
442454
end
455+
if(((_pipe_valid_0 && _pipe_ready_0) && (_pipe_ready_2 || (!_pipe_valid_2)))) begin
456+
_pipe_data_2 <= _pipe_data_0;
457+
end
458+
if((_pipe_ready_2 || (!_pipe_valid_2))) begin
459+
_pipe_valid_2 <= (_pipe_valid_0 && _pipe_ready_0);
460+
end
461+
if(((_pipe_valid_1 && _pipe_ready_1) && (_pipe_ready_3 || (!_pipe_valid_3)))) begin
462+
_pipe_data_3 <= _pipe_data_1;
463+
end
464+
if((_pipe_ready_3 || (!_pipe_valid_3))) begin
465+
_pipe_valid_3 <= (_pipe_valid_1 && _pipe_ready_1);
466+
end
443467
end
444468
end
445469
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
TARGET=led.py
2+
TEST=test_led.py
3+
ARGS=
4+
5+
PYTHON=python3
6+
#PYTHON=python
7+
#OPT=-m pdb
8+
#OPT=-m cProfile -s time
9+
#OPT=-m cProfile -o profile.rslt
10+
11+
.PHONY: all
12+
all: test
13+
14+
.PHONY: run
15+
run:
16+
$(PYTHON) $(OPT) $(TARGET) $(ARGS)
17+
18+
.PHONY: test
19+
test:
20+
$(PYTHON) -m pytest -vv $(TEST)
21+
22+
.PHONY: check
23+
check:
24+
$(PYTHON) $(OPT) $(TARGET) $(ARGS) > tmp.v
25+
iverilog -tnull -Wall tmp.v
26+
rm -f tmp.v
27+
28+
.PHONY: clean
29+
clean:
30+
rm -rf *.pyc __pycache__ parsetab.py *.out tmp.v uut.vcd
31+
32+
.PHONY: sim
33+
sim:
34+
iverilog -Wall tmp.v
35+
./a.out
36+
37+
.PHONY: view
38+
view:
39+
gtkwave --giga uut.vcd &

0 commit comments

Comments
 (0)