示例#1
0
void gen_soc_field(define_align_context_t& ctx, bool multidev, bool multireg, const soc_reg_field_t& field)
{
    if(field.desc.size() != 0)
    {
        ctx.add_raw("/* Field: " + field.name + "\n");
        fprint_description(ctx, "Description: " + field.desc + " */\n", " * ");
    }

    std::string prefix = g_soc_dev + "_" + g_soc_reg + "_" + g_soc_field;
    ctx.add("BP_" + prefix, to_str(field.first_bit));
    ctx.add("BM_" + prefix, "0x" + to_hex(field.bitmask()));

    for(size_t i = 0; i < field.value.size(); i++)
        ctx.add("BV_" + prefix + "__" + field.value[i].name, "0x" + to_hex(field.value[i].value));

    ctx.add("BF_" + prefix + "(v)", "(((v) << " + to_str(field.first_bit) + ") & 0x" + to_hex(field.bitmask()) + ")");

    if(field.value.size() > 0)
        ctx.add("BF_" + prefix + "_V(v)", "((BV_" + prefix + "__##v" + " << " + to_str(field.first_bit) + ") & 0x" + to_hex(field.bitmask()) + ")");
}
示例#2
0
void my_lua_create_field(soc_addr_t addr, const soc_reg_field_t& field, bool sct)
{
    lua_newtable(g_lua);

    lua_pushstring(g_lua, field.name.c_str());
    lua_setfield(g_lua, -2, "name");

    lua_pushunsigned(g_lua, addr);
    lua_setfield(g_lua, -2, "addr");

    lua_pushboolean(g_lua, sct);
    lua_setfield(g_lua, -2, "sct");

    lua_pushunsigned(g_lua, field.first_bit);
    lua_setfield(g_lua, -2, "first_bit");

    lua_pushunsigned(g_lua, field.last_bit);
    lua_setfield(g_lua, -2, "last_bit");

    lua_pushunsigned(g_lua, field.bitmask());
    lua_setfield(g_lua, -2, "bitmask");

    soc_word_t local_bitmask = field.bitmask() >> field.first_bit;
    lua_pushunsigned(g_lua, local_bitmask);
    lua_setfield(g_lua, -2, "local_bitmask");

    lua_pushunsigned(g_lua, addr);
    lua_pushunsigned(g_lua, field.first_bit);
    lua_pushunsigned(g_lua, local_bitmask);
    lua_pushcclosure(g_lua, my_lua_read_field, 3);
    lua_setfield(g_lua, -2, "read");

    lua_pushunsigned(g_lua, addr);
    lua_pushunsigned(g_lua, field.first_bit);
    lua_pushunsigned(g_lua, local_bitmask);
    lua_pushvalue(g_lua, -4);
    lua_pushboolean(g_lua, false);
    lua_pushcclosure(g_lua, my_lua_write_field, 5);
    lua_setfield(g_lua, -2, "write");

    if(sct)
    {
        lua_pushunsigned(g_lua, addr + 4);
        lua_pushunsigned(g_lua, field.first_bit);
        lua_pushunsigned(g_lua, local_bitmask);
        lua_pushvalue(g_lua, -4);
        lua_pushboolean(g_lua, true);
        lua_pushcclosure(g_lua, my_lua_write_field, 5);
        lua_setfield(g_lua, -2, "set");

        lua_pushunsigned(g_lua, addr + 8);
        lua_pushunsigned(g_lua, field.first_bit);
        lua_pushunsigned(g_lua, local_bitmask);
        lua_pushvalue(g_lua, -4);
        lua_pushboolean(g_lua, true);
        lua_pushcclosure(g_lua, my_lua_write_field, 5);
        lua_setfield(g_lua, -2, "clr");

        lua_pushunsigned(g_lua, addr + 12);
        lua_pushunsigned(g_lua, field.first_bit);
        lua_pushunsigned(g_lua, local_bitmask);
        lua_pushvalue(g_lua, -4);
        lua_pushboolean(g_lua, true);
        lua_pushcclosure(g_lua, my_lua_write_field, 5);
        lua_setfield(g_lua, -2, "tog");
    }

    for(size_t i = 0; i < field.value.size(); i++)
    {
        lua_pushunsigned(g_lua, field.value[i].value);
        lua_setfield(g_lua, -2, field.value[i].name.c_str());
    }
}