Add more UDP edge types, and finish up compile

and run-time support. (Stephan Boettcher)
This commit is contained in:
steve 2001-06-18 00:51:23 +00:00
parent e418625457
commit e40efec4bd
5 changed files with 72 additions and 28 deletions

View File

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: lexor.lex,v 1.57 2001/04/28 18:43:18 steve Exp $"
#ident "$Id: lexor.lex,v 1.58 2001/06/18 00:51:23 steve Exp $"
#endif
//# define YYSTYPE lexval
@ -157,18 +157,23 @@ W [ \t\b\f\r]+
<UDPTABLE>\(\?[xX]\) { return '%'; }
<UDPTABLE>\(\?\?\) { return '*'; }
<UDPTABLE>\(01\) { return 'r'; }
<UDPTABLE>\(0[xX]\) { return 'P'; }
<UDPTABLE>\(0\?\) { return 'p'; }
<UDPTABLE>\(0[xX]\) { return 'Q'; }
<UDPTABLE>\(0\?\) { return 'P'; }
<UDPTABLE>\(10\) { return 'f'; }
<UDPTABLE>\(1[xX]\) { return 'N'; }
<UDPTABLE>\(1\?\) { return 'n'; }
<UDPTABLE>\(1[xX]\) { return 'M'; }
<UDPTABLE>\(1\?\) { return 'N'; }
<UDPTABLE>\([xX]0\) { return 'F'; }
<UDPTABLE>\([xX]1\) { return 'R'; }
<UDPTABLE>\([xX]\?\) { return 'B'; }
<UDPTABLE>[bB] { return 'b'; }
<UDPTABLE>[lL] { return 'l'; /* IVL extension */ }
<UDPTABLE>[hH] { return 'h'; /* IVL extension */ }
<UDPTABLE>[fF] { return 'f'; }
<UDPTABLE>[rR] { return 'r'; }
<UDPTABLE>[xX] { return 'x'; }
<UDPTABLE>[pPnN01\?\*\-] { return yytext[0]; }
<UDPTABLE>[nN] { return 'n'; }
<UDPTABLE>[pP] { return 'p'; }
<UDPTABLE>[01\?\*\-] { return yytext[0]; }
[a-zA-Z_][a-zA-Z0-9$_]* {
int rc = lexor_keyword_code(yytext, yyleng);

View File

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: parse.y,v 1.121 2001/04/29 20:18:34 steve Exp $"
#ident "$Id: parse.y,v 1.122 2001/06/18 00:51:23 steve Exp $"
#endif
# include "parse_misc.h"
@ -2363,12 +2363,17 @@ udp_input_sym
| '%' { $$ = '%'; }
| 'f' { $$ = 'f'; }
| 'F' { $$ = 'F'; }
| 'l' { $$ = 'l'; }
| 'h' { $$ = 'H'; }
| 'B' { $$ = 'B'; }
| 'r' { $$ = 'r'; }
| 'R' { $$ = 'R'; }
| 'M' { $$ = 'M'; }
| 'n' { $$ = 'n'; }
| 'N' { $$ = 'N'; }
| 'p' { $$ = 'p'; }
| 'P' { $$ = 'P'; }
| 'Q' { $$ = 'Q'; }
| '_' { $$ = '_'; }
| '+' { $$ = '+'; }
;

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: vvm_udp.cc,v 1.3 2001/04/22 23:09:46 steve Exp $"
#ident "$Id: vvm_udp.cc,v 1.4 2001/06/18 00:51:23 steve Exp $"
#endif
# include "vvm_gates.h"
@ -80,12 +80,15 @@ void vvm_udp_comb::take_value(unsigned key, vpip_bit_t val)
unsigned idx;
for (idx = 0 ; idx < width_ ; idx += 1)
{
char new_bit = ibits_[idx];
if (row[idx] != ibits_[idx]
&& row[idx] != '?')
&& row[idx] != '?'
&& (row[idx] != 'b' || new_bit == 'x')
&& (row[idx] != 'l' || new_bit == '1')
&& (row[idx] != 'h' || new_bit == '0') )
{
if (idx == key)
{
char new_bit = ibits_[idx];
switch (row[idx])
{
case '*':
@ -102,6 +105,10 @@ void vvm_udp_comb::take_value(unsigned key, vpip_bit_t val)
if (new_bit == 'x')
continue;
break;
case 'B':
if (old_bit == 'x')
continue;
break;
case 'r':
if (old_bit=='0' && new_bit=='1')
continue;
@ -118,19 +125,27 @@ void vvm_udp_comb::take_value(unsigned key, vpip_bit_t val)
if (old_bit=='x' && new_bit=='0')
continue;
break;
case 'p':
case 'P':
if (old_bit=='0')
continue;
break;
case 'n':
if (old_bit=='1')
continue;
break;
case 'P':
if (old_bit=='0' && new_bit=='x')
case 'p':
if (old_bit=='0' || new_bit=='1')
continue;
break;
case 'N':
if (old_bit=='1')
continue;
break;
case 'n':
if (old_bit=='1' || new_bit=='0')
continue;
break;
case 'Q':
if (old_bit=='0' && new_bit=='x')
continue;
break;
case 'M':
if (old_bit=='1' && new_bit=='x')
continue;
break;
@ -177,6 +192,10 @@ void vvm_udp_comb::take_value(unsigned key, vpip_bit_t val)
/*
* $Log: vvm_udp.cc,v $
* Revision 1.4 2001/06/18 00:51:23 steve
* Add more UDP edge types, and finish up compile
* and run-time support. (Stephan Boettcher)
*
* Revision 1.3 2001/04/22 23:09:46 steve
* More UDP consolidation from Stephan Boettcher.
*

View File

@ -1,7 +1,7 @@
/*
* Copyright (c) 2001 Stephen Williams (steve@icarus.com)
*
* $Id: README.txt,v 1.30 2001/06/16 23:45:05 steve Exp $
* $Id: README.txt,v 1.31 2001/06/18 00:51:23 steve Exp $
*/
VVP SIMULATION ENGINE
@ -149,10 +149,13 @@ For Sequential UDPs, at most one input state specification may be
replaced by an edge specification. Valid edges are:
"*": (??) "_": (?0) "+": (?1) "%": (?x)
"p": (0?) "r": (01) "P": (0x)
"n": (1?) "f": (10) "N": (1x)
"P": (0?) "r": (01) "Q": (0x)
"N": (1?) "f": (10) "M": (1x)
"B": (x?) "F": (x0) "R": (x1)
"n": (1?) | (?0)
"p": (0?) | (?1)
A combinatorial UDP is defined like this:
<type> .udp/comb "<name>", <number>, "<row0>", "<row1>", ... ;

View File

@ -18,7 +18,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT)
#ident "$Id: udp.cc,v 1.5 2001/05/31 04:12:43 steve Exp $"
#ident "$Id: udp.cc,v 1.6 2001/06/18 00:51:23 steve Exp $"
#endif
#include "udp.h"
@ -169,19 +169,27 @@ unsigned char vvp_udp_s::propagate_(vvp_ipoint_t uix)
if (old_bit=='x' && new_bit=='0')
continue;
break;
case 'p':
case 'P':
if (old_bit=='0')
continue;
break;
case 'n':
if (old_bit=='1')
continue;
break;
case 'P':
if (old_bit=='0' && new_bit=='x')
case 'p':
if (old_bit=='0' || new_bit=='1')
continue;
break;
case 'N':
if (old_bit=='1')
continue;
break;
case 'n':
if (old_bit=='1' || new_bit=='0')
continue;
break;
case 'Q':
if (old_bit=='0' && new_bit=='x')
continue;
break;
case 'M':
if (old_bit=='1' && new_bit=='x')
continue;
break;
@ -223,6 +231,10 @@ unsigned char vvp_udp_s::propagate_(vvp_ipoint_t uix)
/*
* $Log: udp.cc,v $
* Revision 1.6 2001/06/18 00:51:23 steve
* Add more UDP edge types, and finish up compile
* and run-time support. (Stephan Boettcher)
*
* Revision 1.5 2001/05/31 04:12:43 steve
* Make the bufif0 and bufif1 gates strength aware,
* and accurately propagate strengths of outputs.