diff --git a/unoptimized_lr/simple_lr_stack.py b/unoptimized_lr/simple_lr_stack.py index 2d32918fe5bea8c328aa67b00a270736c0ba36c6..aaed13e6d04a0c48f479713d781e1d3e4fc4361e 100644 --- a/unoptimized_lr/simple_lr_stack.py +++ b/unoptimized_lr/simple_lr_stack.py @@ -69,14 +69,14 @@ class ParseStack(Elaboratable): #self.in_data_port = Signal(width) # data_in #self.in_aux_port = Signal(range(depth)) #Index_in #self.in_data_valid = Signal(1) # merge this and the one below, replace with valid_in - self.in_aux_valid = Signal(1) # + #self.in_aux_valid = Signal(1) # # Control outputs - self.internal_fault = Signal(1) # keep + #self.internal_fault = Signal(1) # keep # Data outputs - self.out_data_port = Signal(width) #data_out +# self.out_data_port = Signal(width) #data_out self.out_aux_port = Signal(range(depth)) # index_out self.out_data_valid = Signal(1) # merge these as valid_out self.out_aux_valid = Signal(1)# @@ -126,19 +126,19 @@ class ParseStack(Elaboratable): m.d.comb += wport.en.eq(1) m.next = "AT_LEAST_ONE_ITEM" with m.Case(self.POP): - m.d.comb += self.internal_fault.eq(1) + m.d.comb += self.bus.internal_fault.eq(1) m.next = "FAULTED" with m.Case(self.MULTIPOP): - m.d.comb += self.internal_fault.eq(1) + m.d.comb += self.bus.internal_fault.eq(1) m.next = "FAULTED" with m.Case(self.INTROSPECT): - m.d.comb += self.internal_fault.eq(1) + m.d.comb += self.bus.internal_fault.eq(1) m.next = "FAULTED" with m.Case(self.READ_TOS): - m.d.comb += self.internal_fault.eq(1) + m.d.comb += self.bus.internal_fault.eq(1) m.next = "FAULTED" with m.Case(self.READ_SP): - m.d.comb += self.internal_fault.eq(1) + m.d.comb += self.bus.internal_fault.eq(1) m.next = "FAULTED" with m.State("AT_LEAST_ONE_ITEM"): @@ -152,7 +152,7 @@ class ParseStack(Elaboratable): m.next = "AT_LEAST_ONE_ITEM" with m.Case(self.POP): m.d.comb += rport.addr.eq(stack_pointer) - m.d.comb += self.out_data_port.eq(rport.data) + m.d.comb += self.bus.data_out.eq(rport.data) m.d.comb += self.out_data_valid.eq(1) with m.If(stack_pointer == 0): @@ -161,32 +161,30 @@ class ParseStack(Elaboratable): m.next = "AT_LEAST_ONE_ITEM" m.d.sync += stack_pointer.eq(stack_pointer - 1) with m.Case(self.MULTIPOP): - with m.If(self.in_aux_valid == 1): - with m.If((self.bus.index_in - 1 ) > stack_pointer): - m.d.comb += self.internal_fault.eq(1) - m.next = "FAULTED" - with m.Elif(self.bus.index_in == stack_pointer): - m.d.sync += stack_pointer.eq(0) - m.next = "EMPTY" - with m.Elif(self.bus.index_in < stack_pointer): - m.d.sync += stack_pointer.eq(stack_pointer - self.bus.index_in) - m.next = "AT_LEAST_ONE_ITEM" + with m.If((self.bus.index_in - 1 ) > stack_pointer): + m.d.comb += self.bus.internal_fault.eq(1) + m.next = "FAULTED" + with m.Elif(self.bus.index_in == stack_pointer): + m.d.sync += stack_pointer.eq(0) + m.next = "EMPTY" + with m.Elif(self.bus.index_in < stack_pointer): + m.d.sync += stack_pointer.eq(stack_pointer - self.bus.index_in) + m.next = "AT_LEAST_ONE_ITEM" with m.Case(self.INTROSPECT): - with m.If(self.in_aux_valid): - with m.If(self.bus.index_in > stack_pointer): - m.d.comb += self.internal_fault.eq(1) - m.next = "FAULTED" - with m.Else(): - m.d.comb += rport.addr.eq(self.bus.index_in) - m.d.comb += self.out_data_port.eq(rport.data) - m.d.comb += self.out_data_valid.eq(1) - m.next = "AT_LEAST_ONE_ITEM" + with m.If(self.bus.index_in > stack_pointer): + m.d.comb += self.bus.internal_fault.eq(1) + m.next = "FAULTED" + with m.Else(): + m.d.comb += rport.addr.eq(self.bus.index_in) + m.d.comb += self.bus.data_out.eq(rport.data) + m.d.comb += self.out_data_valid.eq(1) + m.next = "AT_LEAST_ONE_ITEM" with m.Case(self.READ_TOS): m.d.comb += self.out_data_valid.eq(1) m.d.comb += rport.addr.eq(stack_pointer) - m.d.comb += self.out_data_port.eq(rport.data) + m.d.comb += self.bus.data_out.eq(rport.data) m.d.comb += self.out_data_valid.eq(1) m.next = "AT_LEAST_ONE_ITEM" @@ -196,7 +194,7 @@ class ParseStack(Elaboratable): m.next = "AT_LEAST_ONE_ITEM" with m.State("FAULTED"): - m.d.comb += self.internal_fault.eq(1) + m.d.comb += self.bus.internal_fault.eq(1) m.next = "FAULTED"