From eb409589c581b8874269213f1449316efb5d2e8e Mon Sep 17 00:00:00 2001 From: Kia <kia@special-circumstanc.es> Date: Mon, 9 Mar 2020 19:46:17 -0600 Subject: [PATCH] more work on tree serializer --- combinatorial_LR_parser.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/combinatorial_LR_parser.py b/combinatorial_LR_parser.py index 95efc70..8d67085 100644 --- a/combinatorial_LR_parser.py +++ b/combinatorial_LR_parser.py @@ -453,19 +453,32 @@ class RuleExecutor(Elaboratable): m.d.comb += self.push_item.eq(new_item_func(self.stack_view_in)) return m -# We create a serialized parsetree from the bottom up, with +# We create a serialized parse tree from the bottom up, with class TreeSerializer(Elaboratable): - def __init__(self, item_width, serializing_ruleset): + def __init__(self, item_width, stack_depth, serializing_ruleset, number_to_pop, reduce_rule_number, item_created_by_reduce_rule, strobe_in, ready_out): # Parameters self.item_width = item_width + self.stack_depth = stack_depth self.serializing_ruleset = serializing_ruleset - self.item_created_by_reduce_rule_in = Signal(item_width) - self.reduce_rule_number_in = Signal(item_width) + self.number_to_pop = Signal(range(stack_depth)) + self.reduce_rule_number = Signal(item_width) + self.item_created_by_reduce_rule = Signal(item_width) + + self.strobe_in = Signal(1) + self.ready_out = Signal(1) + def elaborate(self, platform): + m = Module() + + to_pop = Signal(range(self.stack_depth)) + + with m.FSM() as fsm: + with m.State("READY"): + m.d.comb += self.ready_out.eq(1) + with m.If(strobe_in == 1): - # This is the master state machine -- it interfaces with the outside -- GitLab