def METHOD_NAME(sdfg):
    state = sdfg.add_state("compute")
    a = state.add_array("A_nested", (M, N), dtype, storage=dace.dtypes.StorageType.FPGA_Global)
    x = state.add_array("x_nested", (M, ), dtype, storage=dace.dtypes.StorageType.FPGA_Global)
    y_buffer = state.add_array("y_buffer", (N, ), dtype, transient=True, storage=dace.dtypes.StorageType.FPGA_Local)
    cols_entry, cols_exit = state.add_map("cols", {"m": "0:M"}, schedule=dace.ScheduleType.FPGA_Device)
    rows_entry, rows_exit = state.add_map("rows", {"n": "0:N"}, schedule=dace.ScheduleType.FPGA_Device)
    tasklet = state.add_tasklet("update", {"a", "x_in"}, {"update"}, "update = a * x_in")
    wcr_memlet = dace.memlet.Memlet.simple(y_buffer, "n", wcr_str="lambda a, b: a + b")
    state.add_memlet_path(a, cols_entry, rows_entry, tasklet, dst_conn="a", memlet=dace.memlet.Memlet.simple(a, "m, n"))
    state.add_memlet_path(x, cols_entry, rows_entry, tasklet, dst_conn="x_in", memlet=dace.memlet.Memlet.simple(x, "m"))
    state.add_memlet_path(tasklet, rows_exit, cols_exit, y_buffer, src_conn="update", memlet=wcr_memlet)
    return state