Esempio n. 1
0
File: 3789.c Progetto: Jing0/ACM
int main(){
	int n, i, k, h[7], m[7], s[7];
	scanf("%d",&n);
	for (k = 0;k < n; ++k) {
		memset(h, 0, sizeof(h));
		memset(m, 0, sizeof(m));
		memset(s, 0, sizeof(s));
		scanf("%d:%d:%d", &h[0], &m[0], &s[0]);
		d2b(h, h[0]);
		d2b(m, m[0]);
		d2b(s, s[0]);
		printf("%d ", k+1);
		for (i = 1;i < 7; ++i)
			printf("%d%d%d", h[i], m[i], s[i]);
		printf(" ");
		for (i = 1;i < 7; ++i)
			printf("%d", h[i]);
		for (i = 1;i < 7; ++i)
			printf("%d", m[i]);
		for (i = 1;i < 7; ++i)
			printf("%d", s[i]);
		printf("\n");
	}
	return 0;
}
Esempio n. 2
0
void create_CAM(int D,int W,int Rp,int Wp)
	{
	     int depth,width;   
	     int instance_no,row_bits;
	     int i,j,k;  
             char str[50];
	     FILE *fp_src;
	     depth=D;
	     width=W;
             sprintf(str,"cam_%d_%d_%d_%d.src.net",D,W,Rp,Wp);	
             fp_src=fopen(str,"w");
	     instance_no = 0;
      	     row_bits = ceil( (log(depth) / log(2)));

         //    fprintf(fp_src,"\n*.EQUATION \n*.SCALE METER \n*.MEGA \n.PARAM\n");
	     fprintf(fp_src,"\n*.GLOBAL vdd! \n+        gnd! \n\n*.PIN vdd! \n*+    gnd!\n");
             sprintf(str,"cam_%d_%d_%d_%d",D,W,Rp,Wp);	
             fprintf(fp_src,"\n\n.include ../netGen_CAM/buff.src.net");
             fprintf(fp_src,"\n\n.include ../netGen_CAM/precharge.src.net");
             fprintf(fp_src,"\n\n.include ../netGen_CAM/wdata_nodc.src.net");
             fprintf(fp_src,"\n\n.include ../netGen_CAM/%dr%dw_new.src.net",Rp,Wp);
             fprintf(fp_src,"\n\n.include ../netGen_CAM/decoder.src.net",row_bits);
             fprintf(fp_src,"\n\n.include ../netGen_CAM/nand2.src.net",row_bits);

             fprintf(fp_src,"\n\n\n.SUBCKT %s clk\n\t+",str);

/************************* PORT LIST *********************/
             for(i=1;i<=Wp;i++)
		{
		   for(j=0;j<row_bits;j++)
			{
			   fprintf(fp_src,"AW%d<%d> ",i,j);  //For address line
			}                    
			   fprintf(fp_src,"\n\t+");			
		}
             fprintf(fp_src,"\n+");
             for(j=1;j<=Wp;j++)
		{
	             fprintf(fp_src,"\tWREN%d",j); // For Write Enable
		}
             fprintf(fp_src,"\n\t+");
            
             for(i=0;i<width;i++)
		{
		   for(j=1;j<=Wp;j++)
		      {
			fprintf(fp_src," D%d<%d> ",j,i);   //For Input data to be written
		      }
             	   fprintf(fp_src,"\n\t+");
		}
             fprintf(fp_src,"\n\t+");
            
             for(i=0;i<depth;i++)
		{
		   for(j=1;j<=Rp;j++)
		      {
			fprintf(fp_src," ML_%d<%d> ",j,i);   //For output Match Lines
		      }
             	   fprintf(fp_src,"\n\t+");
		}

             fprintf(fp_src,"\n\t+");
             for(i=0;i<width;i++)
                {
                   for(j=1;j<=Rp;j++)
                      {
                        fprintf(fp_src," CW_%d<%d> ",j,i);   //For output Match Lines
                      }
                   fprintf(fp_src,"\n\t+");
                }


             fprintf(fp_src,"\n");

/************************* PIN INFO ********************/
             fprintf(fp_src,"\n*.PININFO clk:I ");
             for(i=1;i<=Wp;i++)
		{
                  fprintf(fp_src,"\n\t*.PININFO");
		   for(j=0;j<row_bits;j++)
			{
			   fprintf(fp_src,"AW%d<%d>:I ",i,j);  //For address line
//			   fprintf(fp_src," A%d<%d>:I ",i,j);  //For address line
			}                    
		}

             fprintf(fp_src,"\n\t*.PININFO ");
             for(j=1;j<=Wp;j++)
		{
	             fprintf(fp_src,"WREN%d:I\t",j); // For Write Enable
		}
            
             for(i=0;i<width;i++)
		{
                   fprintf(fp_src,"\n\t*.PININFO ");
		   for(j=1;j<=Wp;j++)
		      {
			fprintf(fp_src," D%d<%d>:I ",j,i);   //For Input data
		      }
		}

             for(i=0;i<width;i++)
		{
                   fprintf(fp_src,"\n\t*.PININFO ");
		   for(j=1;j<=Rp;j++)
		      {
			fprintf(fp_src," ML_%d<%d>:O ",j,i);   //For Input data
		      }
		}

             for(i=0;i<width;i++)
                {
                   fprintf(fp_src,"\n\t*.PININFO ");
                   for(j=1;j<=Rp;j++)
                      {
                        fprintf(fp_src," CW_%d<%d>:I ",j,i);   //For output Match Lines
                      }
                }

                fprintf(fp_src,"\n");

/*************** bitcell placement *******************/
	     for(i=0;i<depth;i++)
	     {
                for(j=0;j<width;j++)
	        {       
                  //  if(i<=1 || j==0) {
		   	fprintf(fp_src,"XI%d ",instance_no++);
	                for(k=1;k <= Wp;k++)
	                {
	  		   fprintf(fp_src,"w%d_%d ",k,i);               
	                }
                        for(k=1;k <= Rp;k++)
                        {
                           fprintf(fp_src,"ML_%d<%d> ",k,i);
                        }
			for(k=1;k <= Rp+Wp;k++)
	                {
	       		    fprintf(fp_src,"b%d_%d bb%d_%d ",k,j,k,j);
			}
		     fprintf(fp_src,"/ %dr%dw_new\n",Rp,Wp);
                  //  }
                }
             }

/***************** Precharge Unit ************************/
             for(i=0;i<depth;i++)
		{
		   for(j=1;j<=Wp;j++)
			{
			   if(width>32)
			   {
			      fprintf(fp_src,"\nXI%d clk ML_%d<%d> / precharge72",instance_no++,j,i);	
			   }
			   else
			   {
			      fprintf(fp_src,"\nXI%d clk ML_%d<%d> / precharge",instance_no++,j,i);	
			   }
			}
		}

/*********************** Write CKT ********************/
             for(i=0;i<width;i++)
		{
		   for(j=1;j<=Wp;j++)
			{
			   fprintf(fp_src,"\nXI%d D%d<%d> Db%d_%d / inverter",instance_no++,j,i,j,i); 	
			   fprintf(fp_src,"\nXI%d b%d_%d  clk Db%d_%d WREN%d / wdata_nodc",instance_no++,j,i,j,i,j);
			   fprintf(fp_src,"\nXI%d bb%d_%d  clk D%d<%d> WREN%d / wdata_nodc",instance_no++,j,i,j,i,j);	
			}
		}

/************************* Input Buffer for the Address lines ***************************/
 	    for(j=1;j<=Wp;j++)
	     {
                for(i=0;i<row_bits;i++)
		  {
		  fprintf(fp_src,"\nXI%d AW%d<%d> AW%d_%d AWb%d_%d / buff3",instance_no++,j,i,j,i,j,i);
		  }
	     }	
/*********************** WL driver (buffer) ***********************/
             for(i=0;i<depth;i++)
		{
		   for(j=1;j<=Wp;j++)
			{
			   fprintf(fp_src,"\nXI%d w%d_%d w%d_%d_in / buff",instance_no++,j,i,j,i);	
			}
		}
	   for(k=1;k<=Wp;k++)
		{
		   for(i=0;i<depth;i++)
			{
                         d2b(i,row_bits);
			 fprintf(fp_src,"\nXI%d clk ",instance_no++);

			 for(j=row_bits-1;j>=0;j--)
			    {
			      if(bit_array[j]==1) fprintf(fp_src,"AW%d_%d ",k,j);
			      else fprintf(fp_src,"AWb%d_%d ",k,j);
			    }
			  fprintf(fp_src," w%d_%d_in / decode%d",k,i,row_bits);
			  	
			}
		}
/************************* SL driver **************************/
	for(i=0; i<width ; i++)
	{
		for(j=Wp+1;j<=Wp+Rp;j++)
		{
			fprintf(fp_src,"\nXI%d dslb%d_%d b%d_%d / inverter_4",instance_no++,j-Wp,i,j,i);
			fprintf(fp_src,"\nXI%d dsl%d_%d bb%d_%d / inverter_4",instance_no++,j-Wp,i,j,i);
		}
	}

        for(i=0; i<width ; i++)
        {
                for(j=1;j<=Rp;j++)
                {
			fprintf(fp_src,"\nXI%d CW_%d<%d> CWi_%d_%d / inverter",instance_no++,j,i,j,i);
		}
	}

/************************ SL NAND2 ******************************/
	for(i=0; i<width ; i++)
        {
                for(j=1;j<=Rp;j++)
                {
			fprintf(fp_src,"\nXI%d CW_%d<%d> clk dsl%d_%d / nand2",instance_no++,j,i,j,i);
			fprintf(fp_src,"\nXI%d CWi_%d_%d clk dslb%d_%d / nand2",instance_no++,j,i,j,i);
		}
	}
	  fprintf(fp_src,"\n\n.ENDS\n\n");
      }//create_SRAM
Esempio n. 3
0
/*Main Method */
void main(int argc, char*argv[]){
    
    int addition = 0;
    int subtraction = 0;
    int mult = 0;
    char * firstArg;
    char * secArg;
    char * firstForm;
    char * secForm;
    int negFirst = 0;
    int negSec = 0;
    int firstFinal = 0;
    int secFinal = 0;
    char * firstBin;
    char * secBin;

    /*check arguments*/
    if (argc != 5){
      fprintf(stderr, "Argc is off---should be 5\n");
      return;
    }
   
   /*Check for addition and subtraction*/ 
    char sign = *argv[1];
    switch (sign){
      case '+': addition = 1;
                break;
      case '-': subtraction = 1;
                break;
      case '*': mult = 1;
                break;
      default: fprintf(stderr, "Only addition, subtraction and multiplication allowed\n");
    }

    firstArg = argv[2];
    secArg = argv[3];
    firstForm =  firstArg;
    secForm = secArg;

    /*check for negatives*/
    if(firstArg[0] == '-'){
      negFirst = 1;
      firstForm+=1;
    }
    if(secArg[0] == '-'){
      negSec = 1;
      secForm+=1;
    }

   switch(firstForm[0])
   {
     case 'd': /*decimal to binary*/
               firstForm++;
               firstFinal = atoi(firstForm);
               firstBin = (char*) malloc(3*(strlen(firstForm)));
               d2b(firstBin, firstFinal);
               break;
     case 'o': /*octal to binary */
               firstForm++;
               firstBin = (char*) malloc(3*(strlen(firstForm)));
               o2b(firstBin, firstForm);
               break;
     case 'b': /*no conversion necessary */
               firstForm++;
               firstBin = firstForm;
               break;
     case 'x': /*hexadecimal to binary */
               firstForm++;
               firstBin = (char*) malloc(4*(strlen(firstForm)));
               x2b(firstBin, firstForm);
               break;
     default: fprintf(stderr, "not a valid conversion base option\n");
              return;
   }

    switch(secForm[0])
   {
     case 'd': /*decimal to binary*/
               secForm++;
               secFinal = atoi(secForm);
               secBin = (char*) malloc(3*(strlen(secForm)));
               d2b(secBin, secFinal);
               break;
     case 'o': /*octal to binary */
               secForm++;
               secBin = (char*) malloc(3*(strlen(secForm)));
               o2b(secBin, secForm);
               break;
     case 'b': /*no conversion necessary */
               secForm++;
               secBin = secForm;
               break;
     case 'x': /*hexadecimal to binary */
               secForm++;
               secBin = (char*) malloc(4*(strlen(secForm)));
               x2b(secBin, secForm);
               break;
     default: fprintf(stderr, "not a valid conversion base option\n");
              return;
   }
   
/*
  int diff;
  diff = abs(strlen(firstBin) - strlen(secBin));
  char* shorter;
  char* shorterBin;
  char* longerBin;
  * if strings are different lengths,
   *  we must do some adjusting*
  if(diff > 0){
    if(strlen(firstBin) > strlen(secBin)){
      longerBin = firstBin;
      shorterBin = secBin;
      shorter = (char*) malloc(strlen(shorterBin));
    }
    else{
      longerBin = secBin;
      shorterBin = firstBin;
      shorter = (char*) malloc(strlen(shorterBin));
    }
    * add zeros to the front of the shorter binary string 
    * so they can be compared *
    strcpy(shorter, "0");
    int k;
    for(k=0; k<diff-1; k++){
      strcat(shorter, "0");
    }
    strcat(shorter, shorterBin);
  }
  else{
    longerBin = firstBin;
    shorter = secBin;
  }

  if (addition){
    binAdd(sum, longerBin, shorter);
    sum = reverse(sum);
    printf("binSum: %s\n", sum);
  }
  if (subtraction){
    binSub(sum, longerBin, shorter);
    printf("Subtraction sum: %s\n", sum); 
  }
*/

  /*decimal aritmatic*/
  int decAns = 0;
  if (addition){
    if(negFirst){
      decAns += -1*b2d(firstBin);
    }else{
      decAns += b2d(firstBin);
    }
    if(negSec){
      decAns += -1*b2d(secBin);
    }else{
      decAns += b2d(secBin);
    }
  }else{
  if (subtraction){
    if(negFirst){
      int addme = -1*b2d(firstBin);
      decAns = decAns + addme;
      
    }else{
      decAns += b2d(firstBin);
    }
    if(negSec){
      int addme = -1*b2d(secBin);
      decAns = decAns - addme;
    }else{
      decAns -= b2d(secBin);
    }
  }else{
    if (mult){
     printf("need to complete multiplication"); 
    }
  }
  }
/*convert to final output form*/
  char * ans = (char*) malloc(2*(strlen(firstBin)));
  char * temp = (char*) malloc(2*(strlen(firstBin)));
  char output = *argv[4];
  switch (output){
    case 'd': /*no conversion necessary*/
              printf("Answer: %d\n", decAns);
              break;
    case 'o': /*binary to octal*/
              d2b(temp, decAns);
              b2o(ans, temp);
              printf("Answer: %s\n", ans);
              break;
    case 'x': /*binary to hexadecimal*/
              d2b(temp, decAns);
              b2x(ans, temp);
              printf("Answer: %s\n", ans);
              break;
    case 'b': /*decimal to binary*/
              d2b(ans, decAns);
              printf("Answer: %s\n", ans);
              break;
    default: fprintf(stderr, "not a valid conversion output");
  }

}
Esempio n. 4
0
g_ddfmt(char *buf, double *dd0, int ndig, size_t bufsize)
#endif
{
	FPI fpi;
	char *b, *s, *se;
	ULong *L, bits0[4], *bits, *zx;
	int bx, by, decpt, ex, ey, i, j, mode;
	Bigint *x, *y, *z;
	U *dd, ddx[2];
#ifdef Honor_FLT_ROUNDS /*{{*/
	int Rounding;
#ifdef Trust_FLT_ROUNDS /*{{ only define this if FLT_ROUNDS really works! */
	Rounding = Flt_Rounds;
#else /*}{*/
	Rounding = 1;
	switch(fegetround()) {
	  case FE_TOWARDZERO:	Rounding = 0; break;
	  case FE_UPWARD:	Rounding = 2; break;
	  case FE_DOWNWARD:	Rounding = 3;
	  }
#endif /*}}*/
#else /*}{*/
#define Rounding FPI_Round_near
#endif /*}}*/

	if (bufsize < 10 || bufsize < ndig + 8)
		return 0;

	dd = (U*)dd0;
	L = dd->L;
	if ((L[_0] & 0x7ff00000L) == 0x7ff00000L) {
		/* Infinity or NaN */
		if (L[_0] & 0xfffff || L[_1]) {
 nanret:
			return strcp(buf, "NaN");
			}
		if ((L[2+_0] & 0x7ff00000) == 0x7ff00000) {
			if (L[2+_0] & 0xfffff || L[2+_1])
				goto nanret;
			if ((L[_0] ^ L[2+_0]) & 0x80000000L)
				goto nanret;	/* Infinity - Infinity */
			}
 infret:
		b = buf;
		if (L[_0] & 0x80000000L)
			*b++ = '-';
		return strcp(b, "Infinity");
		}
	if ((L[2+_0] & 0x7ff00000) == 0x7ff00000) {
		L += 2;
		if (L[_0] & 0xfffff || L[_1])
			goto nanret;
		goto infret;
		}
	if (dval(&dd[0]) + dval(&dd[1]) == 0.) {
		b = buf;
#ifndef IGNORE_ZERO_SIGN
		if (L[_0] & L[2+_0] & 0x80000000L)
			*b++ = '-';
#endif
		*b++ = '0';
		*b = 0;
		return b;
		}
	if ((L[_0] & 0x7ff00000L) < (L[2+_0] & 0x7ff00000L)) {
		dval(&ddx[1]) = dval(&dd[0]);
		dval(&ddx[0]) = dval(&dd[1]);
		dd = ddx;
		L = dd->L;
		}
	z = d2b(dval(&dd[0]), &ex, &bx);
	if (dval(&dd[1]) == 0.)
		goto no_y;
	x = z;
	y = d2b(dval(&dd[1]), &ey, &by);
	if ( (i = ex - ey) !=0) {
		if (i > 0) {
			x = lshift(x, i);
			ex = ey;
			}
		else
			y = lshift(y, -i);
		}
	if ((L[_0] ^ L[2+_0]) & 0x80000000L) {
		z = diff(x, y);
		if (L[_0] & 0x80000000L)
			z->sign = 1 - z->sign;
		}
	else {
		z = sum(x, y);
		if (L[_0] & 0x80000000L)
			z->sign = 1;
		}
	Bfree(x);
	Bfree(y);
 no_y:
	bits = zx = z->x;
	for(i = 0; !*zx; zx++)
		i += 32;
	i += lo0bits(zx);
	if (i) {
		rshift(z, i);
		ex += i;
		}
	fpi.nbits = z->wds * 32 - hi0bits(z->x[j = z->wds-1]);
	if (fpi.nbits < 106) {
		fpi.nbits = 106;
		if (j < 3) {
			for(i = 0; i <= j; i++)
				bits0[i] = bits[i];
			while(i < 4)
				bits0[i++] = 0;
			bits = bits0;
			}
		}
	mode = 2;
	if (ndig <= 0) {
		if (bufsize < (int)(fpi.nbits * .301029995664) + 10) {
			Bfree(z);
			return 0;
			}
		mode = 0;
		}
	fpi.emin = 1-1023-53+1;
	fpi.emax = 2046-1023-106+1;
	fpi.rounding = Rounding;
	fpi.sudden_underflow = 0;
	i = STRTOG_Normal;
	s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
	b = g__fmt(buf, s, se, decpt, z->sign, bufsize);
	Bfree(z);
	return b;
	}
Esempio n. 5
0
void create_SRAM(int D,int W,int Rp,int Wp,int DC)
	{
	     int depth,width;   
	     int instance_no,row_bits;
	     int i,j,k;  
             char str[50];
	     FILE *fp_src;
	     depth=D;
	     width=W;
             sprintf(str,"mem_%d_%d_%d_%d.src.net",D,W,Rp,Wp);	
             fp_src=fopen(str,"w");
	     instance_no = 0;
      	     row_bits = ceil( (log(depth) / log(2)));

         //    fprintf(fp_src,"\n*.EQUATION \n*.SCALE METER \n*.MEGA \n.PARAM\n");
	     fprintf(fp_src,"\n*.GLOBAL vdd! \n+        gnd! \n\n*.PIN vdd! \n*+    gnd!\n");
             sprintf(str,"mem_%d_%d_%d_%d",D,W,Rp,Wp);	
             fprintf(fp_src,"\n\n.include ../netGen_SRAM/buff.src.net");
             fprintf(fp_src,"\n\n.include ../netGen_SRAM/precharge.src.net");
             fprintf(fp_src,"\n\n.include ../netGen_SRAM/sense_amp.src.net");
             fprintf(fp_src,"\n\n.include ../netGen_SRAM/wdata_nodc.src.net");
             fprintf(fp_src,"\n\n.include ../netGen_SRAM/%dr%dw_new.src.net",Rp,Wp);
             fprintf(fp_src,"\n\n.include ../netGen_SRAM/decoder.src.net",row_bits);

             fprintf(fp_src,"\n\n\n.SUBCKT %s clk\n\t+",str);

/************************* PORT LIST *********************/
             for(i=1;i<=Rp+Wp;i++)
		{
		   for(j=0;j<row_bits;j++)
			{
			   if(i<=Rp) fprintf(fp_src,"AR%d<%d> ",i,j);  //For address line
			   else fprintf(fp_src,"AW%d<%d> ",i-Rp,j);  //For address line
			}                    
			   fprintf(fp_src,"\n\t+");			
		}
             for(i=1;i<=Rp;i++)
		{
	             fprintf(fp_src,"SE%d\t",i);   //For Sense Enable
		}
             fprintf(fp_src,"\n+");
             for(j=1;j<=Wp;j++)
		{
	             fprintf(fp_src,"\tWREN%d",j); // For Write Enable
		}
             fprintf(fp_src,"\n\t+");
            
             for(i=0;i<width;i++)
		{
		   for(j=1;j<=Wp;j++)
		      {
			fprintf(fp_src," D%d<%d> ",j,i,j,i);   //For Input data
		      }
             	   fprintf(fp_src,"\n\t+");
		}
             fprintf(fp_src,"\n\t+");
            
             for(i=0;i<width;i++)
		{
		   for(j=1;j<=Rp;j++)
		      {
			fprintf(fp_src," op_%d<%d> ",j,i,j,i);   //For Input data
		      }
             	   fprintf(fp_src,"\n\t+");
		}

             fprintf(fp_src,"\n");

/************************* PIN INFO ********************/
             fprintf(fp_src,"\n*.PININFO clk:I ");
             for(i=1;i<=Rp+Wp;i++)
		{
                  fprintf(fp_src,"\n\t*.PININFO");
		   for(j=0;j<row_bits;j++)
			{
			   if(i<=Rp) fprintf(fp_src,"AR%d<%d>:I ",i,j);  //For address line
			   else fprintf(fp_src,"AW%d<%d>:I ",i-Rp,j);  //For address line
//			   fprintf(fp_src," A%d<%d>:I ",i,j);  //For address line
			}                    
		}

   	     fprintf(fp_src,"\n\t*.PININFO ");			
             for(i=1;i<=Rp;i++)
		{
	             fprintf(fp_src,"SE%d:I\t",i);   //For Sense Enable
		}

             fprintf(fp_src,"\n\t*.PININFO ");
             for(j=1;j<=Wp;j++)
		{
	             fprintf(fp_src,"WREN%d:I\t",j); // For Write Enable
		}
            
             for(i=0;i<width;i++)
		{
                   fprintf(fp_src,"\n\t*.PININFO ");
		   for(j=1;j<=Wp;j++)
		      {
			fprintf(fp_src," D%d<%d>:I ",j,i);   //For Input data
		      }
		}

             for(i=0;i<width;i++)
		{
                   fprintf(fp_src,"\n\t*.PININFO ");
		   for(j=1;j<=Rp;j++)
		      {
			fprintf(fp_src," op_%d<%d>:O ",j,i);   //For Input data
		      }
		}


                fprintf(fp_src,"\n");

/*************** bitcell placement *******************/
	     for(i=0;i<depth/DC;i++)
	     {
                for(j=0;j<width*DC;j++)
	        {       
                  //  if(i<=1 || j==0) {
		   	fprintf(fp_src,"XI%d ",instance_no++);
	                for(k=1;k <= Rp+Wp;k++)
	                {
	  		   fprintf(fp_src,"w%d_%d ",k,i);               
	                }
			for(k=1;k <= Rp+Wp;k++)
	                {
	       		    fprintf(fp_src,"b%d_%d bb%d_%d ",k,j,k,j);
			}
		     fprintf(fp_src,"/ %dr%dw_new\n",Rp,Wp);
                  //  }
                }
             }

/***************** Precharge Unit ************************/
             for(i=0;i<width*DC;i++)
		{
		   for(j=1;j<=Rp;j++)
			{
			   if(depth/DC>32)
			   {
			      fprintf(fp_src,"\nXI%d clk b%d_%d / precharge72",instance_no++,j,i);	
			      fprintf(fp_src,"\nXI%d clk bb%d_%d / precharge72",instance_no++,j,i);	
			   }
			   else
			   {
			      fprintf(fp_src,"\nXI%d clk b%d_%d / precharge",instance_no++,j,i);	
			      fprintf(fp_src,"\nXI%d clk bb%d_%d / precharge",instance_no++,j,i);	  
			   }
			}
		}

/***********************Column Decoder and Sense Amplifier ********************/
             if(DC==2)
 		{
             for(i=0;i<width*DC;i=i+2)
		{
		   for(j=1;j<=Rp;j++)
			{
	  	         fprintf(fp_src,"\nXI%d AR%d_%d b%d_%d b%d_%d outb%d_%d / colmux_2",instance_no++,j,row_bits-1,j,i,j,i+1,j,i/2);		
	  	         fprintf(fp_src,"\nXI%d AR%d_%d bb%d_%d bb%d_%d outbb%d_%d / colmux_2",instance_no++,j,row_bits-1,j,i,j,i+1,j,i/2);	
			}
		}
		}
	     else if(DC==4)
		{
                for(i=0;i<width*DC;i=i+4)
		 {
		    for(j=1;j<=Rp;j++)
			{
	  	         fprintf(fp_src,"\nXI%d AR%d_%d b%d_%d b%d_%d outr1_b%d_%d / colmux_2",instance_no++,j,row_bits-2,j,i,j,i+1,j,i/DC);			
	  	         fprintf(fp_src,"\nXI%d AR%d_%d b%d_%d b%d_%d outr2_b%d_%d / colmux_2",instance_no++,j,row_bits-2,j,i+2,j,i+3,j,i/DC);			
	  	         fprintf(fp_src,"\nXI%d AR%d_%d outr1_b%d_%d outr2_b%d_%d outb%d_%d / colmux_2",instance_no++,j,row_bits-1,j,i/DC,j,i/DC,j,i/DC);			

	  	         fprintf(fp_src,"\nXI%d AR%d_%d bb%d_%d bb%d_%d outr1_bb%d_%d / colmux_2",instance_no++,j,row_bits-2,j,i,j,i+1,j,i/DC);			
	  	         fprintf(fp_src,"\nXI%d AR%d_%d bb%d_%d bb%d_%d outr2_bb%d_%d / colmux_2",instance_no++,j,row_bits-2,j,i+2,j,i+3,j,i/DC);			
	  	         fprintf(fp_src,"\nXI%d AR%d_%d outr1_bb%d_%d outr2_bb%d_%d outbb%d_%d / colmux_2",instance_no++,j,row_bits-1,j,i/DC,j,i/DC,j,i/DC);			
			}
		 }
		}

             for(i=0;i<width;i++)
		{
		   for(j=1;j<=Rp;j++)
			{
	             if(DC==1){	             
   		      fprintf(fp_src,"\nXI%d b%d_%d bb%d_%d SE%d / sense_amp",instance_no++,j,i,j,i,j);	
		      fprintf(fp_src,"\nXI%d b%d_%d op_%d<%d> / inverter",instance_no++,j,i,j,i);
			}
		     else{	
   		      fprintf(fp_src,"\nXI%d outb%d_%d outbb%d_%d SE%d / sense_amp",instance_no++,j,i,j,i,j);			     
		      fprintf(fp_src,"\nXI%d outb%d_%d op_%d<%d> / inverter",instance_no++,j,i,j,i);
			 }
		}
             }

/*********************** Write CKT ********************/
             if(DC==1)
	     {
             for(i=0;i<width*DC;i++)
		{
		   for(j=Rp+1;j<=Rp+Wp;j++)
			{
			   fprintf(fp_src,"\nXI%d D%d<%d> Db%d_%d / inverter",instance_no++,j-Rp,i,j-Rp,i); 	
			   fprintf(fp_src,"\nXI%d b%d_%d  clk Db%d_%d WREN%d / wdata_nodc",instance_no++,j,i,j-Rp,i,j-Rp);
			   fprintf(fp_src,"\nXI%d bb%d_%d  clk D%d<%d> WREN%d / wdata_nodc",instance_no++,j,i,j-Rp,i,j-Rp);	
			}
		}
	    }
	    else if(DC==2)
	    {
             for(i=0;i<width*DC;i=i+2)
		{
		   for(j=Rp+1;j<=Rp+Wp;j++)
			{
			   fprintf(fp_src,"\nXI%d D%d<%d> Db%d_%d / inverter",instance_no++,j-Rp,i/2,j-Rp,i);
			   fprintf(fp_src,"\nXI%d D%d<%d> Db%d_%d / inverter",instance_no++,j-Rp,i/2,j-Rp,i+1); 	 	
			   fprintf(fp_src,"\nXI%d b%d_%d  clk Db%d_%d WREN%d AW%d_%d / wdata_dc",instance_no++,j,i,j-Rp,i,j-Rp,j-Rp,row_bits-1);
			   fprintf(fp_src,"\nXI%d bb%d_%d  clk D%d<%d> WREN%d AW%d_%d / wdata_dc",instance_no++,j,i,j-Rp,i/2,j-Rp,j-Rp,row_bits-1);	
			   fprintf(fp_src,"\nXI%d b%d_%d  clk Db%d_%d WREN%d AWb%d_%d / wdata_dc",instance_no++,j,i+1,j-Rp,i+1,j-Rp,j-Rp,row_bits-1);
			   fprintf(fp_src,"\nXI%d bb%d_%d clk D%d<%d> WREN%d AWb%d_%d / wdata_dc",instance_no++,j,i+1,j-Rp,i/2,j-Rp,j-Rp,row_bits-1);	
			}		 
		}
	    }	
	   else if(DC==4)
	    {
             for(i=0;i<width*DC;i=i+4)
		{
		   for(j=Rp+1;j<=Rp+Wp;j++)
			{
			   fprintf(fp_src,"\nXI%d D%d<%d> Db%d_%d / inverter",instance_no++,j-Rp,i/DC,j-Rp,i/DC);
			   fprintf(fp_src,"\nXI%d b%d_%d  clk Db%d_%d WREN%d AW%d_%d AW%d_%d / wdata_dc4",instance_no++,j,i,j-Rp,i/DC,j-Rp,j-Rp,row_bits-2,j-Rp,row_bits-1);
			   fprintf(fp_src,"\nXI%d bb%d_%d  clk D%d<%d> WREN%d AW%d_%d AW%d_%d / wdata_dc4",instance_no++,j,i,j-Rp,i/DC,j-Rp,j-Rp,row_bits-2,j-Rp,row_bits-1);	
			   fprintf(fp_src,"\nXI%d b%d_%d  clk Db%d_%d WREN%d AWb%d_%d AW%d_%d / wdata_dc4",instance_no++,j,i+1,j-Rp,i/DC,j-Rp,j-Rp,row_bits-2,j-Rp,row_bits-1);
			   fprintf(fp_src,"\nXI%d bb%d_%d clk D%d<%d> WREN%d AWb%d_%d AW%d_%d / wdata_dc4",instance_no++,j,i+1,j-Rp,i/DC,j-Rp,j-Rp,row_bits-2,j-Rp,row_bits-1);	
			   fprintf(fp_src,"\nXI%d b%d_%d  clk Db%d_%d WREN%d AW%d_%d AWb%d_%d / wdata_dc4",instance_no++,j,i+2,j-Rp,i/DC,j-Rp,j-Rp,row_bits-2,j-Rp,row_bits-1);
			   fprintf(fp_src,"\nXI%d bb%d_%d clk D%d<%d> WREN%d AW%d_%d AWb%d_%d / wdata_dc4",instance_no++,j,i+2,j-Rp,i/DC,j-Rp,j-Rp,row_bits-2,j-Rp,row_bits-1);	
			   fprintf(fp_src,"\nXI%d b%d_%d  clk Db%d_%d WREN%d AWb%d_%d AWb%d_%d / wdata_dc4",instance_no++,j,i+3,j-Rp,i/DC,j-Rp,j-Rp,row_bits-2,j-Rp,row_bits-1);
			   fprintf(fp_src,"\nXI%d bb%d_%d clk D%d<%d> WREN%d AWb%d_%d AWb%d_%d / wdata_dc4",instance_no++,j,i+3,j-Rp,i/DC,j-Rp,j-Rp,row_bits-2,j-Rp,row_bits-1);	
			}		 
		}
	    }	

/************************* Input Buffer for the Address lines ***************************/
            if(DC==2){
 	    for(j=1;j<=Rp+Wp;j++)
	     {
                for(i=0;i<row_bits-1;i++)
		  {
		  if(j<=Rp) fprintf(fp_src,"\nXI%d AR%d<%d> AR%d_%d ARb%d_%d / buff3",instance_no++,j,i,j,i,j,i);
		  else fprintf(fp_src,"\nXI%d AW%d<%d> AW%d_%d AWb%d_%d / buff3",instance_no++,j-Rp,i,j-Rp,i,j-Rp,i);
		  }
	     }	
	    }
	    else if(DC==4){
 	    for(j=1;j<=Rp+Wp;j++)
	     {
                for(i=0;i<row_bits-2;i++)
		  {
		  if(j<=Rp) fprintf(fp_src,"\nXI%d AR%d<%d> AR%d_%d ARb%d_%d / buff3",instance_no++,j,i,j,i,j,i);
		  else fprintf(fp_src,"\nXI%d AW%d<%d> AW%d_%d AWb%d_%d / buff3",instance_no++,j-Rp,i,j-Rp,i,j-Rp,i);
		  }
	     }	
	    }
	    else{
 	    for(j=1;j<=Rp+Wp;j++)
	     {
                for(i=0;i<row_bits;i++)
		  {
		  if(j<=Rp) fprintf(fp_src,"\nXI%d AR%d<%d> AR%d_%d ARb%d_%d / buff3",instance_no++,j,i,j,i,j,i);
		  else fprintf(fp_src,"\nXI%d AW%d<%d> AW%d_%d AWb%d_%d / buff3",instance_no++,j-Rp,i,j-Rp,i,j-Rp,i);
		  }
	     }	
	    }
/************************ Input Buffer for the column decoder Address lines *********************/
            if(DC==2) {
 	    for(j=1;j<=Rp;j++)
	     {
		  fprintf(fp_src,"\nXI%d AR%d<%d> AR%d_%d / buff2",instance_no++,j,row_bits-1,j,row_bits-1);
	     }
	    }	
	    else if(DC==4){
 	    for(j=1;j<=Rp;j++)
	     {
		  fprintf(fp_src,"\nXI%d AR%d<%d> AR%d_%d / buff2",instance_no++,j,row_bits-1,j,row_bits-1);
		  fprintf(fp_src,"\nXI%d AR%d<%d> AR%d_%d / buff2",instance_no++,j,row_bits-2,j,row_bits-2);
	     }
	    }	

/********************* Input Buffer for the column decoder address line for write ckt *********/
	    if(DC==2) {
 	    for(j=Rp+1;j<=Rp+Wp;j++)
	     {
		  fprintf(fp_src,"\nXI%d AW%d<%d> AW%d_%d AWb%d_%d / buff3",instance_no++,j-Rp,row_bits-1,j-Rp,row_bits-1,j-Rp,row_bits-1);
	     }
	    }
            else if(DC==4) {
 	    for(j=Rp+1;j<=Rp+Wp;j++)
	     {
		  fprintf(fp_src,"\nXI%d AW%d<%d> AW%d_%d AWb%d_%d / buff3",instance_no++,j-Rp,row_bits-1,j-Rp,row_bits-1,j-Rp,row_bits-1);
		  fprintf(fp_src,"\nXI%d AW%d<%d> AW%d_%d AWb%d_%d / buff3",instance_no++,j-Rp,row_bits-2,j-Rp,row_bits-2,j-Rp,row_bits-2);
	     }
	    }

/*********************** WL driver (buffer) ***********************/
             for(i=0;i<depth/DC;i++)
		{
		   for(j=1;j<=Rp+Wp;j++)
			{
			   fprintf(fp_src,"\nXI%d w%d_%d w%d_%d_in / buff",instance_no++,j,i,j,i);	
			}
		}
	   for(k=1;k<=Rp+Wp;k++)
		{
		   for(i=0;i<depth/DC;i++)
			{
                         d2b(i,row_bits);
			 fprintf(fp_src,"\nXI%d clk ",instance_no++);
                         if(DC==1){
			 for(j=row_bits-1;j>=0;j--)
			    {
			      if(bit_array[j]==1) if(k<=Rp) fprintf(fp_src,"AR%d_%d ",k,j);			 
						  else  fprintf(fp_src,"AW%d_%d ",k-Rp,j);
			      else if(k<=Rp) fprintf(fp_src,"ARb%d_%d ",k,j);			 
				   else  fprintf(fp_src,"AWb%d_%d ",k-Rp,j);
			    }
			  fprintf(fp_src," w%d_%d_in / decode%d",k,i,row_bits);
			  }	
                         else if(DC==2){
			 for(j=row_bits-2;j>=0;j--)
			    {
			      if(bit_array[j]==1) if(k<=Rp) fprintf(fp_src,"AR%d_%d ",k,j);			 
						  else  fprintf(fp_src,"AW%d_%d ",k-Rp,j);
			      else if(k<=Rp) fprintf(fp_src,"ARb%d_%d ",k,j);			 
				   else  fprintf(fp_src,"AWb%d_%d ",k-Rp,j);
			    }
			  fprintf(fp_src," w%d_%d_in / decode%d",k,i,row_bits-1);
			 }
			else if(DC==4)
			{
			 for(j=row_bits-3;j>=0;j--)
			    {
			      if(bit_array[j]==1) if(k<=Rp) fprintf(fp_src,"AR%d_%d ",k,j);			 
						  else  fprintf(fp_src,"AW%d_%d ",k-Rp,j);
			      else if(k<=Rp) fprintf(fp_src,"ARb%d_%d ",k,j);			 
				   else  fprintf(fp_src,"AWb%d_%d ",k-Rp,j);
			    }
			  fprintf(fp_src," w%d_%d_in / decode%d",k,i,row_bits-2);
			 }
			}
		}
	  fprintf(fp_src,"\n\n.ENDS\n\n");
      }//create_SRAM