From 286cb5a2b9dd4ab3bf95d6b1bdf3030846ea4daa Mon Sep 17 00:00:00 2001 From: mole99 Date: Wed, 8 Mar 2023 17:04:16 +0100 Subject: [PATCH 1/3] SDF: add more header output --- vpi/sdf_parse.y | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/vpi/sdf_parse.y b/vpi/sdf_parse.y index c735a06c6..4b3cf5175 100644 --- a/vpi/sdf_parse.y +++ b/vpi/sdf_parse.y @@ -108,8 +108,10 @@ sdf_header_item sdfversion : '(' K_SDFVERSION QSTRING ')' - { free($3); - } + { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Version: %s\n", + sdf_parse_path, @2.first_line, $3); + free($3); + } ; design_name @@ -160,7 +162,17 @@ hierarchy_divider voltage : '(' K_VOLTAGE rtriple ')' + { /* The value must be defined. */ + if (! $3.defined) { + vpi_printf("%s:%d: SDF ERROR: Chosen value not defined.\n", sdf_parse_path, @1.first_line); + } + else if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Voltage : %f\n", + sdf_parse_path, @2.first_line, $3.value); + } | '(' K_VOLTAGE signed_real_number ')' + { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Voltage : %f\n", + sdf_parse_path, @2.first_line, $3); + } ; process @@ -173,17 +185,27 @@ process temperature : '(' K_TEMPERATURE rtriple ')' + { /* The value must be defined. */ + if (! $3.defined) { + vpi_printf("%s:%d: SDF ERROR: Chosen value not defined.\n", sdf_parse_path, @1.first_line); + } + else if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Temperature : %f\n", + sdf_parse_path, @2.first_line, $3.value); + } | '(' K_TEMPERATURE signed_real_number ')' + { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Temperature : %f\n", + sdf_parse_path, @2.first_line, $3); + } ; time_scale : '(' K_TIMESCALE REAL_NUMBER IDENTIFIER ')' - { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: TIMESCALE : %f%s\n", + { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Timescale : %f%s\n", sdf_parse_path, @2.first_line, $3, $4); free($4); } | '(' K_TIMESCALE INTEGER IDENTIFIER ')' - { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: TIMESCALE : %lu%s\n", + { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Timescale : %lu%s\n", sdf_parse_path, @2.first_line, $3, $4); free($4); } From cca7d15cc4857f4695afd88767544ed17927802b Mon Sep 17 00:00:00 2001 From: mole99 Date: Wed, 8 Mar 2023 20:14:15 +0100 Subject: [PATCH 2/3] Add testcase for sdf header --- ivtest/gold/sdf_header-iverilog-stderr.gold | 0 ivtest/gold/sdf_header-iverilog-stdout.gold | 0 ivtest/gold/sdf_header-vvp-stderr.gold | 0 ivtest/gold/sdf_header-vvp-stdout.gold | 10 ++++++++++ ivtest/ivltests/sdf_header.sdf | 19 +++++++++++++++++++ ivtest/ivltests/sdf_header.v | 10 ++++++++++ ivtest/regress-vvp.list | 1 + ivtest/vvp_tests/sdf_header.json | 7 +++++++ 8 files changed, 47 insertions(+) create mode 100644 ivtest/gold/sdf_header-iverilog-stderr.gold create mode 100644 ivtest/gold/sdf_header-iverilog-stdout.gold create mode 100644 ivtest/gold/sdf_header-vvp-stderr.gold create mode 100644 ivtest/gold/sdf_header-vvp-stdout.gold create mode 100644 ivtest/ivltests/sdf_header.sdf create mode 100644 ivtest/ivltests/sdf_header.v create mode 100644 ivtest/vvp_tests/sdf_header.json diff --git a/ivtest/gold/sdf_header-iverilog-stderr.gold b/ivtest/gold/sdf_header-iverilog-stderr.gold new file mode 100644 index 000000000..e69de29bb diff --git a/ivtest/gold/sdf_header-iverilog-stdout.gold b/ivtest/gold/sdf_header-iverilog-stdout.gold new file mode 100644 index 000000000..e69de29bb diff --git a/ivtest/gold/sdf_header-vvp-stderr.gold b/ivtest/gold/sdf_header-vvp-stderr.gold new file mode 100644 index 000000000..e69de29bb diff --git a/ivtest/gold/sdf_header-vvp-stdout.gold b/ivtest/gold/sdf_header-vvp-stdout.gold new file mode 100644 index 000000000..4e75a32af --- /dev/null +++ b/ivtest/gold/sdf_header-vvp-stdout.gold @@ -0,0 +1,10 @@ +ivltests/sdf_header.sdf:2:SDF INFO: Version: 3.0 +ivltests/sdf_header.sdf:3:SDF INFO: Design: test +ivltests/sdf_header.sdf:4:SDF INFO: Date: Wed Mar 8 12:34:56 2023 +ivltests/sdf_header.sdf:5:SDF INFO: Vendor: No Vendor +ivltests/sdf_header.sdf:6:SDF INFO: Program: Human +ivltests/sdf_header.sdf:7:SDF INFO: Program Version: 1.0.0 +ivltests/sdf_header.sdf:9:SDF INFO: Voltage : 5.000000 +ivltests/sdf_header.sdf:10:SDF INFO: Process: best=0.65:nom=1.0:worst=1.8 +ivltests/sdf_header.sdf:11:SDF INFO: Temperature : 25.000000 +ivltests/sdf_header.sdf:12:SDF INFO: Timescale : 1ps diff --git a/ivtest/ivltests/sdf_header.sdf b/ivtest/ivltests/sdf_header.sdf new file mode 100644 index 000000000..bbde907af --- /dev/null +++ b/ivtest/ivltests/sdf_header.sdf @@ -0,0 +1,19 @@ +(DELAYFILE + (SDFVERSION "3.0") + (DESIGN "test") + (DATE "Wed Mar 8 12:34:56 2023") + (VENDOR "No Vendor") + (PROGRAM "Human") + (VERSION "1.0.0") + (DIVIDER /) + (VOLTAGE 5.5:5.0:4.5) + (PROCESS "best=0.65:nom=1.0:worst=1.8") + (TEMPERATURE -25.0:25.0:85.0) + (TIMESCALE 1 ps) + + // Do nothing + (CELL + (CELLTYPE "top") + (INSTANCE ) + ) +) diff --git a/ivtest/ivltests/sdf_header.v b/ivtest/ivltests/sdf_header.v new file mode 100644 index 000000000..84e4745f4 --- /dev/null +++ b/ivtest/ivltests/sdf_header.v @@ -0,0 +1,10 @@ +`timescale 1ns/1ps + +module top; + + initial begin + $sdf_annotate("ivltests/sdf_header.sdf", top); + end + +endmodule + diff --git a/ivtest/regress-vvp.list b/ivtest/regress-vvp.list index b1cc5750d..2dd09bb7a 100644 --- a/ivtest/regress-vvp.list +++ b/ivtest/regress-vvp.list @@ -35,3 +35,4 @@ struct_packed_write_read vvp_tests/struct_packed_write_read.json struct_packed_write_read2 vvp_tests/struct_packed_write_read2.json sv_foreach9 vvp_tests/sv_foreach9.json sv_foreach10 vvp_tests/sv_foreach10.json +sdf_header vvp_tests/sdf_header.json diff --git a/ivtest/vvp_tests/sdf_header.json b/ivtest/vvp_tests/sdf_header.json new file mode 100644 index 000000000..0a0698951 --- /dev/null +++ b/ivtest/vvp_tests/sdf_header.json @@ -0,0 +1,7 @@ +{ + "type" : "normal", + "source" : "sdf_header.v", + "gold" : "sdf_header", + "iverilog-args" : [ "-gspecify" ], + "vvp-args-extended" : [ "-sdf-verbose" ] +} From fd9f0b3c758f071fa3dfe5b6f69e3d68305797ca Mon Sep 17 00:00:00 2001 From: mole99 Date: Wed, 8 Mar 2023 20:51:44 +0100 Subject: [PATCH 3/3] Add divider to header output --- ivtest/gold/sdf_header-vvp-stdout.gold | 7 ++++--- vpi/sdf_parse.y | 27 +++++++++++++++++--------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/ivtest/gold/sdf_header-vvp-stdout.gold b/ivtest/gold/sdf_header-vvp-stdout.gold index 4e75a32af..0b6de0b8e 100644 --- a/ivtest/gold/sdf_header-vvp-stdout.gold +++ b/ivtest/gold/sdf_header-vvp-stdout.gold @@ -4,7 +4,8 @@ ivltests/sdf_header.sdf:4:SDF INFO: Date: Wed Mar 8 12:34:56 2023 ivltests/sdf_header.sdf:5:SDF INFO: Vendor: No Vendor ivltests/sdf_header.sdf:6:SDF INFO: Program: Human ivltests/sdf_header.sdf:7:SDF INFO: Program Version: 1.0.0 -ivltests/sdf_header.sdf:9:SDF INFO: Voltage : 5.000000 +ivltests/sdf_header.sdf:8:SDF INFO: Divider: "/" +ivltests/sdf_header.sdf:9:SDF INFO: Voltage: 5.000000 ivltests/sdf_header.sdf:10:SDF INFO: Process: best=0.65:nom=1.0:worst=1.8 -ivltests/sdf_header.sdf:11:SDF INFO: Temperature : 25.000000 -ivltests/sdf_header.sdf:12:SDF INFO: Timescale : 1ps +ivltests/sdf_header.sdf:11:SDF INFO: Temperature: 25.000000 +ivltests/sdf_header.sdf:12:SDF INFO: Timescale: 1ps diff --git a/vpi/sdf_parse.y b/vpi/sdf_parse.y index 4b3cf5175..50d4935d2 100644 --- a/vpi/sdf_parse.y +++ b/vpi/sdf_parse.y @@ -155,9 +155,18 @@ program_version ; hierarchy_divider - : '(' K_DIVIDER '.' ')' { sdf_use_hchar = '.'; } - | '(' K_DIVIDER '/' ')' { sdf_use_hchar = '/'; } - | '(' K_DIVIDER HCHAR ')' { /* sdf_use_hchar no-change */; } + : '(' K_DIVIDER '.' ')' + { sdf_use_hchar = '.'; + if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Divider: \"%c\"\n", sdf_parse_path, @1.first_line, sdf_use_hchar); + } + | '(' K_DIVIDER '/' ')' + { sdf_use_hchar = '/'; + if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Divider: \"%c\"\n", sdf_parse_path, @1.first_line, sdf_use_hchar); + } + | '(' K_DIVIDER HCHAR ')' + { /* sdf_use_hchar no-change */ + if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Divider: \"%c\"\n", sdf_parse_path, @1.first_line, sdf_use_hchar); + } ; voltage @@ -166,11 +175,11 @@ voltage if (! $3.defined) { vpi_printf("%s:%d: SDF ERROR: Chosen value not defined.\n", sdf_parse_path, @1.first_line); } - else if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Voltage : %f\n", + else if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Voltage: %f\n", sdf_parse_path, @2.first_line, $3.value); } | '(' K_VOLTAGE signed_real_number ')' - { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Voltage : %f\n", + { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Voltage: %f\n", sdf_parse_path, @2.first_line, $3); } ; @@ -189,23 +198,23 @@ temperature if (! $3.defined) { vpi_printf("%s:%d: SDF ERROR: Chosen value not defined.\n", sdf_parse_path, @1.first_line); } - else if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Temperature : %f\n", + else if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Temperature: %f\n", sdf_parse_path, @2.first_line, $3.value); } | '(' K_TEMPERATURE signed_real_number ')' - { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Temperature : %f\n", + { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Temperature: %f\n", sdf_parse_path, @2.first_line, $3); } ; time_scale : '(' K_TIMESCALE REAL_NUMBER IDENTIFIER ')' - { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Timescale : %f%s\n", + { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Timescale: %f%s\n", sdf_parse_path, @2.first_line, $3, $4); free($4); } | '(' K_TIMESCALE INTEGER IDENTIFIER ')' - { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Timescale : %lu%s\n", + { if (sdf_flag_inform) vpi_printf("%s:%d:SDF INFO: Timescale: %lu%s\n", sdf_parse_path, @2.first_line, $3, $4); free($4); }