Coverage Data Integration
To integrate Coverage Data into Simscope, you need to:
- Create Coverage TSV files.
- If you have an existing coverage file format, you should build a conversion script first.
- Create a parent Regression in Simscope to store the coverage under.
- Publish (import) coverage into Simscope.
Input Format
Field | Type | Description | Example Value |
---|---|---|---|
name | string | Coverage point name | a.b.c.my_coverage_point |
group | string | Parent coverage group (optional) | alpha |
location | string | file/line location (optional) | foo/bar.sv:1234 |
hits | int | Number of times the point was hit | 100 (or 0 indicates not hit) |
bins | int | For line coverage, this indicates the number of statement lines (use 0 or comma for normal coverage) | 0 |
Example Coverage TSV file
Simscope Coverage uses a TSV
(tab-separated-value) input file format.
Each line describes one coverage point, and each field is delimited by a <TAB>
character.
name group location hits bins
a.b.c.unused ChkAllPtFlushUnusedCheck tb/file1.sv 0 ,
a.b.c.full[0] 2D Array tb/file2.sv 1111 ,
a.b.c.full[1] 2D Array tb/file3.sv 400 ,
This example contains:
- Three coverage points
- Two coverage groups
- One coverage point has zero hits (ie uncovered)
- All coverage points are using default bins (via a single comma)
admin: Enabling Coverage in Simscope
Administrators: to enable coverage in Simscope, add the following to your
simscope.config
file:
[coverage]
enabled = true
# Optional: Coverage group separator to enable hierarchical tree grouping.
# This can be any string, and can also be multiple characters.
# - For example, cover group "a.b.c" with a groupseparator of "." would split into three hierarchical groups (a, b, and c)
#groupseparator = "."
# Optional: Sub-model separator: allow multiple coverage models in the same regression (suffix).
# Example using "." as separator: "myblock_smoke/123.top" and "myblock_smoke/123.fpu"
#submodelseparator = "."
# To enable formal coverage property tracking, add these settings.
#enableformal = true
# For 'bounded' proof properties, set this to the minimum number of cycles for a bounded pass.
# Any undetermined property with cycles below this value is a fail.
#minimumcycles = 5
Publishing Coverage models to Simscope
To publish (ie import) coverage databases into Simscope, run the simscope-publish-coverage
Python script with these arguments:
TSV
coverage file path.- Regression name to store under.
For example, to import mycov.tsv
into Regression daily/123
:
> bin/simscope-publish-coverage mycov.tsv --tunnel-config=simscope-tunnel.config --regr daily/123
If successful, you should see a response on the console similar to the following:
coverage ok: /home/pdq/mycov.tsv → daily/123
Delete coverage DB
To delete a coverage DB, use the --delete
CLI option.
Merge vs Replace DB
By default, if you publish to the same database location, the data will be merged with the previous DB's results.
- If you would like to replace the DB (instead of merging), add the
--replace
CLI option.
Alternative: Publishing via tunnel
You can publish a coverage TSV file directly via simscope-tunnel
client.
For example, to publish mycov.tsv
into daily/123
:
> bin/simscope-tunnel --config=simscope-tunnel.config --publish=coverage-update --regression=daily/123 \
mycov.tsv
Alternative: Curl publishing (using API tokens)
If you don't want to use Python and Tunnel to publish covearge, you can alternatively use
simscope-tunnel-publish.sh
to publish via curl
(which also requires an API Token).
Overwriting coverage
If you re-run simscope-publish-coverage
on an existing Regression, it will overwrite any
existing coverage.
Multiple coverage databases
Simscope supports multiple coverage models published into a single regression.
- This allows publishing separate coverage types (e.g. line, formal, functional).
- Or you can store separate coverage models for sub-units (e.g. block1, block2, etc).
To do this, your coverage model name needs a separator string, under the
configuration key submodelseparator
field.
For example, if you set the separator to "."
and upload two coverage models named as:
"alpha_cpu_cov/1024.top"
"alpha_cpu_cov/1024.ddr3"
Then Simscope will store 2 separate coverage models under a single parent regression:
alpha_cpu_cov/1024
top
ddr3
Here is an example showing 2 coverage models in a single regression: