🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

6 total messages Started by Mike Killoran Mon, 21 Dec 1992 19:16
Parallel transistors in irsim
#634
Author: Mike Killoran
Date: Mon, 21 Dec 1992 19:16
43 lines
1894 bytes
Hi,

We are trying to simulate a large chip (~700,000 transistors) with
irsim.  There are many (almost 7,000) parallel transistors making 
up the clock distribution cell.  When simulating this chip, irsim
gives the following complaint about all of the parallel transistors:

There are too many transistors in parallel (> 300)
Simulation results may be inaccurate, to fix this
you will need to increase this limit in conn_list.c

No problem, just edit conn_list.c, increase MAX_PARALLEL to 7000.
Do the same in globals.h and then recompile.  No problem.  Right?

Now, sure enough, the parallel transistor message is gone, but
now irsim says:

time 100ns; there are pending events (839)
.
.
.
internal error: no events but npending set


What's going on here?  I found where these errors are produced,
but can't figure out whats causing them.  Some things I tried
have left more questions than they answered.  Such as; I set
the MAX_PARALLEL to 600.  Same internal error, but no complaint
about the parallel transistors!  Just what is MAX_PARALLEL?  I 
then removed a large cell from the design and replaced it with 
a dummy cell (just connecting wires) -- but left all 7,000 parallel
transistors in place -- and got no errors.

So it seems that the internal error is not due to the parallel 
transistors, but the number of nodes to keep track of?

If anyone could shed some light on this problem, I'd be happy.



Mike Killoran
killoran@ll.mit.edu
Re: Parallel transistors in irsim
#635
Author: Craig Chase
Date: Tue, 22 Dec 1992 02:32
216 lines
7154 bytes
killoran@ll.mit.edu (Mike Killoran) writes:
>We are trying to simulate a large chip (~700,000 transistors) with
>irsim.  There are many (almost 7,000) parallel transistors making 
>up the clock distribution cell.  When simulating this chip, irsim
>gives the following complaint about all of the parallel transistors:

>No problem, just edit conn_list.c, increase MAX_PARALLEL to 7000.
>Do the same in globals.h and then recompile.  No problem.  Right?

We had the problem with parallel transistors as well and fixed it by 
dynamically allocating the array and increasing its size as needed.  What 
follows is a context diff.  The first diff (to cad_dir.c) Is not really 
to your problem, but I include it anyway.  (BTW, these fixes were done 
by Christos Zoulas a couple years ago).

Good luck,
mark linderman (linder@ee.cornell.edu)


*** cad_dir.c   Tue Apr 24 20:21:29 1990
--- cad_dir.c.orig      Fri Jan 26 08:14:17 1990
***************
*** 18,24 ****
  
  public void InitCAD()
    {
!     char           *s, *h;
      struct passwd  *pwd;
      int            len;
  
--- 18,24 ----
  
  public void InitCAD()
    {
!     char           *s;
      struct passwd  *pwd;
      int            len;
  
***************
*** 48,57 ****
    go_it :
  
      len = strlen( s );
!     if ((h = getenv("HOSTTYPE")) == (char *) 0) 
!       h = "";
!     cad_lib = Valloc( len + 12 );
!     cad_bin = Valloc( len + 5 + strlen(h) );
!     sprintf( cad_lib, "%s/lib/irsim", s );
!     sprintf( cad_bin, "%s/bin/%s", s, h);
    }
--- 48,55 ----
    go_it :
  
      len = strlen( s );
!     cad_lib = Valloc( len + 5 );
!     cad_bin = Valloc( len + 5 );
!     sprintf( cad_lib, "%s/lib", s );
!     sprintf( cad_bin, "%s/bin", s );
    }
Exit 1
*** conn_list.c Wed Apr 25 08:51:34 1990
--- conn_list.c.orig    Tue Aug 29 04:29:56 1989
***************
*** 9,19 ****
  
  
  public
! #define       INC_PARALLEL    32      /* this is probably sufficient per stage */
!                               /* and we increment by that...           */
  
! public        tptr  *parallel_xtors = (tptr *) 0;
! private int cur_par = 0;
  
  public
  #define       par_list( T )           ( parallel_xtors[ (T)->n_par ] )
--- 9,17 ----
  
  
  public
! #define       MAX_PARALLEL    30      /* this is probably sufficient per stage */
  
! public        tptr  parallel_xtors[ MAX_PARALLEL ];
  
  public
  #define       par_list( T )           ( parallel_xtors[ (T)->n_par ] )
***************
*** 20,25 ****
--- 18,24 ----
  
  #define       hash_terms( T )         ( (Ulong)((T)->source) ^ (Ulong)((T)->drain) )
  
+ 
  /*
   * Build a linked-list of nodes (using nlink entry in Node structure)
   * which are electrically connected to node 'n'.  No special order
***************
*** 74,91 ****
              }
            else if( model != LIN_MODEL )
                continue;
!           else 
! #ifdef notdef
!           /* 
!            * Does this work all the time?
!            */
!           if( hash_terms( other->n.tran ) == hash_terms( t ) )
! #else
!           if (((other->n.tran->source == t->source) &&
!                (other->n.tran->drain  == t->drain ))    ||
!               ((other->n.tran->drain  == t->source) &&
!                (other->n.tran->source == t->drain ))) 
! #endif
              {                                     /* parallel transistors */
                register tptr  tran = other->n.tran;
  
--- 73,79 ----
              }
            else if( model != LIN_MODEL )
                continue;
!           else if( hash_terms( other->n.tran ) == hash_terms( t ) )
              {                                     /* parallel transistors */
                register tptr  tran = other->n.tran;
  
***************
*** 93,116 ****
                    t->dcache = (int *) par_list( tran );
                else
                  {
!                   if( n_par == cur_par )
                      {
-                       tptr *tempp;
-                       int o_par;
- 
-                       o_par = cur_par;
-                       cur_par += INC_PARALLEL;
-                       tempp = (tptr *) Valloc(sizeof(tptr) * cur_par);
-                       if (parallel_xtors != (tptr *) 0) {
-                           bcopy(parallel_xtors, tempp, o_par * sizeof(tptr));
-                           Vfree(parallel_xtors);
-                       }
-                       parallel_xtors = tempp;
                        WarnTooManyParallel();
! #ifdef notdef
!                       t->tflags |= PBROKEN;    simply ignore it */
                        continue;
- #endif
                      }
                    tran->n_par = n_par++;
                    tran->tflags |= PARALLEL;
--- 81,91 ----
                    t->dcache = (int *) par_list( tran );
                else
                  {
!                   if( n_par >= MAX_PARALLEL )
                      {
                        WarnTooManyParallel();
!                       t->tflags |= PBROKEN;           /* simply ignore it */
                        continue;
                      }
                    tran->n_par = n_par++;
                    tran->tflags |= PARALLEL;
***************
*** 132,138 ****
  
  public void WarnTooManyParallel()
    {
- #ifdef notdef
      static  int  did_it = FALSE;
  
      if( did_it )
--- 107,112 ----
***************
*** 143,149 ****
      lprintf( stderr, "you will need to increase this limit in '%s'\n",
        __FILE__ );
      did_it = TRUE;
- #else
-     lprintf( stderr, "Increasing parallel transistor list to %d.\n", cur_par);
- #endif
    }
--- 117,120 ----
Exit 1
*** gentbl.c    Tue May 15 04:19:09 1990
--- gentbl.c.orig       Fri Jan 26 09:43:06 1990
***************
*** 174,178 ****
                  }
          }
      fprintf( out, "\n};\n" );
-     exit(0);
    }
--- 174,177 ----
Exit 1
*** rsim.c      Tue Apr 24 19:45:52 1990
--- rsim.c.orig Mon Jan 29 19:46:20 1990
***************
*** 1580,1590 ****
      if( targc == 2 and (logfile = fopen( targv[1], "w" )) == NULL )
        error( filename, lineno, "cannot open log file %s for output\n",
          targv[1] );
- #ifdef SYS_V
-     setvbuf(logfile, (char *) 0, _IOLBF, BUFSIZ);
- #else
-     setlinebuf(logfile);
- #endif
      return( 0 );
    }
  
--- 1580,1585 ----


-- 
----------------------------------------------------------------------
Mark Linderman            |         Cornell University
linder@ee.cornell.edu     | Department of Electrical Engineering
----------------------------------------------------------------------
Re: Parallel transistors in irsim
#636
Author: Christos Zoulas
Date: Tue, 22 Dec 1992 06:26
58 lines
3169 bytes
In article <1992Dec22.023221.1664@cs.cornell.edu> cchase@cs.cornell.edu (Craig Chase) writes:
>killoran@ll.mit.edu (Mike Killoran) writes:
>>We are trying to simulate a large chip (~700,000 transistors) with
>>irsim.  There are many (almost 7,000) parallel transistors making 
>>up the clock distribution cell.  When simulating this chip, irsim
>>gives the following complaint about all of the parallel transistors:
>
>>No problem, just edit conn_list.c, increase MAX_PARALLEL to 7000.
>>Do the same in globals.h and then recompile.  No problem.  Right?
>
>We had the problem with parallel transistors as well and fixed it by 
>dynamically allocating the array and increasing its size as needed.  What 
>follows is a context diff.  The first diff (to cad_dir.c) Is not really 
>to your problem, but I include it anyway.  (BTW, these fixes were done 
>by Christos Zoulas a couple years ago).
>
>Good luck,
>mark linderman (linder@ee.cornell.edu)
>

Since I was mentioned in this posting :-), I have to say that I did
send this fix to Arturo Salz two years ago and it never made it to the
irsim distribution. I think that the patch Mark posted is backwards
[patch will say that you need to apply -R]. It is missing a very
important part. In net.h you'll need to change n_par to something
larger than a character, otherwise you'll be indexing random values
when the number of parallel transistors goes above 127.  Here's a
forward patch to that...

I don't know if this is the latest version of irsim, maybe Mark can
give us a clue about which version of irsim these patches are for, and
the author can tell us which version of irsim he is running?

Mark should also recompile irsim in the cad account :-)....

G'night,

christos

*** net.h.orig	Thu Sep 13 16:39:48 1990
--- net.h	Tue Dec 22 01:19:12 1992
***************
*** 156,162 ****
      char     ttype;		     /* type of transistor */
      char     state;		     /* cache to remember current state */
      char     tflags; 		     /* transistor flags */
!     char     n_par;		     /* index into parallel list */
      Resists  r;			     /* transistor resistances */
      long     x, y;		     /* position in the layout (optional) */
      tptr     tlink;		     /* next txtor in position hash table */
--- 156,162 ----
      char     ttype;		     /* type of transistor */
      char     state;		     /* cache to remember current state */
      char     tflags; 		     /* transistor flags */
!     unsigned short n_par;	     /* index into parallel list */
      Resists  r;			     /* transistor resistances */
      long     x, y;		     /* position in the layout (optional) */
      tptr     tlink;		     /* next txtor in position hash table */
Re: Parallel transistors in irsim
#639
Author: Mike Killoran
Date: Tue, 22 Dec 1992 17:50
23 lines
1558 bytes
In article <BznDwt.8sz@deshaw.com> christos@deshaw.com (Christos Zoulas) writes:

>   I don't know if this is the latest version of irsim, maybe Mark can
>   give us a clue about which version of irsim these patches are for, and
>   the author can tell us which version of irsim he is running?

>   Mark should also recompile irsim in the cad account :-)....


	According to version.c in src/irsim, I am using version 8.6.  I got
this along with magic from gatekeeper.dec.com a few months ago.  Is this the
latest?

	Thanks for the patches to allow for the dynamic allocation of parallel
transistors.  Is this any better than changing MAX_PARALLEL however? (besides,
obviously, storage space)  After changing MAX_PARALLEL the complaint about
too many parallel transistors went away... and the other message (internal
error: no events but npending set) showed up.  Will your patch fix this problem?

	-Thanks again,

	Mike Killoran
	killoran@ll.mit.edu
Re: Parallel transistors in irsim
#638
Author: Craig Chase
Date: Tue, 22 Dec 1992 18:35
9 lines
882 bytes
The patch I posted (and that Christos corrected) was for version 8.3, I believe that it works equally well with 8.6.

mark

-- 
----------------------------------------------------------------------
Mark Linderman            |         Cornell University
linder@ee.cornell.edu     | Department of Electrical Engineering
----------------------------------------------------------------------
Re: Parallel transistors in irsim
#642
Author: Craig Chase
Date: Tue, 22 Dec 1992 23:20
28 lines
1828 bytes
killoran@ll.mit.edu (Mike Killoran) writes:
>   ...
>	Thanks for the patches to allow for the dynamic allocation of parallel
>transistors.  Is this any better than changing MAX_PARALLEL however? (besides,
>obviously, storage space)  After changing MAX_PARALLEL the complaint about
>too many parallel transistors went away... and the other message (internal
>error: no events but npending set) showed up.  Will your patch fix this problem?
>	Mike Killoran
>	killoran@ll.mit.edu

Mike,
I wish I could tell you that it would, but since I have not seen the       
problem (and actually have been out of VLSI circles for a couple years) I  
can't say that it will.  However, if you did not patch the header file     
that Christos mentioned (net.h) you could certainly be getting all sorts   
of problems.  The index into the array is defined as char.  If the offset  
has the 7th bit as one, it is treated as a NEGATIVE offset.  This will     
screw you to no end.  It is imperative that you make it an unsigned short  
or something like that.

mark


-- 
----------------------------------------------------------------------
Mark Linderman            |         Cornell University
linder@ee.cornell.edu     | Department of Electrical Engineering
----------------------------------------------------------------------
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads