From bd5c48eccd15d6cf5294cc43bc62079b804b36d5 Mon Sep 17 00:00:00 2001 From: "Sreeraj.R" Date: Sat, 10 Jan 2009 14:32:09 +0530 Subject: [PATCH] Added gsystem-verilog gen flag and 4 additional keywords For future system-verilog additions --- compiler.h | 1 + driver/main.c | 8 +++++++- lexor_keyword.gperf | 4 ++++ main.cc | 9 ++++++++- parse.y | 2 ++ 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/compiler.h b/compiler.h index a4cc0a0fb..0524c6abe 100644 --- a/compiler.h +++ b/compiler.h @@ -139,6 +139,7 @@ enum { GN_KEYWORDS_1364_1995 = 0x0001, GN_KEYWORDS_1364_2001_CONFIG = 0x0004, GN_KEYWORDS_1364_2005 = 0x0008, GN_KEYWORDS_VAMS_2_3 = 0x0010, + GN_KEYWORDS_1800_2005 = 0x0020, GN_KEYWORDS_ICARUS = 0x8000 }; extern int lexor_keyword_mask; diff --git a/driver/main.c b/driver/main.c index 267e6dfa0..31e2190ed 100644 --- a/driver/main.c +++ b/driver/main.c @@ -115,6 +115,7 @@ const char*gen_icarus = "icarus-misc"; const char*gen_io_range_error = "io-range-error"; const char*gen_strict_ca_eval = "no-strict-ca-eval"; const char*gen_verilog_ams = "no-verilog-ams"; +const char*gen_system_verilog = "no-system-verilog"; /* Boolean: true means use a default include dir, false means don't */ int gen_std_include = 1; @@ -611,6 +612,9 @@ int process_generation(const char*name) else if (strcmp(name,"no-verilog-ams") == 0) gen_verilog_ams = "no-verilog-ams"; + + else if (strcmp(name,"system-verilog") == 0) + gen_system_verilog = "system-verilog"; else { fprintf(stderr, "Unknown/Unsupported Language generation " @@ -626,7 +630,8 @@ int process_generation(const char*name) " xtypes | no-xtypes\n" " icarus-misc | no-icarus-misc\n" " io-range-error | no-io-range-error\n" - " strict-ca-eval | no-strict-ca-eval\n"); + " strict-ca-eval | no-strict-ca-eval\n" + " system-verilog\n"); return 1; } @@ -899,6 +904,7 @@ int main(int argc, char **argv) fprintf(iconfig_file, "generation:%s\n", gen_strict_ca_eval); fprintf(iconfig_file, "generation:%s\n", gen_verilog_ams); fprintf(iconfig_file, "generation:%s\n", gen_icarus); + fprintf(iconfig_file, "generation:%s\n", gen_system_verilog); fprintf(iconfig_file, "warnings:%s\n", warning_flags); fprintf(iconfig_file, "out:%s\n", opath); if (depfile) fprintf(iconfig_file, "depfile:%s\n", depfile); diff --git a/lexor_keyword.gperf b/lexor_keyword.gperf index 9cb72b281..c58be638f 100644 --- a/lexor_keyword.gperf +++ b/lexor_keyword.gperf @@ -17,10 +17,14 @@ access, GN_KEYWORDS_VAMS_2_3, K_access acos, GN_KEYWORDS_VAMS_2_3, K_acos acosh, GN_KEYWORDS_VAMS_2_3, K_acosh always, GN_KEYWORDS_1364_1995, K_always +always_comb, GN_KEYWORDS_1800_2005, K_always_comb +always_ff, GN_KEYWORDS_1800_2005, K_always_ff +always_latch, GN_KEYWORDS_1800_2005, K_always_latch analog, GN_KEYWORDS_VAMS_2_3, K_analog and, GN_KEYWORDS_1364_1995, K_and asin, GN_KEYWORDS_VAMS_2_3, K_asin asinh, GN_KEYWORDS_VAMS_2_3, K_asinh +assert, GN_KEYWORDS_1800_2005, K_assert assign, GN_KEYWORDS_1364_1995, K_assign atan, GN_KEYWORDS_VAMS_2_3, K_atan atan2, GN_KEYWORDS_VAMS_2_3, K_atan2 diff --git a/main.cc b/main.cc index ce6b35fb4..f947105b1 100644 --- a/main.cc +++ b/main.cc @@ -91,6 +91,7 @@ bool gn_specify_blocks_flag = true; bool gn_io_range_error_flag = true; bool gn_strict_ca_eval_flag = false; bool gn_verilog_ams_flag = false; +bool gn_system_verilog_flag = false; map flags; char*vpi_module_list = 0; @@ -252,7 +253,10 @@ static void process_generation_flag(const char*gen) } else if (strcmp(gen,"no-strict-ca-eval") == 0) { gn_strict_ca_eval_flag = false; - } else { + } else if (strcmp(gen,"system-verilog") == 0) { + gn_system_verilog_flag = true; + + } else { } } @@ -660,6 +664,9 @@ int main(int argc, char*argv[]) if (gn_cadence_types_flag) lexor_keyword_mask |= GN_KEYWORDS_ICARUS; + + if (gn_system_verilog_flag) + lexor_keyword_mask |= GN_KEYWORDS_1800_2005; if (gn_verilog_ams_flag) lexor_keyword_mask |= GN_KEYWORDS_VAMS_2_3; diff --git a/parse.y b/parse.y index 44c1e6cff..d733238eb 100644 --- a/parse.y +++ b/parse.y @@ -241,6 +241,8 @@ static PECallFunction*make_call_function(perm_string tn, PExpr*arg1, PExpr*arg2) %token K_wone K_wor K_xnor K_xor %token K_Shold K_Speriod K_Srecovery K_Srecrem K_Ssetup K_Swidth K_Ssetuphold +%token K_always_comb K_always_ff K_always_latch K_assert + %token KK_attribute %type from_exclude