assert !buffer.redundant() : "Trying to generate a dram command for a redundant buffer!";
    public void addDRAMCommand(boolean read, int stage, int bytes,                               OffChipBuffer buffer, boolean presynched,                               boolean staticNet) {        assert bytes > 0 : "trying to generate a dram command of size 0";                       parent.setMapped();        String functName = "raw_streaming_dram" + (!staticNet ? "_gdn" : "") +             "_request_" +            (read ? "read" : "write") + (presynched ? "_presynched" : "");                //the name of the rotation struction we are using...        String rotStructName = buffer.getIdent(read);         // the args for the streaming dram command        // cachelines that are needed        assert bytes % RawChip.cacheLineBytes == 0 : "transfer size for dram must be a multiple of cache line size";        int cacheLines = bytes / RawChip.cacheLineBytes;                JExpression[] args = {                new JNameExpression(null, null, rotStructName + "->buffer"),                 new JIntLiteral(1),                new JIntLiteral(cacheLines) };                // the dram command        JMethodCallExpression call = new JMethodCallExpression(null, functName,                                                               args);        // send over the address        JFieldAccessExpression dynNetSend = new JFieldAccessExpression(null,                                                                       new JThisExpression(null), Util.CGNOINTVAR);        JNameExpression bufAccess = new JNameExpression(null, null,                 rotStructName + "->buffer");        JAssignmentExpression assExp = new JAssignmentExpression(null,                                                                 dynNetSend, bufAccess);        JAssignmentExpression rotExp = new JAssignmentExpression(null,                new JFieldAccessExpression(null, new JThisExpression(null), rotStructName),                new JNameExpression(null, null, rotStructName + "->next"));                        SpaceTimeBackend.println("Adding DRAM Command to " + parent + " "                                 + buffer + " " + cacheLines);        // add the statements to the appropriate stage        if (stage < 3) {            initBlock.addStatement(new JExpressionStatement(null, call, null));            initBlock                .addStatement(new JExpressionStatement(null, assExp, null));            initBlock.addStatement(new JExpressionStatement(null, rotExp, null));        } else {            steadyLoop.addStatement(new JExpressionStatement(null,                     (JMethodCallExpression)ObjectDeepCloner.deepCopy(call), null));            steadyLoop            .addStatement(new JExpressionStatement(null,                     (JAssignmentExpression)ObjectDeepCloner.deepCopy(assExp), null));            steadyLoop            .addStatement(new JExpressionStatement(null,                     (JAssignmentExpression)ObjectDeepCloner.deepCopy(rotExp), null));        }    }