diff --git a/unoptimized_lr/simple_lr_table.py b/unoptimized_lr/simple_lr_table.py index 67a537b12923741875ccd9e21e543297a76c2b2e..42fe5521ec0783f1edbfc7844184ac2bd83837f9 100644 --- a/unoptimized_lr/simple_lr_table.py +++ b/unoptimized_lr/simple_lr_table.py @@ -15,7 +15,7 @@ from functools import reduce # 3) make it optimized class LRTable(Elaboratable): - def __init__(self, number_of_states, number_of_terminals, number_of_reduce_rules): + def __init__(self, number_of_states, number_of_terminals, number_of_reduce_rules, input_array): # Parameters # So the LR table is a two-dimensional array, where one of the dimensions (rows) @@ -66,8 +66,16 @@ class LRTable(Elaboratable): self.table_entry_out_valid = Signal(1) + # Prepare the table for consumption + assert(len(input_array) == number_of_states) + + rasterized = [] + for row in input_array: + assert(len(row) == number_of_terminals) + rasterized.extend(row) + # Memory - self.mem = Memory(width=self.table_width, depth=self.table_depth, init= [0x1a,0x2b,0x3c,0x4d]) + self.mem = Memory(width=self.table_width, depth=self.table_depth, init=rasterized) def elaborate(self, platform): @@ -105,7 +113,7 @@ class LRTable(Elaboratable): class GOTOtable(Elaboratable): - def __init__(self, number_of_states, number_of_nonterminals): + def __init__(self, number_of_states, number_of_nonterminals, input_array): # Parameters # So the GOTO table is a two-dimensional array, where one of the dimensions (rows) @@ -158,8 +166,17 @@ class GOTOtable(Elaboratable): self.table_entry_out_valid = Signal(1) + # Prepare the table for consumption + assert(len(input_array) == number_of_states) + + rasterized = [] + for row in input_array: + assert(len(row) == number_of_nonterminals) + rasterized.extend(row) + # Memory - self.mem = Memory(width=self.table_width, depth=self.table_depth, init= [0x4a,0x3b,0x2c,0x1d]) + + self.mem = Memory(width=self.table_width, depth=self.table_depth, init=rasterized) def elaborate(self, platform): @@ -199,7 +216,7 @@ class DummyPlug(Elaboratable): def elaborate(self, platform): m = Module() - m.submodules.table = table = GOTOtable(4,8) + m.submodules.table = table = GOTOtable(3,2,[[1,2],[3,4],[5,6]]) counter = Signal(8) m.d.sync += counter.eq(counter+1)