def build_funct_dbg3():
    stmt = []
    stmt.append(ast.Template("$display(\"(%%0d) \", $time, msg);"))
    ifstmt = apply_if_verbosity(3, stmt)
    ablock = apply_action_block(ifstmt)
    funct = ast.Function("dbg3", 'Action', 'Fmt msg', ablock)
    return funct
示例#2
0
 def build_write_function(self, tid, ksz, vsz):
     TMP1 = "matchtable_write_%s(key, data);" % (self.name)
     name = "matchtable_write"
     type = "Action"
     params = "Bit#(%s) id, Bit#(%s) key, Bit#(%s) data" % (tid, ksz, vsz)
     stmt = []
     stmt.append(ast.Template(TMP1))
     action_block = ast.ActionBlock(stmt)
     funct = ast.Function(name, type, params, stmt=[action_block])
     return funct
示例#3
0
 def funct_compute_next_state(self, state):
     TMP1 = "DeparserState nextState = StateDeparseStart;"
     TMP2 = "return nextState;"
     stmt = []
     stmt.append(ast.Template(TMP1))
     stmt.append(ast.Template(TMP2))
     fname = "compute_next_state"
     rtype = "DeparserState"
     params = "DeparserState state"
     funct = ast.Function(fname, rtype, params, stmt)
     return funct
示例#4
0
 def build_read_function(self, tid, ksz, vsz):
     TMP1 = "let v <- matchtable_read_%s(key);" % (self.name)
     TMP2 = "return v;"
     name = "matchtable_read"
     type = "ActionValue#(Bit#(%s))" % (vsz)
     params = "Bit#(%s) id, Bit#(%s) key" % (tid, ksz)
     stmt = []
     stmt.append(ast.Template(TMP1))
     stmt.append(ast.Template(TMP2))
     action_block = ast.ActionValueBlock(stmt)
     funct = ast.Function(name, type, params, stmt=[action_block])
     return funct
 def build_funct_push_phv(self, phv):
     TMP1 = "MetadataT meta = defaultValue;"
     TMP2 = "meta.%(field)s = tagged Valid rg_tmp_%(field)s;"
     TMP3 = "meta_in_ff.enq(meta);"
     params = "ParserState ty"
     stmt = []
     stmt.append(ast.Template(TMP1))
     for _, p in phv:
         stmt.append(ast.Template(TMP2, {"field": p}))
     stmt.append(ast.Template(TMP3))
     ablock = apply_action_block(stmt)
     funct = ast.Function("push_phv", 'Action', params, ablock)
     return funct
def build_funct_verbosity():
    TMP1 = "Reg#(int) cf_verbosity <- mkConfigRegU;"
    stmt = []
    stmt.append(ast.Template(TMP1))
    rl_stmt = []
    rl_stmt.append(ast.Template("action"))
    rl_stmt.append(
        ast.Template("if (cf_verbosity > fromInteger(level)) begin"))
    rl_stmt.append(ast.Template("  $display(\"(%%d) \", $time, msg);"))
    rl_stmt.append(ast.Template("end"))
    rl_stmt.append(ast.Template("endaction"))
    funct = ast.Function("dbprint", 'Action', 'Integer level, Fmt msg',
                         rl_stmt)
    stmt.append(funct)
    return stmt
        def build_funct(name, parameters, transition):
            ab_stmt = []

            if len(parameters) == 0 or (len(parameters) == 1 and transition[0]['value'] == 'start'):
                for t in transition:
                    _, _, _stmt = build_transition(name, t)
                    ab_stmt += _stmt
            else:
                key_stmt = ast.Template("let v = {%s};" % (", ".join([p[1] for p in parameters])))
                ab_stmt.append(key_stmt)
                for idx, t in enumerate(transition):
                    _value, _mask, _stmt = build_transition(name, t)
                    expr = "(v & %s) == %s" % (_mask, _value) if _mask != None else "v == %s" % (_value)
                    if _value == 'start' or _value == 'default':
                        ab_stmt.append(ast.Else(_stmt))
                    else:
                        if idx == 0:
                            ab_stmt.append(ast.If(expr, _stmt))
                        else:
                            ab_stmt.append(ast.ElseIf(expr, _stmt))
            stmt = apply_action_block(ab_stmt)
            params = ', '.join(["Bit#(%s) %s" % (p[0], p[1]) for p in parameters])
            f = ast.Function("compute_next_state_%s"%(name), 'Action', params, stmt)
            return f