Ignore SDF COND and CONDELSE delay definitions.

This commit is contained in:
Cary R 2014-04-26 20:55:21 -07:00
parent e4476d544f
commit 8c80193fc5
3 changed files with 82 additions and 36 deletions

View File

@ -55,7 +55,7 @@ O = sys_table.o sys_convert.o sys_countdrivers.o sys_darray.o sys_deposit.o sys_
sys_fileio.o sys_finish.o sys_icarus.o sys_plusargs.o sys_queue.o \
sys_random.o sys_random_mti.o sys_readmem.o sys_readmem_lex.o sys_scanf.o \
sys_sdf.o sys_time.o sys_vcd.o sys_vcdoff.o vcd_priv.o mt19937int.o \
sys_priv.o sdf_lexor.o sdf_parse.o stringheap.o vams_simparam.o \
sys_priv.o sdf_parse.o sdf_lexor.o stringheap.o vams_simparam.o \
table_mod.o table_mod_lexor.o table_mod_parse.o
OPP = vcd_priv2.o

View File

@ -5,7 +5,7 @@
%{
/*
* Copyright (c) 2007-2010 Stephen Williams (steve@icarus.com)
* Copyright (c) 2007-2014 Stephen Williams (steve@icarus.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -107,6 +107,11 @@ static int yywrap(void)
"===" { return K_CEQ; }
"!==" { return K_CNE; }
/* Other operators. */
"&&" { return K_LAND; }
"||" { return K_LOR; }
/* The HCHAR (hierarchy separator) is set by the SDF file itself. We
recognize here the HCHAR. */
[./] {
@ -124,34 +129,36 @@ static struct {
const char*name;
int code;
} keywords[] = {
{ "ABSOLUTE", K_ABSOLUTE },
{ "CELL", K_CELL },
{ "CELLTYPE", K_CELLTYPE },
{ "DATE", K_DATE },
{ "DELAY", K_DELAY },
{ "DELAYFILE", K_DELAYFILE },
{ "DESIGN", K_DESIGN },
{ "DIVIDER", K_DIVIDER },
{ "HOLD", K_HOLD },
{ "INCREMENT", K_INCREMENT },
{ "INTERCONNECT",K_INTERCONNECT },
{ "INSTANCE", K_INSTANCE },
{ "IOPATH", K_IOPATH },
{ "PROCESS", K_PROCESS },
{ "PROGRAM", K_PROGRAM },
{ "RECREM", K_RECREM },
{ "RECOVERY", K_RECOVERY },
{ "REMOVAL", K_REMOVAL },
{ "SDFVERSION", K_SDFVERSION },
{ "SETUP", K_SETUP },
{ "SETUPHOLD", K_SETUPHOLD },
{ "TEMPERATURE",K_TEMPERATURE },
{ "TIMESCALE", K_TIMESCALE },
{ "TIMINGCHECK",K_TIMINGCHECK },
{ "VENDOR", K_VENDOR },
{ "VERSION", K_VERSION },
{ "VOLTAGE", K_VOLTAGE },
{ "WIDTH", K_WIDTH },
{ "ABSOLUTE", K_ABSOLUTE },
{ "CELL", K_CELL },
{ "CELLTYPE", K_CELLTYPE },
{ "DATE", K_DATE },
{ "COND", K_COND },
{ "CONDELSE", K_CONDELSE },
{ "DELAY", K_DELAY },
{ "DELAYFILE", K_DELAYFILE },
{ "DESIGN", K_DESIGN },
{ "DIVIDER", K_DIVIDER },
{ "HOLD", K_HOLD },
{ "INCREMENT", K_INCREMENT },
{ "INTERCONNECT", K_INTERCONNECT },
{ "INSTANCE", K_INSTANCE },
{ "IOPATH", K_IOPATH },
{ "PROCESS", K_PROCESS },
{ "PROGRAM", K_PROGRAM },
{ "RECREM", K_RECREM },
{ "RECOVERY", K_RECOVERY },
{ "REMOVAL", K_REMOVAL },
{ "SDFVERSION", K_SDFVERSION },
{ "SETUP", K_SETUP },
{ "SETUPHOLD", K_SETUPHOLD },
{ "TEMPERATURE", K_TEMPERATURE },
{ "TIMESCALE", K_TIMESCALE },
{ "TIMINGCHECK", K_TIMINGCHECK },
{ "VENDOR", K_VENDOR },
{ "VERSION", K_VERSION },
{ "VOLTAGE", K_VOLTAGE },
{ "WIDTH", K_WIDTH },
{ 0, IDENTIFIER }
};

View File

@ -1,7 +1,7 @@
%{
/*
* Copyright (c) 1998-2010 Stephen Williams (steve@icarus.com)
* Copyright (c) 1998-2014 Stephen Williams (steve@icarus.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -44,13 +44,15 @@ char sdf_use_hchar = '.';
struct sdf_delval_list_s delval_list;
};
%token K_ABSOLUTE K_CELL K_CELLTYPE K_COND K_DATE K_DELAYFILE K_DELAY K_DESIGN
%token K_DIVIDER K_HOLD K_INCREMENT K_INSTANCE K_INTERCONNECT K_IOPATH
%token K_NEGEDGE K_POSEDGE K_PROCESS K_PROGRAM K_RECREM K_RECOVERY
%token K_REMOVAL K_SDFVERSION K_SETUP K_SETUPHOLD K_TEMPERATURE
%token K_TIMESCALE K_TIMINGCHECK K_VENDOR K_VERSION K_VOLTAGE K_WIDTH
%token K_ABSOLUTE K_CELL K_CELLTYPE K_COND K_CONDELSE K_DATE K_DELAYFILE
%token K_DELAY K_DESIGN K_DIVIDER K_HOLD K_INCREMENT K_INSTANCE
%token K_INTERCONNECT K_IOPATH K_NEGEDGE K_POSEDGE K_PROCESS K_PROGRAM
%token K_RECREM K_RECOVERY K_REMOVAL K_SDFVERSION K_SETUP K_SETUPHOLD
%token K_TEMPERATURE K_TIMESCALE K_TIMINGCHECK K_VENDOR K_VERSION
%token K_VOLTAGE K_WIDTH
%token K_01 K_10 K_0Z K_Z1 K_1Z K_Z0
%token K_EQ K_NE K_CEQ K_CNE K_LOGICAL_ONE K_LOGICAL_ZERO
%token K_LAND K_LOR
%token HCHAR
%token <string_val> QSTRING IDENTIFIER
@ -70,6 +72,10 @@ char sdf_use_hchar = '.';
%type <delval_list> delval_list
%left K_LOR
%left K_LAND
%left K_EQ K_NE K_CEQ K_CNE
%%
source_file
@ -261,6 +267,26 @@ del_def
| '(' K_IOPATH error ')'
{ vpi_printf("%s:%d: SDF ERROR: Invalid/malformed IOPATH\n",
sdf_parse_path, @2.first_line); }
| '(' K_COND conditional_port_expr
'(' K_IOPATH port_spec port_instance delval_list ')' ')'
{
/* Skip conditional path back annotation for now. */
}
| '(' K_COND QSTRING conditional_port_expr
'(' K_IOPATH port_spec port_instance delval_list ')' ')'
{
/* Skip conditional path back annotation for now. */
}
| '(' K_COND error ')'
{ vpi_printf("%s:%d: SDF ERROR: Invalid/malformed COND\n",
sdf_parse_path, @2.first_line); }
| '(' K_CONDELSE '(' K_IOPATH port_spec port_instance delval_list ')' ')'
{
/* Skip ifnone back annotation for now. */
}
| '(' K_CONDELSE error ')'
{ vpi_printf("%s:%d: SDF ERROR: Invalid/malformed CONDELSE\n",
sdf_parse_path, @2.first_line); }
/* | '(' K_INTERCONNECT port_instance port_instance delval_list ')' */
| '(' K_INTERCONNECT port_interconnect port_interconnect delval_list ')'
{ if (sdf_flag_warning) vpi_printf("%s:%d: SDF WARNING: "
@ -322,6 +348,19 @@ timing_check_condition
| port_interconnect equality_operator scalar_constant
;
/* This is not complete! */
conditional_port_expr
: port
| scalar_constant
| '(' conditional_port_expr ')'
| conditional_port_expr K_LAND conditional_port_expr
| conditional_port_expr K_LOR conditional_port_expr
| conditional_port_expr K_EQ conditional_port_expr
| conditional_port_expr K_NE conditional_port_expr
| conditional_port_expr K_CEQ conditional_port_expr
| conditional_port_expr K_CNE conditional_port_expr
;
equality_operator
: K_EQ
| K_NE