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; }
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
/*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"); } }
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; }
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