Add support for signed ports and nets.
This commit is contained in:
parent
b0f7c33ab1
commit
9adbdcb7c5
50
parse.y
50
parse.y
|
|
@ -18,8 +18,8 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#if !defined(WINNT) && !defined(macintosh)
|
||||
#ident "$Id: parse.y,v 1.170 2003/01/26 21:15:59 steve Exp $"
|
||||
#if HAVE_CVS_IDENT
|
||||
#ident "$Id: parse.y,v 1.171 2003/02/02 19:02:39 steve Exp $"
|
||||
#endif
|
||||
|
||||
# include "config.h"
|
||||
|
|
@ -282,17 +282,11 @@ attribute
|
|||
integers. This rule matches those declarations. The containing
|
||||
rule has presumably set up the scope. */
|
||||
block_item_decl
|
||||
: K_reg range register_variable_list ';'
|
||||
{ pform_set_net_range($3, $2, false);
|
||||
: K_reg signed_opt range register_variable_list ';'
|
||||
{ pform_set_net_range($4, $3, $2);
|
||||
}
|
||||
| K_reg register_variable_list ';'
|
||||
{ pform_set_net_range($2, 0, false);
|
||||
}
|
||||
| K_reg K_signed range register_variable_list ';'
|
||||
{ pform_set_net_range($4, $3, true);
|
||||
}
|
||||
| K_reg K_signed register_variable_list ';'
|
||||
{ pform_set_net_range($3, 0, true);
|
||||
| K_reg signed_opt register_variable_list ';'
|
||||
{ pform_set_net_range($3, 0, $2);
|
||||
}
|
||||
| K_integer register_variable_list ';'
|
||||
{ pform_set_reg_integer($2);
|
||||
|
|
@ -1366,27 +1360,27 @@ range_delay : range_opt delay3_opt
|
|||
|
||||
|
||||
module_item
|
||||
: attribute_list_opt net_type range_delay list_of_identifiers ';'
|
||||
{ pform_makewire(@2, $3.range, $4, $2, $1);
|
||||
if ($3.delay != 0) {
|
||||
yyerror(@3, "sorry: net delays not supported.");
|
||||
delete $3.delay;
|
||||
: attribute_list_opt net_type signed_opt range_delay list_of_identifiers ';'
|
||||
{ pform_makewire(@2, $4.range, $3, $5, $2, $1);
|
||||
if ($4.delay != 0) {
|
||||
yyerror(@4, "sorry: net delays not supported.");
|
||||
delete $4.delay;
|
||||
}
|
||||
if ($1) delete $1;
|
||||
}
|
||||
| attribute_list_opt net_type range_delay net_decl_assigns ';'
|
||||
{ pform_makewire(@2, $3.range, $3.delay, str_strength,
|
||||
$4, $2);
|
||||
| attribute_list_opt net_type signed_opt range_delay net_decl_assigns ';'
|
||||
{ pform_makewire(@2, $4.range, $3, $4.delay,
|
||||
str_strength, $5, $2);
|
||||
if ($1) {
|
||||
yyerror(@3, "sorry: Attributes not supported "
|
||||
"on net declaration assignments.");
|
||||
delete $1;
|
||||
}
|
||||
}
|
||||
| attribute_list_opt net_type drive_strength net_decl_assigns ';'
|
||||
{ pform_makewire(@2, 0, 0, $3, $4, $2);
|
||||
| attribute_list_opt net_type signed_opt drive_strength net_decl_assigns ';'
|
||||
{ pform_makewire(@2, 0, $3, 0, $4, $5, $2);
|
||||
if ($1) {
|
||||
yyerror(@3, "sorry: Attributes not supported "
|
||||
yyerror(@4, "sorry: Attributes not supported "
|
||||
"on net declaration assignments.");
|
||||
delete $1;
|
||||
}
|
||||
|
|
@ -1397,14 +1391,14 @@ module_item
|
|||
delete $3.delay;
|
||||
}
|
||||
|
||||
| port_type range_delay list_of_identifiers ';'
|
||||
{ pform_set_port_type(@1, $3, $2.range, $1);
|
||||
| port_type signed_opt range_delay list_of_identifiers ';'
|
||||
{ pform_set_port_type(@1, $4, $3.range, $2, $1);
|
||||
}
|
||||
| port_type range_delay error ';'
|
||||
| port_type signed_opt range_delay error ';'
|
||||
{ yyerror(@3, "error: Invalid variable list"
|
||||
" in port declaration.");
|
||||
if ($2.range) delete $2.range;
|
||||
if ($2.delay) delete $2.delay;
|
||||
if ($3.range) delete $3.range;
|
||||
if ($3.delay) delete $3.delay;
|
||||
yyerrok;
|
||||
}
|
||||
| block_item_decl
|
||||
|
|
|
|||
14
pform.cc
14
pform.cc
|
|
@ -17,7 +17,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#ifdef HAVE_CVS_IDENT
|
||||
#ident "$Id: pform.cc,v 1.107 2003/01/26 21:15:59 steve Exp $"
|
||||
#ident "$Id: pform.cc,v 1.108 2003/02/02 19:02:39 steve Exp $"
|
||||
#endif
|
||||
|
||||
# include "config.h"
|
||||
|
|
@ -941,6 +941,7 @@ void pform_makewire(const vlltype&li, const char*nm,
|
|||
|
||||
void pform_makewire(const vlltype&li,
|
||||
svector<PExpr*>*range,
|
||||
bool signed_flag,
|
||||
list<char*>*names,
|
||||
NetNet::Type type,
|
||||
svector<named_pexpr_t*>*attr)
|
||||
|
|
@ -950,7 +951,7 @@ void pform_makewire(const vlltype&li,
|
|||
; cur ++ ) {
|
||||
char*txt = *cur;
|
||||
pform_makewire(li, txt, type, attr);
|
||||
pform_set_net_range(txt, range, false);
|
||||
pform_set_net_range(txt, range, signed_flag);
|
||||
free(txt);
|
||||
}
|
||||
|
||||
|
|
@ -961,6 +962,7 @@ void pform_makewire(const vlltype&li,
|
|||
|
||||
void pform_makewire(const vlltype&li,
|
||||
svector<PExpr*>*range,
|
||||
bool signed_flag,
|
||||
svector<PExpr*>*delay,
|
||||
str_pair_t str,
|
||||
net_decl_assign_t*decls,
|
||||
|
|
@ -973,7 +975,7 @@ void pform_makewire(const vlltype&li,
|
|||
net_decl_assign_t*next = first->next;
|
||||
|
||||
pform_makewire(li, first->name, type, 0);
|
||||
pform_set_net_range(first->name, range, false);
|
||||
pform_set_net_range(first->name, range, signed_flag);
|
||||
|
||||
hname_t name = hier_name(first->name);
|
||||
PWire*cur = pform_cur_module->get_wire(name);
|
||||
|
|
@ -1238,6 +1240,7 @@ void pform_set_defparam(const hname_t&name, PExpr*expr)
|
|||
void pform_set_port_type(const struct vlltype&li,
|
||||
list<char*>*names,
|
||||
svector<PExpr*>*range,
|
||||
bool signed_flag,
|
||||
NetNet::PortType pt)
|
||||
{
|
||||
for (list<char*>::iterator cur = names->begin()
|
||||
|
|
@ -1246,7 +1249,7 @@ void pform_set_port_type(const struct vlltype&li,
|
|||
char*txt = *cur;
|
||||
pform_set_port_type(txt, pt, li.text, li.first_line);
|
||||
if (range)
|
||||
pform_set_net_range(txt, range, false);
|
||||
pform_set_net_range(txt, range, signed_flag);
|
||||
free(txt);
|
||||
}
|
||||
|
||||
|
|
@ -1393,6 +1396,9 @@ int pform_parse(const char*path, FILE*file)
|
|||
|
||||
/*
|
||||
* $Log: pform.cc,v $
|
||||
* Revision 1.108 2003/02/02 19:02:39 steve
|
||||
* Add support for signed ports and nets.
|
||||
*
|
||||
* Revision 1.107 2003/01/26 21:15:59 steve
|
||||
* Rework expression parsing and elaboration to
|
||||
* accommodate real/realtime values and expressions.
|
||||
|
|
|
|||
11
pform.h
11
pform.h
|
|
@ -19,7 +19,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#ifdef HAVE_CVS_IDENT
|
||||
#ident "$Id: pform.h,v 1.66 2003/01/30 16:23:08 steve Exp $"
|
||||
#ident "$Id: pform.h,v 1.67 2003/02/02 19:02:40 steve Exp $"
|
||||
#endif
|
||||
|
||||
# include "netlist.h"
|
||||
|
|
@ -158,11 +158,13 @@ extern void pform_makewire(const struct vlltype&li, const char*name,
|
|||
|
||||
extern void pform_makewire(const struct vlltype&li,
|
||||
svector<PExpr*>*range,
|
||||
bool signed_flag,
|
||||
list<char*>*names,
|
||||
NetNet::Type type,
|
||||
svector<named_pexpr_t*>*attr);
|
||||
extern void pform_makewire(const struct vlltype&li,
|
||||
svector<PExpr*>*range,
|
||||
bool signed_flag,
|
||||
svector<PExpr*>*delay,
|
||||
str_pair_t str,
|
||||
net_decl_assign_t*assign_list,
|
||||
|
|
@ -174,7 +176,9 @@ extern void pform_make_reginit(const struct vlltype&li,
|
|||
i.e. input, output or inout. If the wire does not exist, create
|
||||
it. The second form takes a single name. */
|
||||
extern void pform_set_port_type(const struct vlltype&li,
|
||||
list<char*>*names, svector<PExpr*>*,
|
||||
list<char*>*names,
|
||||
svector<PExpr*>*range,
|
||||
bool signed_flag,
|
||||
NetNet::PortType);
|
||||
extern void pform_set_port_type(const char*nm, NetNet::PortType pt,
|
||||
const char*file, unsigned lineno);
|
||||
|
|
@ -264,6 +268,9 @@ extern void pform_dump(ostream&out, Module*mod);
|
|||
|
||||
/*
|
||||
* $Log: pform.h,v $
|
||||
* Revision 1.67 2003/02/02 19:02:40 steve
|
||||
* Add support for signed ports and nets.
|
||||
*
|
||||
* Revision 1.66 2003/01/30 16:23:08 steve
|
||||
* Spelling fixes.
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue