Esempio n. 1
0
    def generate_stateless_alu(self, alu_name, potential_operands):
        # Grab the stateless alu file name by using
        input_stream = FileStream(self.stateless_alu_filename_)
        lexer = aluLexer(input_stream)
        stream = CommonTokenStream(lexer)
        parser = aluParser(stream)
        tree = parser.alu()

        sketch_stateless_alu_visitor = \
            SketchStatelessAluVisitor(
                self.stateless_alu_filename_, self.sketch_name_ + '_' +
                alu_name, potential_operands, self.generate_mux,
                self.constant_arr_size_)
        sketch_stateless_alu_visitor.visit(tree)
        self.add_holes(sketch_stateless_alu_visitor.global_holes)
        self.stateless_alu_hole_arguments_ = [
            x for x in sorted(
                sketch_stateless_alu_visitor.stateless_alu_args
            )]

        self.num_stateless_muxes_ = \
            len(sketch_stateless_alu_visitor.packet_fields)

        return (sketch_stateless_alu_visitor.helper_function_strings +
                sketch_stateless_alu_visitor.main_function)
Esempio n. 2
0
    def generate_stateful_alu(self, alu_name):
        input_stream = FileStream(self.stateful_alu_filename_)
        lexer = aluLexer(input_stream)
        stream = CommonTokenStream(lexer)
        parser = aluParser(stream)
        tree = parser.alu()
        sketch_stateful_alu_visitor = SketchStatefulAluVisitor(
            self.sketch_name_ + '_' + alu_name, self.constant_arr_size_)
        sketch_stateful_alu_visitor.visit(tree)
        self.add_holes(sketch_stateful_alu_visitor.global_holes)
        self.stateful_alu_hole_arguments_ = [
            x for x in sorted(sketch_stateful_alu_visitor.alu_args)
        ]
        self.num_operands_to_stateful_alu_ = len(
            sketch_stateful_alu_visitor.packet_fields)
        self.num_state_slots_ = len(sketch_stateful_alu_visitor.state_vars)

        return (sketch_stateful_alu_visitor.helper_function_strings +
                sketch_stateful_alu_visitor.main_function)
    def generate_stateful_alu(self, alu_name):
        input_stream = FileStream(self.stateful_alu_filename_)
        lexer = aluLexer(input_stream)
        stream = CommonTokenStream(lexer)
        parser = aluParser(stream)
        tree = parser.alu()

        operand0 = 'ipv4.pkt_' + str(self.hole_assignments_.pop(
                   self.sketch_name_ + '_' + alu_name +
                   '_operand_mux_0_ctrl'))
        operand1 = 'ipv4.pkt_' + str(self.hole_assignments_.pop(
                   self.sketch_name_ + '_' + alu_name +
                   '_operand_mux_1_ctrl'))
        tofino_stateful_alu_visitor = TofinoStatefulAluVisitor(
            self.sketch_name_ + '_' + alu_name, self.constant_arr_,
            self.hole_assignments_,
            operand0,
            operand1)
        tofino_stateful_alu_visitor.visit(tree)
        # Ensure changes to hole_assignments made by TofinoStatefulAluVisitor
        # are reflected back in self.hole_assignments_
        self.hole_assignments_ = tofino_stateful_alu_visitor.hole_assignments

        return tofino_stateful_alu_visitor.template_args