Skip to content

Commit 23f6179

Browse files
committed
make_reset in lib.FSM is updated for type check.
1 parent 0cbfb5b commit 23f6179

File tree

14 files changed

+1125
-1974
lines changed

14 files changed

+1125
-1974
lines changed

sample/tests/lib_pipeline/average/led.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ def mkTest(numports=8):
4040
params=m.connect_params(led),
4141
ports=m.connect_ports(led))
4242

43+
reset_done = m.Reg('reset_done', initval=0)
44+
4345
reset_stmt = []
46+
reset_stmt.append( reset_done(0) )
4447
reset_stmt.append( x(0) )
4548

4649
lib.simulation.setup_waveform(m, uut)
@@ -51,14 +54,31 @@ def mkTest(numports=8):
5154

5255
init.add(
5356
Delay(1000),
57+
reset_done(1),
5458
nclk(clk),
55-
56-
[ ( x(i), nclk(clk) ) for i in range(10) ],
57-
[ nclk(clk) for _ in range(10) ],
58-
59+
Delay(10000),
5960
Systask('finish'),
6061
)
6162

63+
x_count = m.TmpReg(32, initval=0)
64+
65+
xfsm = lib.FSM(m, 'xfsm')
66+
xfsm.goto_next(cond=reset_done)
67+
xfsm.add(x.inc())
68+
xfsm.add(x_count.inc())
69+
xfsm.goto_next(cond=x_count==10)
70+
xfsm.add( Systask('finish') )
71+
72+
xfsm.make_always(clk, rst)
73+
74+
75+
m.Always(Posedge(clk))(
76+
If(reset_done)(
77+
Systask('display', 'x=%d', x),
78+
Systask('display', 'y=%d', y)
79+
)
80+
)
81+
6282
return m
6383

6484
if __name__ == '__main__':

sample/tests/lib_pipeline/average/test_led.py

Lines changed: 47 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
.y(y)
1717
);
1818
19+
reg reset_done;
20+
1921
initial begin
2022
$dumpfile("uut.vcd");
2123
$dumpvars(0, uut);
@@ -30,66 +32,58 @@
3032
3133
initial begin
3234
RST = 0;
35+
reset_done = 0;
3336
x = 0;
3437
#100;
3538
RST = 1;
3639
#100;
3740
RST = 0;
3841
#1000;
42+
reset_done = 1;
3943
@(posedge CLK);
4044
#1;
41-
x = 0;
42-
@(posedge CLK);
43-
#1;
44-
x = 1;
45-
@(posedge CLK);
46-
#1;
47-
x = 2;
48-
@(posedge CLK);
49-
#1;
50-
x = 3;
51-
@(posedge CLK);
52-
#1;
53-
x = 4;
54-
@(posedge CLK);
55-
#1;
56-
x = 5;
57-
@(posedge CLK);
58-
#1;
59-
x = 6;
60-
@(posedge CLK);
61-
#1;
62-
x = 7;
63-
@(posedge CLK);
64-
#1;
65-
x = 8;
66-
@(posedge CLK);
67-
#1;
68-
x = 9;
69-
@(posedge CLK);
70-
#1;
71-
@(posedge CLK);
72-
#1;
73-
@(posedge CLK);
74-
#1;
75-
@(posedge CLK);
76-
#1;
77-
@(posedge CLK);
78-
#1;
79-
@(posedge CLK);
80-
#1;
81-
@(posedge CLK);
82-
#1;
83-
@(posedge CLK);
84-
#1;
85-
@(posedge CLK);
86-
#1;
87-
@(posedge CLK);
88-
#1;
89-
@(posedge CLK);
90-
#1;
45+
#10000;
9146
$finish;
9247
end
48+
49+
reg [32-1:0] _tmp_0;
50+
reg [32-1:0] xfsm;
51+
localparam xfsm_init = 0;
52+
localparam xfsm_1 = 1;
53+
localparam xfsm_2 = 2;
54+
55+
always @(posedge CLK) begin
56+
if(RST) begin
57+
xfsm <= xfsm_init;
58+
_tmp_0 <= 0;
59+
end else begin
60+
case(xfsm)
61+
xfsm_init: begin
62+
if(reset_done) begin
63+
xfsm <= xfsm_1;
64+
end
65+
end
66+
xfsm_1: begin
67+
x <= x + 1;
68+
_tmp_0 <= _tmp_0 + 1;
69+
if(_tmp_0 == 10) begin
70+
xfsm <= xfsm_2;
71+
end
72+
end
73+
xfsm_2: begin
74+
$finish;
75+
end
76+
endcase
77+
end
78+
end
79+
80+
always @(posedge CLK) begin
81+
if(reset_done) begin
82+
$display("x=%d", x);
83+
$display("y=%d", y);
84+
end
85+
end
86+
9387
endmodule
9488
9589
module blinkled
@@ -117,12 +111,13 @@
117111
end else begin
118112
_pipe_data_0 <= x;
119113
_pipe_data_1 <= _pipe_data_0;
120-
_pipe_data_2 <= _pipe_data_0 + _pipe_data_1;
114+
_pipe_data_2 <= (_pipe_data_0 + _pipe_data_1);
121115
_pipe_data_3 <= x;
122-
_pipe_data_4 <= _pipe_data_2 + _pipe_data_3;
116+
_pipe_data_4 <= (_pipe_data_2 + _pipe_data_3);
123117
y <= _pipe_data_4;
124118
end
125119
end
120+
126121
endmodule
127122
"""
128123

sample/tests/lib_pipeline/average_valid/led.py

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@ def mkTest(numports=8):
4444
params=m.connect_params(led),
4545
ports=m.connect_ports(led))
4646

47+
reset_done = m.Reg('reset_done', initval=0)
48+
4749
reset_stmt = []
50+
reset_stmt.append( reset_done(0) )
4851
reset_stmt.append( x(0) )
4952
reset_stmt.append( vx(0) )
5053

@@ -56,15 +59,37 @@ def mkTest(numports=8):
5659

5760
init.add(
5861
Delay(1000),
62+
reset_done(1),
5963
nclk(clk),
60-
61-
[ ( x(i), vx(1), nclk(clk), [ (vx(0), nclk(clk)) for _ in range(3)] ) for i in range(10) ],
62-
vx(0),
63-
[ nclk(clk) for _ in range(10) ],
64-
64+
Delay(10000),
6565
Systask('finish'),
6666
)
6767

68+
69+
x_count = m.TmpReg(32, initval=0)
70+
71+
xfsm = lib.FSM(m, 'xfsm')
72+
xfsm.add(vx(0))
73+
xfsm.goto_next(cond=reset_done)
74+
xfsm.add(vx(1))
75+
xfsm.add(x.inc())
76+
xfsm.add(x_count.inc())
77+
xfsm.goto_next(cond=x_count==10)
78+
xfsm.add(vx(0))
79+
xfsm.make_always(clk, rst)
80+
81+
82+
m.Always(Posedge(clk))(
83+
If(reset_done)(
84+
If(vx)(
85+
Systask('display', 'x=%d', x)
86+
),
87+
If(vy)(
88+
Systask('display', 'y=%d', y)
89+
)
90+
)
91+
)
92+
6893
return m
6994

7095
if __name__ == '__main__':

0 commit comments

Comments
 (0)