Thread View: comp.lsi.cad
6 messages
6 total messages
Started by Mike Killoran
Mon, 21 Dec 1992 19:16
Parallel transistors in irsim
Author: Mike Killoran
Date: Mon, 21 Dec 1992 19:16
Date: Mon, 21 Dec 1992 19:16
43 lines
1894 bytes
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
Author: Craig Chase
Date: Tue, 22 Dec 1992 02:32
Date: Tue, 22 Dec 1992 02:32
216 lines
7154 bytes
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
Author: Christos Zoulas
Date: Tue, 22 Dec 1992 06:26
Date: Tue, 22 Dec 1992 06:26
58 lines
3169 bytes
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
Author: Mike Killoran
Date: Tue, 22 Dec 1992 17:50
Date: Tue, 22 Dec 1992 17:50
23 lines
1558 bytes
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
Author: Craig Chase
Date: Tue, 22 Dec 1992 18:35
Date: Tue, 22 Dec 1992 18:35
9 lines
882 bytes
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
Author: Craig Chase
Date: Tue, 22 Dec 1992 23:20
Date: Tue, 22 Dec 1992 23:20
28 lines
1828 bytes
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