Skip to content

Commit 4f7f982

Browse files
committed
lib.fsm is updated for lib_simulation
1 parent e3102c0 commit 4f7f982

File tree

4 files changed

+18
-10
lines changed

4 files changed

+18
-10
lines changed

sample/tests/lib_simulation/pycoram_userlogic/led.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def mkUserlogic():
5555
fsm.goto(start)
5656

5757
# building always statement
58-
fsm.make_always(clk, rst)
58+
fsm.make_always(clk, rst, reset=m.make_reset())
5959

6060
return m
6161

sample/tests/lib_simulation/pycoram_userlogic/test_led.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,11 @@
9292
9393
always @(posedge CLK) begin
9494
if(RST) begin
95-
mem_rdata <= 0;
96-
ch_almfull <= 0;
97-
ch_rdata <= 0;
98-
ch_empty <= 1;
9995
test_fsm <= test_fsm_init;
10096
_d1_test_fsm <= test_fsm_init;
97+
ch_empty <= 1;
98+
ch_rdata <= 0;
99+
mem_rdata <= 0;
101100
_test_fsm_cond_12_0_1 <= 0;
102101
end else begin
103102
_d1_test_fsm <= test_fsm;

veriloggen/lib/fsm.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -211,21 +211,28 @@ def make_if(self):
211211
return tuple(ret)
212212

213213
#---------------------------------------------------------------------------
214-
def make_reset(self):
214+
def make_reset(self, reset):
215215
ret = collections.OrderedDict()
216216

217+
for v in reset:
218+
key = str(v.left)
219+
if v is not None and key not in ret:
220+
ret[key] = v
221+
217222
v = self.reset_visitor.visit(self.state)
218223
key = str(self.state)
219224
if v is not None and key not in ret:
220225
ret[key] = v
221226

222-
for key, dst in self.delayed_state.items():
227+
for dst in self.delayed_state.values():
223228
v = self.reset_visitor.visit(dst)
229+
key = str(v.left)
224230
if v is not None and key not in ret:
225231
ret[key] = v
226232

227-
for key, dst in self.dst_var.items():
233+
for dst in self.dst_var.values():
228234
v = self.reset_visitor.visit(dst)
235+
key = str(v.left)
229236
if v is not None and key not in ret:
230237
ret[key] = v
231238

@@ -240,8 +247,7 @@ def make_reset(self):
240247
def make_always(self, clk, rst, reset=(), body=(), case=True):
241248
self.m.Always(vtypes.Posedge(clk))(
242249
vtypes.If(rst)(
243-
reset,
244-
self.make_reset()
250+
self.make_reset(reset)
245251
)(
246252
body,
247253
self.make_case() if case else self.make_if()

veriloggen/subst_visitor.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,6 @@ def visit_Cat(self, node):
5858

5959
def visit_Subst(self, node):
6060
return self.visit(node.left)
61+
62+
def visit_SingleStatement(self, node):
63+
return []

0 commit comments

Comments
 (0)