diff --git a/unoptimized_lr/simple_lr_automaton.py b/unoptimized_lr/simple_lr_automaton.py index 2b68046b05f7bd2ed4307f4e30a2fdd40316b192..8522078cdb49da67bef91ee77262b81dd5555606 100644 --- a/unoptimized_lr/simple_lr_automaton.py +++ b/unoptimized_lr/simple_lr_automaton.py @@ -224,7 +224,7 @@ class ParametrizationConstants(): dummy_signal = Signal(range(longest_serialized_parse_tree)) self.W_parsetree_index = len(dummy_signal) - self.W_serialized_tree = max(W_Nonterminal, W_max_RHS, 1 + W_Terminal, 1+ W_parsetree_index) + self.W_serialized_parse_tree = max(W_Nonterminal, W_max_RHS, 1 + W_Terminal, 1+ W_parsetree_index) class LR_automaton_internal(Layout): @@ -242,17 +242,66 @@ class LR_automaton_internal(Layout): interfaces.append(("index_stack_bus", simple_lr_stack.StackLayout(data_width=parameters.W_parsetree_index, index_width=parameters.W_stackdepth))) super().__init__(interfaces) + +class InputStream(Layout): + def __init__(self, *, parameters): + input_width = parameters.W_terminal + super().__init__([ + # INPUTS + ("data_in", unsigned(input_width)), # FROM SOURCE + ("valid_in", 1), # FROM SOURCE + ("ready_in", 1), # FROM DEST + + # OUTPUTS + ("valid_out", 1), # TO DEST + ("ready_out", 1), # TO SOURCE + + ]) + + +class Sideband(Layout): + def __init__(self, *, parameters): + super().__init__([ + # INPUTS + ("reset_parser", 1), # FROM SOURCE + + # OUTPUTS + ("parser_initialized", 1), # TO SOURCE + ("parse_complete_out", 1), # TO DEST + ("parse_success", 1), # TO DEST + ("parser_fault", 1), # TO DEST + ]) + + +class Serializer(Layout) + def __init__(self, *, parameters): + super().__init__([ + # INPUTS + ("valid_in", 1), # FROM SOURCE + ("ready_in", 1), # FROM DEST + + # OUTPUTS + ("valid_out", 1), # TO DEST + ("ready_out", 1), # TO SOURCE + ("data_out", unsigned(parameters.W_serialized_parse_tree)), # TO DEST + + ("parse_tree_done", 1) + ("parse_tree_length", ) + + + ]) + class LR_automaton_external(Layout): def __init__(self, *, parameters): interfaces = [ # INPUT - ("input_stream"), + ("input_stream", InputStream(parameters=parameters)), # OUTPUTS - ("sideband_bus") + ("sideband_bus", Sideband(parameters=parameters)) ] if (parameters.generating_tree == True): - interfaces.append(("serialization_bus")) + interfaces.append(("serialization_bus", Serializer(parameters=parameters))) super().__init__(interfaces)