Merge pull request #880 from mole99/master

Print more information about the SDF header
This commit is contained in:
Stephen Williams 2023-04-14 18:14:03 -07:00 committed by GitHub
commit b210eb8264
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 86 additions and 7 deletions

View File

View File

@ -0,0 +1,11 @@
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: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

View File

@ -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 )
)
)

View File

@ -0,0 +1,10 @@
`timescale 1ns/1ps
module top;
initial begin
$sdf_annotate("ivltests/sdf_header.sdf", top);
end
endmodule

View File

@ -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 struct_packed_write_read2 vvp_tests/struct_packed_write_read2.json
sv_foreach9 vvp_tests/sv_foreach9.json sv_foreach9 vvp_tests/sv_foreach9.json
sv_foreach10 vvp_tests/sv_foreach10.json sv_foreach10 vvp_tests/sv_foreach10.json
sdf_header vvp_tests/sdf_header.json

View File

@ -0,0 +1,7 @@
{
"type" : "normal",
"source" : "sdf_header.v",
"gold" : "sdf_header",
"iverilog-args" : [ "-gspecify" ],
"vvp-args-extended" : [ "-sdf-verbose" ]
}

View File

@ -108,8 +108,10 @@ sdf_header_item
sdfversion sdfversion
: '(' K_SDFVERSION QSTRING ')' : '(' 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 design_name
@ -153,14 +155,33 @@ program_version
; ;
hierarchy_divider hierarchy_divider
: '(' K_DIVIDER '.' ')' { sdf_use_hchar = '.'; } : '(' K_DIVIDER '.' ')'
| '(' K_DIVIDER '/' ')' { sdf_use_hchar = '/'; } { 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);
}
| '(' 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 voltage
: '(' K_VOLTAGE rtriple ')' : '(' 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 ')' | '(' 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 process
@ -173,17 +194,27 @@ process
temperature temperature
: '(' K_TEMPERATURE rtriple ')' : '(' 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 ')' | '(' 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 time_scale
: '(' K_TIMESCALE REAL_NUMBER IDENTIFIER ')' : '(' 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); sdf_parse_path, @2.first_line, $3, $4);
free($4); free($4);
} }
| '(' K_TIMESCALE INTEGER IDENTIFIER ')' | '(' 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); sdf_parse_path, @2.first_line, $3, $4);
free($4); free($4);
} }