コード例 #1
0
int main (int argc, char *argv[])
{
  phfig_list *pFig;
  phseg_list *pSeg;
  phvia_list *pVIA;

        long  length[_MAX_ALU_];
        long  number[_MAX_ALU_];
        long  total_length;
        long  total_number;
        long  total_VIA;
         int  i;


  mbkenv ();
  alliancebanner ( "PdV"
                 , "0.1"
                 , "Pot de Vin - Routing Evaluator"
                 , "2002"
                 , "5.0"
                 );


  if (argc < 2) {
    fprintf (stderr, "Usage : pdv <layout>\n");

    exit (1);
  }


  pFig = getphfig (argv[1], 'A');

  for (i = 0; i < _MAX_ALU_; i++) {
    length[i] = 0;
    number[i] = 0;
  }

  for (pSeg = pFig->PHSEG; pSeg != NULL; pSeg = pSeg->NEXT) {
    switch (pSeg->LAYER) {
      case ALU2:
      case CALU2: i = _ALU2_; break;
      case ALU3:
      case CALU3: i = _ALU3_; break;
      case ALU4:
      case CALU4: i = _ALU4_; break;
      case ALU5:
      case CALU5: i = _ALU5_; break;
      case ALU6:
      case CALU6: i = _ALU6_; break;
      case ALU7:
      case CALU7: i = _ALU7_; break;
      case ALU8:
      case CALU8: i = _ALU8_; break;
      default:    continue;
    }

    number[i]++;

    if (pSeg->X1 == pSeg->X2) {
      /* Horizontal segments. */
      length[i] += (pSeg->Y2 - pSeg->Y1) / SCALE_X;
    } else {
      /* Vertical segments. */
      length[i] += (pSeg->X2 - pSeg->X1) / SCALE_X;
    }
  }

  for (i = 0; i < _MAX_ALU_; i++) { if (number[i] == 0) number[i]++; }


  total_VIA = 0;
  for (pVIA = pFig->PHVIA; pVIA != NULL; pVIA = pVIA->NEXT) {
    total_VIA++;
  }

  

  printf ("\n\n");
  printf ("  Routing statistics :\n\n");

  total_length = 0;
  total_number = 0;
  for (i = 0; i < _MAX_ALU_; i++) {
    printf ("  - ALU%d length  := %10d", i+2, length[i]);
    printf ("  (average length := %d)\n", length[i] / number[i]);

    total_length += length[i];
    total_number += number[i];
  }

  printf ("\n");
  printf ("  - Total length := %10d" , total_length);
  printf ("  (average length := %d)\n", total_length / total_number);

  printf ("\n");
  printf ("  - Total VIA    := %10d\n" , total_VIA);
  printf ("\n\n");
  

  exit (0);
}
コード例 #2
0
ファイル: MMBK.cpp プロジェクト: Coloquinte/Alliance
CEnv::CEnv (void)
{
  // Load the UNIX environmment for MBK.
  rdsenv ();
  loadrdsparam();
  mbkenv ();

  // Copy constants values from constants namespace ("D::").
  // Routing constants, loaded now that we have SCALE_X.
  D::X_GRID             = ::MBK::SCALE (MBK_X_GRID);
  D::Y_GRID             = ::MBK::SCALE (MBK_Y_GRID);
  D::WIDTH_VSS          = ::MBK::SCALE (MBK_WIDTH_VSS);
  D::WIDTH_VDD          = ::MBK::SCALE (MBK_WIDTH_VDD);
  D::Y_SLICE            = ::MBK::SCALE (MBK_Y_SLICE);
  D::TRACK_WIDTH_ALU1   = ::MBK::SCALE (MBK_TRACK_WIDTH_ALU1);
  D::TRACK_WIDTH_ALU2   = ::MBK::SCALE (MBK_TRACK_WIDTH_ALU2);
  D::TRACK_WIDTH_ALU3   = ::MBK::SCALE (MBK_TRACK_WIDTH_ALU3);
  D::TRACK_WIDTH_ALU4   = ::MBK::SCALE (MBK_TRACK_WIDTH_ALU4);
  D::TRACK_WIDTH_ALU5   = ::MBK::SCALE (MBK_TRACK_WIDTH_ALU5);
  D::TRACK_WIDTH_ALU6   = ::MBK::SCALE (MBK_TRACK_WIDTH_ALU6);
  D::TRACK_WIDTH_ALU7   = ::MBK::SCALE (MBK_TRACK_WIDTH_ALU7);
  D::TRACK_WIDTH_ALU8   = ::MBK::SCALE (MBK_TRACK_WIDTH_ALU8);
  D::TRACK_SPACING_ALU1 = ::MBK::SCALE (MBK_TRACK_SPACING_ALU1);
  D::TRACK_SPACING_ALU2 = ::MBK::SCALE (MBK_TRACK_SPACING_ALU2);
  D::TRACK_SPACING_ALU3 = ::MBK::SCALE (MBK_TRACK_SPACING_ALU3);
  D::TRACK_SPACING_ALU4 = ::MBK::SCALE (MBK_TRACK_SPACING_ALU4);
  D::TRACK_SPACING_ALU5 = ::MBK::SCALE (MBK_TRACK_SPACING_ALU5);
  D::TRACK_SPACING_ALU6 = ::MBK::SCALE (MBK_TRACK_SPACING_ALU6);
  D::TRACK_SPACING_ALU7 = ::MBK::SCALE (MBK_TRACK_SPACING_ALU7);
  D::TRACK_SPACING_ALU8 = ::MBK::SCALE (MBK_TRACK_SPACING_ALU8);

  // Grid spacing.
  grid_dx = D::X_GRID;
  grid_dy = D::Y_GRID;

  // Layers minimal width.
  ALU2W[ALU1]  = D::TRACK_WIDTH_ALU1;
  ALU2W[ALU2]  = D::TRACK_WIDTH_ALU2;
  ALU2W[ALU3]  = D::TRACK_WIDTH_ALU3;
  ALU2W[ALU4]  = D::TRACK_WIDTH_ALU4;
  ALU2W[ALU5]  = D::TRACK_WIDTH_ALU5;
  ALU2W[ALU6]  = D::TRACK_WIDTH_ALU6;
  ALU2W[ALU7]  = D::TRACK_WIDTH_ALU7;
  ALU2W[ALU8]  = D::TRACK_WIDTH_ALU8;
  ALU2W[CALU1] = D::TRACK_WIDTH_ALU1;
  ALU2W[CALU2] = D::TRACK_WIDTH_ALU2;
  ALU2W[CALU3] = D::TRACK_WIDTH_ALU3;
  ALU2W[CALU4] = D::TRACK_WIDTH_ALU4;
  ALU2W[CALU5] = D::TRACK_WIDTH_ALU5;
  ALU2W[CALU6] = D::TRACK_WIDTH_ALU6;
  ALU2W[CALU7] = D::TRACK_WIDTH_ALU7;
  ALU2W[CALU8] = D::TRACK_WIDTH_ALU8;
  ALU2W[TALU1] = D::TRACK_WIDTH_ALU1;
  ALU2W[TALU2] = D::TRACK_WIDTH_ALU2;
  ALU2W[TALU3] = D::TRACK_WIDTH_ALU3;
  ALU2W[TALU4] = D::TRACK_WIDTH_ALU4;
  ALU2W[TALU5] = D::TRACK_WIDTH_ALU5;
  ALU2W[TALU6] = D::TRACK_WIDTH_ALU6;
  ALU2W[TALU7] = D::TRACK_WIDTH_ALU7;
  ALU2W[TALU8] = D::TRACK_WIDTH_ALU8;

  // Layers minimal width.
  ALU2S[ALU1]  = D::TRACK_SPACING_ALU1;
  ALU2S[ALU2]  = D::TRACK_SPACING_ALU2;
  ALU2S[ALU3]  = D::TRACK_SPACING_ALU3;
  ALU2S[ALU4]  = D::TRACK_SPACING_ALU4;
  ALU2S[ALU5]  = D::TRACK_SPACING_ALU5;
  ALU2S[ALU6]  = D::TRACK_SPACING_ALU6;
  ALU2S[ALU7]  = D::TRACK_SPACING_ALU7;
  ALU2S[ALU8]  = D::TRACK_SPACING_ALU8;
  ALU2S[CALU1] = D::TRACK_SPACING_ALU1;
  ALU2S[CALU2] = D::TRACK_SPACING_ALU2;
  ALU2S[CALU3] = D::TRACK_SPACING_ALU3;
  ALU2S[CALU4] = D::TRACK_SPACING_ALU4;
  ALU2S[CALU5] = D::TRACK_SPACING_ALU5;
  ALU2S[CALU6] = D::TRACK_SPACING_ALU6;
  ALU2S[CALU7] = D::TRACK_SPACING_ALU7;
  ALU2S[CALU8] = D::TRACK_SPACING_ALU8;
  ALU2S[TALU1] = D::TRACK_SPACING_ALU1;
  ALU2S[TALU2] = D::TRACK_SPACING_ALU2;
  ALU2S[TALU3] = D::TRACK_SPACING_ALU3;
  ALU2S[TALU4] = D::TRACK_SPACING_ALU4;
  ALU2S[TALU5] = D::TRACK_SPACING_ALU5;
  ALU2S[TALU6] = D::TRACK_SPACING_ALU6;
  ALU2S[TALU7] = D::TRACK_SPACING_ALU7;
  ALU2S[TALU8] = D::TRACK_SPACING_ALU8;

  // Layer to Z translation table.
  ALU2Z[ALU1]  = 0;
  ALU2Z[ALU2]  = 1;
  ALU2Z[ALU3]  = 2;
  ALU2Z[ALU4]  = 3;
  ALU2Z[ALU5]  = 4;
  ALU2Z[ALU6]  = 5;
  ALU2Z[ALU7]  = 6;
  ALU2Z[ALU8]  = 7;
  ALU2Z[CALU1] = 0;
  ALU2Z[CALU2] = 1;
  ALU2Z[CALU3] = 2;
  ALU2Z[CALU4] = 3;
  ALU2Z[CALU5] = 4;
  ALU2Z[CALU6] = 5;
  ALU2Z[CALU7] = 6;
  ALU2Z[CALU8] = 7;
  ALU2Z[TALU1] = 0;
  ALU2Z[TALU2] = 1;
  ALU2Z[TALU3] = 2;
  ALU2Z[TALU4] = 3;
  ALU2Z[TALU5] = 4;
  ALU2Z[TALU6] = 5;
  ALU2Z[TALU7] = 6;
  ALU2Z[TALU8] = 7;

  regcomp(&pxLibRegex,"p.*px",REG_EXTENDED|REG_NOSUB);
}
コード例 #3
0
int main(int argc, char **argv)
{
lofig_list *f;
char *filein=NULL, *fileout=NULL;
int i,j;
int opt=0;

   if (argc<2) {
      printusage();
      exit(1);
   }
   mbkenv();

   for (i=1; i<argc; i++)
      if (argv[i][0]=='-')
         for (j=1; argv[i][j]!='\0'; j++) {
            switch (argv[i][j]) {
               case 'a':
                  opt|=ADDSIG;
                  break;
               case 'n':
                  opt|=NOALIM;
                  break;
               case 'g':
                  opt|=NOLOGEN;
                  break;
               case 'r':
                  opt|=RENINS;
                  break;
               case 'v':
                  opt|=VSTDRV;
                  break;
               case 'c':
                  opt|=VECCON;
                  break;
               case 'm':
                  opt|=MBKDRV;
                  break;
               case 'u':
                  opt|=NOVECT;
                  break;
               default:
                  fprintf(stderr, "** Unknown option -%c\n", argv[i][1]);
                  printusage();
                  exit(2);
            }
         }
      else
         if (!filein)
            filein=argv[i];
         else
            if (!fileout)
               fileout=argv[i];
            else {
               fputs("** Too many filenames\n", stderr);
               printusage();
               exit(4);
            }
               
   if (!filein) {
      fputs("** Filename expected!\n", stderr);
      printusage();
      exit(3);
   }

   f=getlofig(filein,'A');

   guessextdir(f);

   if (opt & NOALIM)
      removepowers(f);

   if (opt & RENINS)
      renameinstance(f);

   if (opt & NOLOGEN)
      removelogen(f);

   #if 0
   if (opt & VECCON) {
      vectlocon(f);
      sortlocon(&f->LOCON);
      f->LOCON=(locon_list *)reverse(f->LOCON);
   }
   #endif

   if (fileout)
      f->NAME=namealloc(fileout);

   if (!(opt & NOVECT))
      vectlosig(&f->LOSIG);

   if (opt & MBKDRV)
      savelofig(f);
   else {
      if (opt&VSTDRV)
         vhdlsavevelofig(f, 0);
      else if (opt&ADDSIG)
         vhdlsavevelofig(f, 1);
      else
         vhdlsavevelofig(f, 2);
   }

#if 0
#ifdef VEL_DEBUG
   f->NAME=namealloc("netlist");
   vhdlsavevelofig(f,1);
#endif
#endif

   exit(0);
}