Showing preview only (1,285K chars total). Download the full file or copy to clipboard to get everything.
Repository: chipsalliance/sv-tests
Branch: master
Commit: 69ec9d1f8a77
Files: 1153
Total size: 1.0 MB
Directory structure:
gitextract_v_hu2ggc/
├── .editorconfig
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ ├── comment-pr.yml
│ ├── lint-review.yml
│ ├── report.sh
│ ├── summary.sh
│ ├── sv-tests-ci.yml
│ ├── sv-tests-code-quality.yml
│ └── update_report.sh
├── .gitignore
├── .gitmodules
├── .style.yapf
├── AUTHORS
├── LICENSE
├── Makefile
├── README.md
├── conf/
│ ├── environment.yml
│ ├── feature-analyzer/
│ │ ├── keywords.yml
│ │ ├── operators.yml
│ │ └── tags.yml
│ ├── fusesoc-configs/
│ │ ├── ibex-sim.yml
│ │ ├── veer-eh1-sim.yml
│ │ └── veer-eh1-synth.yml
│ ├── generators/
│ │ ├── meta-path/
│ │ │ ├── basejump.json
│ │ │ ├── hdlconvertor.json
│ │ │ ├── hdlconvertor_std2012.json
│ │ │ ├── hdlconvertor_std2017.json
│ │ │ ├── projf-explore.json
│ │ │ ├── utd-systemverilog.json
│ │ │ ├── yosys-asicworld.json
│ │ │ ├── yosys-errors.json
│ │ │ ├── yosys-memories.json
│ │ │ ├── yosys-simple.json
│ │ │ ├── yosys-sva.json
│ │ │ └── yosys-svinterfaces.json
│ │ └── templates/
│ │ ├── assignment-sim.json
│ │ ├── assignment.json
│ │ ├── binary.json
│ │ ├── encapsulation-fail.json
│ │ ├── encapsulation-success.json
│ │ ├── equality.json
│ │ ├── force-assignments.json
│ │ ├── integers.json
│ │ ├── keywords.json
│ │ ├── logical-equiv.json
│ │ ├── logical-impl.json
│ │ ├── logical.json
│ │ ├── nets.json
│ │ ├── operators-sim.json
│ │ ├── sampled-functions-gclk.json
│ │ ├── sampled-functions.json
│ │ ├── simple-logical.json
│ │ ├── simple-operators-sim.json
│ │ ├── simple-unary.json
│ │ ├── trig-functions.json
│ │ ├── unary.json
│ │ ├── uniquecase.json
│ │ ├── uvm-classes_0.json
│ │ ├── uvm-classes_0.sv
│ │ ├── uvm-classes_1.json
│ │ ├── uvm-classes_1.sv
│ │ ├── uvm-classes_2.json
│ │ ├── uvm-classes_3.json
│ │ ├── uvm-classes_3.sv
│ │ ├── wildcard-const.json
│ │ └── wildcard.json
│ ├── lrm.conf
│ ├── meta-tags.conf
│ ├── report/
│ │ ├── code-template.html
│ │ ├── code.css
│ │ ├── details-view.css
│ │ ├── filter.js
│ │ ├── filter_ui_test.py
│ │ ├── footer.html
│ │ ├── history-graph-template.html
│ │ ├── log-template.html
│ │ ├── log.css
│ │ ├── navbar.html
│ │ ├── report-template.html
│ │ ├── report.css
│ │ └── report.js
│ ├── requirements.txt
│ └── runners/
│ └── libs.json
├── generators/
│ ├── ariane
│ ├── black-parrot
│ ├── easyUVM
│ ├── fusesoc
│ ├── fx68k
│ ├── ivtest
│ ├── path_generator
│ ├── rggen
│ ├── rsd
│ ├── scr1
│ ├── template_generator
│ ├── tnoc
│ ├── veer-config
│ └── yosys_hana
├── tests/
│ ├── README.md
│ ├── chapter-10/
│ │ ├── 10.3--proc-assignment--bad.sv
│ │ ├── 10.3.1--net-decl-assignment.sv
│ │ ├── 10.3.1--one-net.sv
│ │ ├── 10.3.2--cont-assignment.sv
│ │ ├── 10.3.3--cont-assignment-delay.sv
│ │ ├── 10.3.3--cont-assignment-net-delay.sv
│ │ ├── 10.4.1--blocking-assignment.sv
│ │ ├── 10.4.2--non-blocking-assignment.sv
│ │ ├── 10.6.1--assign-deassign.sv
│ │ └── 10.6.2--force-release.sv
│ ├── chapter-11/
│ │ ├── 11.10--string_bit_array-sim.sv
│ │ ├── 11.10--string_bit_array.sv
│ │ ├── 11.10.1--string_compare.sv
│ │ ├── 11.10.1--string_concat.sv
│ │ ├── 11.10.1--string_copy.sv
│ │ ├── 11.10.3--empty_string-sim.sv
│ │ ├── 11.10.3--empty_string.sv
│ │ ├── 11.11--min_max_avg_delay.sv
│ │ ├── 11.12--let_construct.sv
│ │ ├── 11.3.5--expr_short_circuit.sv
│ │ ├── 11.3.6--assign_in_exp-sim.sv
│ │ ├── 11.3.6--assign_in_exp.sv
│ │ ├── 11.3.6--assign_in_expr-sim.sv
│ │ ├── 11.3.6--assign_in_expr.sv
│ │ ├── 11.3.6--assign_in_expr_inv.sv
│ │ ├── 11.3.6--assign_in_expression-sim.sv
│ │ ├── 11.3.6--assign_in_expression.sv
│ │ ├── 11.3.6--assignment_in_expression-sim.sv
│ │ ├── 11.3.6--assignment_in_expression.sv
│ │ ├── 11.3.6--two_assign_in_expr-sim.sv
│ │ ├── 11.3.6--two_assign_in_expr.sv
│ │ ├── 11.4.1--assignment-sim.sv
│ │ ├── 11.4.10--arith-shift-assignment-signed.sv
│ │ ├── 11.4.10--arith-shift-assignment-unsigned.sv
│ │ ├── 11.4.10--arith-shift-signed.sv
│ │ ├── 11.4.10--arith-shift-unsigned.sv
│ │ ├── 11.4.11--cond_op-sim.sv
│ │ ├── 11.4.11--cond_op.sv
│ │ ├── 11.4.12--concat_op-bit_select.sv
│ │ ├── 11.4.12--concat_op-sim.sv
│ │ ├── 11.4.12--concat_op.sv
│ │ ├── 11.4.12.1--nested_repl_op-sim.sv
│ │ ├── 11.4.12.1--nested_repl_op.sv
│ │ ├── 11.4.12.1--repl_op-sim.sv
│ │ ├── 11.4.12.1--repl_op.sv
│ │ ├── 11.4.12.2--string_concat_op.sv
│ │ ├── 11.4.12.2--string_repl_op.sv
│ │ ├── 11.4.13--set_member-sim.sv
│ │ ├── 11.4.13--set_member.sv
│ │ ├── 11.4.14.1--stream_concat-sim.sv
│ │ ├── 11.4.14.1--stream_concat.sv
│ │ ├── 11.4.14.2--reorder_stream-sim.sv
│ │ ├── 11.4.14.2--reorder_stream.sv
│ │ ├── 11.4.14.2--reorder_stream_byte-sim.sv
│ │ ├── 11.4.14.2--reorder_stream_byte.sv
│ │ ├── 11.4.14.3--unpack_stream-sim.sv
│ │ ├── 11.4.14.3--unpack_stream.sv
│ │ ├── 11.4.14.3--unpack_stream_inv.sv
│ │ ├── 11.4.14.3--unpack_stream_pad-sim.sv
│ │ ├── 11.4.14.3--unpack_stream_pad.sv
│ │ ├── 11.4.14.4--dynamic_array_stream-sim.sv
│ │ ├── 11.4.14.4--dynamic_array_stream.sv
│ │ ├── 11.4.14.4--dynamic_array_stream_with.sv
│ │ ├── 11.4.2--unary_op_dec-sim.sv
│ │ ├── 11.4.2--unary_op_dec.sv
│ │ ├── 11.4.2--unary_op_inc-sim.sv
│ │ ├── 11.4.2--unary_op_inc.sv
│ │ ├── 11.4.5--equality-op.sv
│ │ ├── 11.5.1--idx_neg_part_select-sim.sv
│ │ ├── 11.5.1--idx_neg_part_select.sv
│ │ ├── 11.5.1--idx_pos_part_select-sim.sv
│ │ ├── 11.5.1--idx_pos_part_select.sv
│ │ ├── 11.5.1--idx_select-sim.sv
│ │ ├── 11.5.1--idx_select.sv
│ │ ├── 11.5.1--non_idx_part_select-sim.sv
│ │ ├── 11.5.1--non_idx_part_select.sv
│ │ ├── 11.5.2--array_addressing-sim.sv
│ │ ├── 11.5.2--array_addressing.sv
│ │ ├── 11.5.2--multi_dim_array_addressing-sim.sv
│ │ ├── 11.5.2--multi_dim_array_addressing.sv
│ │ ├── 11.7--signed_func-sim.sv
│ │ ├── 11.7--signed_func.sv
│ │ ├── 11.7--unsigned_func-sim.sv
│ │ ├── 11.7--unsigned_func.sv
│ │ ├── 11.9--tagged_union.sv
│ │ ├── 11.9--tagged_union_member_access-sim.sv
│ │ ├── 11.9--tagged_union_member_access.sv
│ │ ├── 11.9--tagged_union_member_access_inv.sv
│ │ └── simple/
│ │ ├── 11.4.11--simple_cond_op-sim.sv
│ │ ├── 11.4.12--simple_concat_op-sim.sv
│ │ ├── 11.4.12.1--simple_repl_op-sim.sv
│ │ ├── 11.4.13--simple_set_member-sim.sv
│ │ ├── 11.4.14.3--simple_unpack_stream-sim.sv
│ │ ├── 11.5.1--simple_idx_neg_part_select-sim.sv
│ │ ├── 11.5.1--simple_idx_pos_part_select-sim.sv
│ │ ├── 11.5.1--simple_idx_select-sim.sv
│ │ ├── 11.5.1--simple_non_idx_part_select-sim.sv
│ │ └── 11.5.2--simple_array_addressing-sim.sv
│ ├── chapter-12/
│ │ ├── 12.4--if.sv
│ │ ├── 12.4--if_else.sv
│ │ ├── 12.4.1--if_else_if.sv
│ │ ├── 12.4.2--priority_if.sv
│ │ ├── 12.4.2--unique0_if.sv
│ │ ├── 12.4.2--unique_if.sv
│ │ ├── 12.5--case.sv
│ │ ├── 12.5.1--casex.sv
│ │ ├── 12.5.1--casez.sv
│ │ ├── 12.5.2--case_const.sv
│ │ ├── 12.5.4--case_set.sv
│ │ ├── 12.6.1--case_pattern.sv
│ │ ├── 12.6.1--casex_pattern.sv
│ │ ├── 12.6.1--casez_pattern.sv
│ │ ├── 12.6.2--if_pattern.sv
│ │ ├── 12.6.3--conditional_pattern.sv
│ │ ├── 12.7.1--for.sv
│ │ ├── 12.7.2--repeat.sv
│ │ ├── 12.7.3--foreach-synth.sv
│ │ ├── 12.7.3--foreach.sv
│ │ ├── 12.7.4--while.sv
│ │ ├── 12.7.5--dowhile.sv
│ │ ├── 12.7.6--forever.sv
│ │ ├── 12.8--break.sv
│ │ ├── 12.8--continue.sv
│ │ ├── 12.8--return.sv
│ │ └── 12.8--return_val.sv
│ ├── chapter-13/
│ │ ├── 13.3--task-label.sv
│ │ ├── 13.3--task.sv
│ │ ├── 13.3.1--task-automatic.sv
│ │ ├── 13.3.1--task-static.sv
│ │ ├── 13.4--function-label.sv
│ │ ├── 13.4--function.sv
│ │ ├── 13.4.1--function-return-assignment.sv
│ │ ├── 13.4.1--function-return.sv
│ │ ├── 13.4.1--function-void-return.sv
│ │ ├── 13.4.2--function-automatic.sv
│ │ ├── 13.4.2--function-recursive.sv
│ │ ├── 13.4.2--function-static.sv
│ │ ├── 13.4.3--const-function.sv
│ │ ├── 13.4.4--fork-invalid.sv
│ │ └── 13.4.4--fork-valid.sv
│ ├── chapter-14/
│ │ ├── 14.3--clocking-block-signals-error.sv
│ │ ├── 14.3--clocking-block-signals.sv
│ │ ├── 14.3--clocking-block.sv
│ │ ├── 14.3--default-clocking-block.sv
│ │ └── 14.3--global-clocking-block.sv
│ ├── chapter-15/
│ │ ├── 15.4--mailbox-blocking.sv
│ │ ├── 15.4--mailbox-non-blocking.sv
│ │ ├── 15.5.1--named-event-trigger-blocking.sv
│ │ ├── 15.5.1--named-event-trigger-non-blocking.sv
│ │ └── 15.5.2--named-event-wait.sv
│ ├── chapter-16/
│ │ ├── 16.10--property-local-var-fail.sv
│ │ ├── 16.10--property-local-var-uvm.sv
│ │ ├── 16.10--property-local-var.sv
│ │ ├── 16.10--sequence-local-var-fail.sv
│ │ ├── 16.10--sequence-local-var-uvm.sv
│ │ ├── 16.10--sequence-local-var.sv
│ │ ├── 16.11--sequence-subroutine-uvm.sv
│ │ ├── 16.12--property-disable-iff.sv
│ │ ├── 16.12--property-disj.sv
│ │ ├── 16.12--property-iff.sv
│ │ ├── 16.12--property-interface-prec-uvm.sv
│ │ ├── 16.12--property-interface-uvm.sv
│ │ ├── 16.12--property-prec-uvm.sv
│ │ ├── 16.12--property-prec.sv
│ │ ├── 16.12--property-uvm.sv
│ │ ├── 16.12--property.sv
│ │ ├── 16.13--sequence-multiclock-uvm.sv
│ │ ├── 16.14--assume-property-uvm.sv
│ │ ├── 16.14--assume-property.sv
│ │ ├── 16.15--property-disable-iff-fail.sv
│ │ ├── 16.15--property-disable-iff.sv
│ │ ├── 16.15--property-iff-uvm.sv
│ │ ├── 16.17--expect-uvm.sv
│ │ ├── 16.17--expect.sv
│ │ ├── 16.2--assert-final-uvm.sv
│ │ ├── 16.2--assert-final.sv
│ │ ├── 16.2--assert-uvm.sv
│ │ ├── 16.2--assert.sv
│ │ ├── 16.2--assert0-uvm.sv
│ │ ├── 16.2--assert0.sv
│ │ ├── 16.2--assume-final.sv
│ │ ├── 16.2--assume-uvm.sv
│ │ ├── 16.2--assume.sv
│ │ ├── 16.2--assume0.sv
│ │ ├── 16.2--cover-final.sv
│ │ ├── 16.2--cover.sv
│ │ ├── 16.2--cover0.sv
│ │ ├── 16.7--sequence-and-range-uvm.sv
│ │ ├── 16.7--sequence-and-uvm.sv
│ │ ├── 16.7--sequence-intersect-uvm.sv
│ │ ├── 16.7--sequence-or-uvm.sv
│ │ ├── 16.7--sequence-throughout-uvm.sv
│ │ ├── 16.7--sequence-uvm.sv
│ │ ├── 16.7--sequence.sv
│ │ ├── 16.9--sequence-changed-uvm.sv
│ │ ├── 16.9--sequence-cons-repetition.sv
│ │ ├── 16.9--sequence-fell-uvm.sv
│ │ ├── 16.9--sequence-goto-repetition.sv
│ │ ├── 16.9--sequence-noncons-repetition.sv
│ │ ├── 16.9--sequence-past-uvm.sv
│ │ ├── 16.9--sequence-rose-uvm.sv
│ │ └── 16.9--sequence-stable-uvm.sv
│ ├── chapter-18/
│ │ ├── 18.10--dynamic-constraint-modification_0.sv
│ │ ├── 18.11--in-line-random-variable-control_0.sv
│ │ ├── 18.11--in-line-random-variable-control_1.sv
│ │ ├── 18.11.1--in-line-constraint-checker_0.sv
│ │ ├── 18.11.1--in-line-constraint-checker_1.sv
│ │ ├── 18.12--randomization-of-scope-variables_0.sv
│ │ ├── 18.12--randomization-of-scope-variables_1.sv
│ │ ├── 18.12.1--adding-constraints-to-scope-variables_0.sv
│ │ ├── 18.12.1--adding-constraints-to-scope-variables_1.sv
│ │ ├── 18.13.1--urandom_0.sv
│ │ ├── 18.13.1--urandom_1.sv
│ │ ├── 18.13.1--urandom_2.sv
│ │ ├── 18.13.1--urandom_3.sv
│ │ ├── 18.13.2--urandom_range_0.sv
│ │ ├── 18.13.2--urandom_range_1.sv
│ │ ├── 18.13.2--urandom_range_2.sv
│ │ ├── 18.13.2--urandom_range_3.sv
│ │ ├── 18.13.3--srandom_0.sv
│ │ ├── 18.13.4--get_randstate_0.sv
│ │ ├── 18.13.5--set_randstate_0.sv
│ │ ├── 18.14--random-stability_0.sv
│ │ ├── 18.14--random-stability_1.sv
│ │ ├── 18.14--random-stability_2.sv
│ │ ├── 18.14--random-stability_3.sv
│ │ ├── 18.14.2--thread-stability_0.sv
│ │ ├── 18.14.2--thread-stability_1.sv
│ │ ├── 18.14.3--object-stability_0.sv
│ │ ├── 18.14.3--object-stability_1.sv
│ │ ├── 18.15--manually-seeding-randomize_0.sv
│ │ ├── 18.15--manually-seeding-randomize_1.sv
│ │ ├── 18.16--random-weighted-case-randcase_0.sv
│ │ ├── 18.16--random-weighted-case-randcase_2.sv
│ │ ├── 18.17--random-sequence-generation-randsequence_0.sv
│ │ ├── 18.17--random-sequence-generation-randsequence_2.sv
│ │ ├── 18.17.1--random-production-weights_0.sv
│ │ ├── 18.17.2--if-else-production-statements_0.sv
│ │ ├── 18.17.2--if-else-production-statements_0_fail.sv
│ │ ├── 18.17.2--if-else-production-statements_2.sv
│ │ ├── 18.17.2--if-else-production-statements_2_fail.sv
│ │ ├── 18.17.3--case-production-statements_0.sv
│ │ ├── 18.17.3--case-production-statements_0_fail.sv
│ │ ├── 18.17.4--repeat-production-statements_0.sv
│ │ ├── 18.17.5--interleaving-productions-rand-join_0.sv
│ │ ├── 18.17.5--interleaving-productions-rand-join_2.sv
│ │ ├── 18.17.6--aborting-productions-break-and-return_0.sv
│ │ ├── 18.17.6--aborting-productions-break-and-return_2.sv
│ │ ├── 18.17.6--aborting-productions-break-and-return_2_fail.sv
│ │ ├── 18.17.7--value-passing-between-productions_0.sv
│ │ ├── 18.4.1--rand-modifier.sv
│ │ ├── 18.4.2--randc-modifier.sv
│ │ ├── 18.5--constraint-blocks_0.sv
│ │ ├── 18.5--constraint-blocks_1.sv
│ │ ├── 18.5.1--explicit-external-constraint_0.sv
│ │ ├── 18.5.1--explicit-external-constraint_1.sv
│ │ ├── 18.5.1--explicit-external-constraint_2.sv
│ │ ├── 18.5.1--implicit-external-constraint_0.sv
│ │ ├── 18.5.1--implicit-external-constraint_1.sv
│ │ ├── 18.5.1--implicit-external-constraint_2.sv
│ │ ├── 18.5.10--variable-ordering_0.sv
│ │ ├── 18.5.10--variable-ordering_1.sv
│ │ ├── 18.5.11--static-constraint-blocks_0.sv
│ │ ├── 18.5.11--static-constraint-blocks_1.sv
│ │ ├── 18.5.12--functions-in-constraint_0.sv
│ │ ├── 18.5.12--functions-in-constraint_1.sv
│ │ ├── 18.5.13--constraint-guards_0.sv
│ │ ├── 18.5.13--constraint-guards_1.sv
│ │ ├── 18.5.14--soft-constraints_0.sv
│ │ ├── 18.5.14--soft-constraints_1.sv
│ │ ├── 18.5.14--soft-constraints_2.sv
│ │ ├── 18.5.14.1--soft-constraint-priorities_0.sv
│ │ ├── 18.5.14.1--soft-constraint-priorities_1.sv
│ │ ├── 18.5.14.1--soft-constraint-priorities_2.sv
│ │ ├── 18.5.14.1--soft-constraint-priorities_3.sv
│ │ ├── 18.5.14.1--soft-constraint-priorities_4.sv
│ │ ├── 18.5.14.2--discarding-soft-constraints_0.sv
│ │ ├── 18.5.14.2--discarding-soft-constraints_1.sv
│ │ ├── 18.5.14.2--discarding-soft-constraints_2.sv
│ │ ├── 18.5.14.2--discarding-soft-constraints_3.sv
│ │ ├── 18.5.14.2--discarding-soft-constraints_5.sv
│ │ ├── 18.5.2--constraint-inheritance_0.sv
│ │ ├── 18.5.2--constraint-inheritance_1.sv
│ │ ├── 18.5.2--pure-constraint_0.sv
│ │ ├── 18.5.2--pure-constraint_1.sv
│ │ ├── 18.5.2--pure-constraint_2.sv
│ │ ├── 18.5.2--pure-constraint_3.sv
│ │ ├── 18.5.3--set-membership_0.sv
│ │ ├── 18.5.3--set-membership_1.sv
│ │ ├── 18.5.4--distribution_0.sv
│ │ ├── 18.5.4--distribution_1.sv
│ │ ├── 18.5.4--distribution_2.sv
│ │ ├── 18.5.5--uniqueness-constraints_0.sv
│ │ ├── 18.5.5--uniqueness-constraints_1.sv
│ │ ├── 18.5.6--implication_0.sv
│ │ ├── 18.5.6--implication_1.sv
│ │ ├── 18.5.7--if-else-constraints_0.sv
│ │ ├── 18.5.7--if-else-constraints_1.sv
│ │ ├── 18.5.7--if-else-constraints_2.sv
│ │ ├── 18.5.7--if-else-constraints_3.sv
│ │ ├── 18.5.7--if-else-constraints_4.sv
│ │ ├── 18.5.8.1--foreach-iterative-constraints_0.sv
│ │ ├── 18.5.8.1--foreach-iterative-constraints_1.sv
│ │ ├── 18.5.8.2--array-reduction-iterative-constraints_0.sv
│ │ ├── 18.5.8.2--array-reduction-iterative-constraints_1.sv
│ │ ├── 18.5.9--global-constraints_0.sv
│ │ ├── 18.5.9--global-constraints_1.sv
│ │ ├── 18.6.1--randomize-method_0.sv
│ │ ├── 18.6.2--post-randomize_method_0.sv
│ │ ├── 18.6.2--post-randomize_method_1.sv
│ │ ├── 18.6.2--pre-randomize-method_0.sv
│ │ ├── 18.6.2--pre-randomize-method_1.sv
│ │ ├── 18.6.3--behavior-of-randomization-methods_0.sv
│ │ ├── 18.6.3--behavior-of-randomization-methods_1.sv
│ │ ├── 18.6.3--behavior-of-randomization-methods_2.sv
│ │ ├── 18.6.3--behavior-of-randomization-methods_3.sv
│ │ ├── 18.6.3--behavior-of-randomization-methods_4.sv
│ │ ├── 18.6.3--behavior-of-randomization-methods_5.sv
│ │ ├── 18.7--in-line-constraints--randomize_0.sv
│ │ ├── 18.7--in-line-constraints--randomize_1.sv
│ │ ├── 18.7--in-line-constraints--randomize_2.sv
│ │ ├── 18.7--in-line-constraints--randomize_3.sv
│ │ ├── 18.7--in-line-constraints--randomize_4.sv
│ │ ├── 18.7--in-line-constraints--randomize_5.sv
│ │ ├── 18.7--in-line-constraints--randomize_6.sv
│ │ ├── 18.7.1--local-scope-resolution_0.sv
│ │ ├── 18.7.1--local-scope-resolution_1.sv
│ │ ├── 18.8--disabling-random-variables-with-rand_mode_0.sv
│ │ ├── 18.8--disabling-random-variables-with-rand_mode_1.sv
│ │ ├── 18.8--disabling-random-variables-with-rand_mode_2.sv
│ │ ├── 18.8--disabling-random-variables-with-rand_mode_3.sv
│ │ ├── 18.8--disabling-random-variables-with-rand_mode_4.sv
│ │ ├── 18.8--disabling-random-variables-with-rand_mode_5.sv
│ │ ├── 18.9--controlling-constraints-with-constraint_mode_0.sv
│ │ ├── 18.9--controlling-constraints-with-constraint_mode_1.sv
│ │ └── 18.9--controlling-constraints-with-constraint_mode_2.sv
│ ├── chapter-20/
│ │ ├── 20.10--error.sv
│ │ ├── 20.10--fatal.sv
│ │ ├── 20.10--info.sv
│ │ ├── 20.10--warning.sv
│ │ ├── 20.14--coverage.sv
│ │ ├── 20.15--dist_chi_square.sv
│ │ ├── 20.15--dist_erlang.sv
│ │ ├── 20.15--dist_exponential.sv
│ │ ├── 20.15--dist_normal.sv
│ │ ├── 20.15--dist_poisson.sv
│ │ ├── 20.15--dist_t.sv
│ │ ├── 20.15--dist_uniform.sv
│ │ ├── 20.15--random.sv
│ │ ├── 20.2--exit.sv
│ │ ├── 20.2--finish.sv
│ │ ├── 20.2--stop.sv
│ │ ├── 20.3--realtime.sv
│ │ ├── 20.3--stime.sv
│ │ ├── 20.3--time.sv
│ │ ├── 20.4--printtimescale-hier.sv
│ │ ├── 20.4--printtimescale.sv
│ │ ├── 20.4--timeformat.sv
│ │ ├── 20.5--itor.sv
│ │ ├── 20.5--real-bits-conv.sv
│ │ ├── 20.5--rtoi.sv
│ │ ├── 20.5--shortreal-bits-conv.sv
│ │ ├── 20.6--bits.sv
│ │ ├── 20.6--bits_type.sv
│ │ ├── 20.6--isunbounded.sv
│ │ ├── 20.6--typename.sv
│ │ ├── 20.6--typename_type.sv
│ │ ├── 20.7--array-queries-multi-dim.sv
│ │ ├── 20.7--array-queries.sv
│ │ ├── 20.8--atan2.sv
│ │ ├── 20.8--ceil.sv
│ │ ├── 20.8--clog2.sv
│ │ ├── 20.8--exp.sv
│ │ ├── 20.8--floor.sv
│ │ ├── 20.8--hypot.sv
│ │ ├── 20.8--ln.sv
│ │ ├── 20.8--log10.sv
│ │ ├── 20.8--pow.sv
│ │ ├── 20.8--sqrt.sv
│ │ ├── 20.9--countbits.sv
│ │ ├── 20.9--isunknown.sv
│ │ ├── 20.9--onehot.sv
│ │ └── 20.9--onehot0.sv
│ ├── chapter-21/
│ │ ├── 21.2--display-boh.sv
│ │ ├── 21.2--display.sv
│ │ ├── 21.2--monitor.sv
│ │ ├── 21.2--strobe.sv
│ │ ├── 21.2--write-boh.sv
│ │ ├── 21.2--write.sv
│ │ ├── 21.3--fdisplay-boh.sv
│ │ ├── 21.3--fdisplay.sv
│ │ ├── 21.3--feof.sv
│ │ ├── 21.3--ferror.sv
│ │ ├── 21.3--fflush.sv
│ │ ├── 21.3--fgetc.sv
│ │ ├── 21.3--fgets.sv
│ │ ├── 21.3--file.sv
│ │ ├── 21.3--fmonitor.sv
│ │ ├── 21.3--fpos.sv
│ │ ├── 21.3--fread.sv
│ │ ├── 21.3--fscanf.sv
│ │ ├── 21.3--fstrobe.sv
│ │ ├── 21.3--fwrite-boh.sv
│ │ ├── 21.3--fwrite.sv
│ │ ├── 21.3--sscanf.sv
│ │ ├── 21.3--ungetc.sv
│ │ ├── 21.4--readmemb.sv
│ │ ├── 21.4--readmemh.sv
│ │ ├── 21.6--test.sv
│ │ ├── 21.6--value.sv
│ │ ├── 21.7--dumpfile.sv
│ │ └── 21.7--dumpports.sv
│ ├── chapter-22/
│ │ ├── 22.10--celldefine-basic-1.sv
│ │ ├── 22.10--celldefine-basic-2.sv
│ │ ├── 22.11--pragma-basic.sv
│ │ ├── 22.11--pragma-complex.sv
│ │ ├── 22.11--pragma-invalid.sv
│ │ ├── 22.11--pragma-nested.sv
│ │ ├── 22.11--pragma-number-multi.sv
│ │ ├── 22.11--pragma-number.sv
│ │ ├── 22.12--line-basic.sv
│ │ ├── 22.12--line-complex.sv
│ │ ├── 22.12--line-illegal-1.sv
│ │ ├── 22.12--line-illegal-2.sv
│ │ ├── 22.12--line-illegal-3.sv
│ │ ├── 22.12--line-illegal-4.sv
│ │ ├── 22.12--line-illegal-5.sv
│ │ ├── 22.3--resetall_basic.sv
│ │ ├── 22.3--resetall_illegal.sv
│ │ ├── 22.3--resetall_multiple.sv
│ │ ├── 22.4--check_included_definitions.sv
│ │ ├── 22.4--include_basic.sv
│ │ ├── 22.4--include_basic_rpath.sv
│ │ ├── 22.4--include_from_other_directory.sv
│ │ ├── 22.4--include_via_define.sv
│ │ ├── 22.4--include_with_comment.sv
│ │ ├── 22.5.1--define-expansion_1.sv
│ │ ├── 22.5.1--define-expansion_10.sv
│ │ ├── 22.5.1--define-expansion_11.sv
│ │ ├── 22.5.1--define-expansion_12.sv
│ │ ├── 22.5.1--define-expansion_13.sv
│ │ ├── 22.5.1--define-expansion_14.sv
│ │ ├── 22.5.1--define-expansion_15.sv
│ │ ├── 22.5.1--define-expansion_16.sv
│ │ ├── 22.5.1--define-expansion_17.sv
│ │ ├── 22.5.1--define-expansion_18.sv
│ │ ├── 22.5.1--define-expansion_19.sv
│ │ ├── 22.5.1--define-expansion_2.sv
│ │ ├── 22.5.1--define-expansion_20.sv
│ │ ├── 22.5.1--define-expansion_21.sv
│ │ ├── 22.5.1--define-expansion_22.sv
│ │ ├── 22.5.1--define-expansion_23.sv
│ │ ├── 22.5.1--define-expansion_24.sv
│ │ ├── 22.5.1--define-expansion_25.sv
│ │ ├── 22.5.1--define-expansion_26.sv
│ │ ├── 22.5.1--define-expansion_3.sv
│ │ ├── 22.5.1--define-expansion_4.sv
│ │ ├── 22.5.1--define-expansion_5.sv
│ │ ├── 22.5.1--define-expansion_6.sv
│ │ ├── 22.5.1--define-expansion_7.sv
│ │ ├── 22.5.1--define-expansion_8.sv
│ │ ├── 22.5.1--define-expansion_9.sv
│ │ ├── 22.5.1--define.sv
│ │ ├── 22.5.1--define_and_resetall.sv
│ │ ├── 22.5.1--include-define-expansion.sv
│ │ ├── 22.5.2--undef-basic.sv
│ │ ├── 22.5.2--undef-nonexisting.sv
│ │ ├── 22.5.3--undefineall-and-redefine.sv
│ │ ├── 22.5.3--undefineall-basic.sv
│ │ ├── 22.6--ifdef-behavioral.sv
│ │ ├── 22.6--ifdef-chained-nested.sv
│ │ ├── 22.6--ifdef-nested.sv
│ │ ├── 22.7--timescale-basic-1.sv
│ │ ├── 22.7--timescale-basic-2.sv
│ │ ├── 22.7--timescale-basic-3.sv
│ │ ├── 22.7--timescale-basic-4.sv
│ │ ├── 22.7--timescale-module.sv
│ │ ├── 22.7--timescale-reset.sv
│ │ ├── 22.8--default_nettype-redefinition.sv
│ │ ├── 22.8--default_nettype.sv
│ │ ├── 22.9--unconnected_drive-basic-2.sv
│ │ ├── 22.9--unconnected_drive-basic.sv
│ │ ├── 22.9--unconnected_drive-invalid-1.sv
│ │ ├── 22.9--unconnected_drive-invalid-2.sv
│ │ ├── 22.9--unconnected_drive-invalid-3.sv
│ │ ├── dummy_include.sv
│ │ └── include_directory/
│ │ └── defs.sv
│ ├── chapter-23/
│ │ ├── 23.2--macromodule-definition.sv
│ │ ├── 23.2--module-definition.sv
│ │ └── 23.2--module-label.sv
│ ├── chapter-24/
│ │ └── 24.3--program.sv
│ ├── chapter-25/
│ │ └── 25.3-interface.sv
│ ├── chapter-26/
│ │ ├── 26.2--package-decl.sv
│ │ └── 26.3--package-ref.sv
│ ├── chapter-5/
│ │ ├── 5.10-structure-arrays-illegal.sv
│ │ ├── 5.10-structure-arrays.sv
│ │ ├── 5.10-structure-replication.sv
│ │ ├── 5.10-structures.sv
│ │ ├── 5.11-arrays-key-index.sv
│ │ ├── 5.11-arrays-replication.sv
│ │ ├── 5.11-arrays.sv
│ │ ├── 5.12-attributes-case.sv
│ │ ├── 5.12-attributes-conditional.sv
│ │ ├── 5.12-attributes-module.sv
│ │ ├── 5.12-attributes-operator.sv
│ │ ├── 5.12-attributes-variable.sv
│ │ ├── 5.13-builtin-methods-strings.sv
│ │ ├── 5.4--coments.sv
│ │ ├── 5.6--identifiers.sv
│ │ ├── 5.6--wrong-identifiers.sv
│ │ ├── 5.6.1--escaped-identifiers.sv
│ │ ├── 5.6.1--nonescaped-access.sv
│ │ ├── 5.6.3--system-functions.sv
│ │ ├── 5.6.4--compiler-directives-begin-keywords.sv
│ │ ├── 5.6.4--compiler-directives-celldefine.sv
│ │ ├── 5.6.4--compiler-directives-debug-line.sv
│ │ ├── 5.6.4--compiler-directives-debug.sv
│ │ ├── 5.6.4--compiler-directives-default-nettype.sv
│ │ ├── 5.6.4--compiler-directives-define.sv
│ │ ├── 5.6.4--compiler-directives-include.sv
│ │ ├── 5.6.4--compiler-directives-pragma.sv
│ │ ├── 5.6.4--compiler-directives-preprocessor-macro_0.sv
│ │ ├── 5.6.4--compiler-directives-preprocessor-macro_1.sv
│ │ ├── 5.6.4--compiler-directives-resetall.sv
│ │ ├── 5.6.4--compiler-directives-timescale.sv
│ │ ├── 5.6.4--compiler-directives-unconnected-drive.sv
│ │ ├── 5.7.1--integers-left-padding-bit.sv
│ │ ├── 5.7.1--integers-left-padding.sv
│ │ ├── 5.7.1--integers-signed-illegal.sv
│ │ ├── 5.7.1--integers-signed.sv
│ │ ├── 5.7.1--integers-sized.sv
│ │ ├── 5.7.1--integers-token.sv
│ │ ├── 5.7.1--integers-underscores.sv
│ │ ├── 5.7.1--integers-unsized-illegal.sv
│ │ ├── 5.7.1--integers-unsized.sv
│ │ ├── 5.7.2-real-constants-illegal.sv
│ │ ├── 5.7.2-real-constants.sv
│ │ ├── 5.7.2-real-token.sv
│ │ ├── 5.8-time-literals.sv
│ │ ├── 5.9-string-assignment.sv
│ │ ├── 5.9-string-basics.sv
│ │ ├── 5.9-string-broken-line.sv
│ │ ├── 5.9-string-word-assignment.sv
│ │ └── 5.9.1-string-special-chars.sv
│ ├── chapter-6/
│ │ ├── 6.10--implicit_continuous_assignment.sv
│ │ ├── 6.10--implicit_port.sv
│ │ ├── 6.10--implicit_port_connection.sv
│ │ ├── 6.12--real.sv
│ │ ├── 6.12--real_bit_select.sv
│ │ ├── 6.12--real_bit_select_idx.sv
│ │ ├── 6.12--real_edge.sv
│ │ ├── 6.12--realtime.sv
│ │ ├── 6.12--shortreal.sv
│ │ ├── 6.13--void.sv
│ │ ├── 6.14--chandle.sv
│ │ ├── 6.16--string.sv
│ │ ├── 6.16.1--string_len.sv
│ │ ├── 6.16.10--string_atoreal.sv
│ │ ├── 6.16.11--string_itoa.sv
│ │ ├── 6.16.12--string_hextoa.sv
│ │ ├── 6.16.13--string_octtoa.sv
│ │ ├── 6.16.14--string_bintoa.sv
│ │ ├── 6.16.15--string_realtoa.sv
│ │ ├── 6.16.2--string_putc.sv
│ │ ├── 6.16.3--string_getc.sv
│ │ ├── 6.16.4--string_toupper.sv
│ │ ├── 6.16.5--string_tolower.sv
│ │ ├── 6.16.6--string_compare.sv
│ │ ├── 6.16.7--string_icompare.sv
│ │ ├── 6.16.8--string_substr.sv
│ │ ├── 6.16.9--string_atobin.sv
│ │ ├── 6.16.9--string_atohex.sv
│ │ ├── 6.16.9--string_atoi.sv
│ │ ├── 6.16.9--string_atooct.sv
│ │ ├── 6.17--event.sv
│ │ ├── 6.18--typedef.sv
│ │ ├── 6.19--enum_anon.sv
│ │ ├── 6.19--enum_value_inv.sv
│ │ ├── 6.19--enum_xx.sv
│ │ ├── 6.19--enum_xx_inv.sv
│ │ ├── 6.19--enum_xx_inv_order.sv
│ │ ├── 6.19.1--enum_typedef.sv
│ │ ├── 6.19.2--enum_sequence.sv
│ │ ├── 6.19.2--enum_sequence_range.sv
│ │ ├── 6.19.3--enum_type_checking.sv
│ │ ├── 6.19.3--enum_type_checking_inv.sv
│ │ ├── 6.19.4--enum_numerical_expr.sv
│ │ ├── 6.19.4--enum_numerical_expr_cast.sv
│ │ ├── 6.19.4--enum_numerical_expr_no_cast.sv
│ │ ├── 6.19.5.1--enum_first.sv
│ │ ├── 6.19.5.2--enum_last.sv
│ │ ├── 6.19.5.3--enum_next.sv
│ │ ├── 6.19.5.4--enum_prev.sv
│ │ ├── 6.19.5.5--enum_num.sv
│ │ ├── 6.19.5.6--enum_name.sv
│ │ ├── 6.20.2--parameter.sv
│ │ ├── 6.20.2--parameter_aggregate.sv
│ │ ├── 6.20.2--parameter_dep.sv
│ │ ├── 6.20.2--parameter_port_list.sv
│ │ ├── 6.20.2--parameter_range.sv
│ │ ├── 6.20.2--parameter_real.sv
│ │ ├── 6.20.3--parameter_type.sv
│ │ ├── 6.20.4--localparam.sv
│ │ ├── 6.20.4--localparam_int.sv
│ │ ├── 6.20.4--localparam_logic.sv
│ │ ├── 6.20.4--localparam_string.sv
│ │ ├── 6.20.4--localparam_unsigned_int.sv
│ │ ├── 6.20.5--specparam.sv
│ │ ├── 6.20.5--specparam_inv.sv
│ │ ├── 6.20.6--const.sv
│ │ ├── 6.23--localparam_type_decl.sv
│ │ ├── 6.23--type_op.sv
│ │ ├── 6.23--type_op_compare.sv
│ │ ├── 6.24.1--cast_op.sv
│ │ ├── 6.24.2--cast_fn.sv
│ │ ├── 6.24.2--cast_task.sv
│ │ ├── 6.24.3--bitstream_cast.sv
│ │ ├── 6.5--variable_assignment.sv
│ │ ├── 6.5--variable_mixed_assignments.sv
│ │ ├── 6.5--variable_multiple_assignments.sv
│ │ ├── 6.5--variable_redeclare.sv
│ │ ├── 6.6.7--nettype.sv
│ │ ├── 6.6.7--nettype_resolution_fn.sv
│ │ ├── 6.6.8--interconnect.sv
│ │ ├── 6.9.1--logic_vector.sv
│ │ ├── 6.9.2--vector_scalared.sv
│ │ ├── 6.9.2--vector_vectored.sv
│ │ └── 6.9.2--vector_vectored_inv.sv
│ ├── chapter-7/
│ │ ├── arrays/
│ │ │ ├── associative/
│ │ │ │ ├── alloc.sv
│ │ │ │ ├── arguments.sv
│ │ │ │ ├── assignment.sv
│ │ │ │ ├── class.sv
│ │ │ │ ├── integral.sv
│ │ │ │ ├── literals.sv
│ │ │ │ ├── locator-methods/
│ │ │ │ │ ├── find-first-index.sv
│ │ │ │ │ ├── find-first.sv
│ │ │ │ │ ├── find-index.sv
│ │ │ │ │ ├── find-last-index.sv
│ │ │ │ │ ├── find-last.sv
│ │ │ │ │ ├── find.sv
│ │ │ │ │ ├── max.sv
│ │ │ │ │ ├── min.sv
│ │ │ │ │ ├── unique-index.sv
│ │ │ │ │ └── unique.sv
│ │ │ │ ├── methods/
│ │ │ │ │ ├── delete.sv
│ │ │ │ │ ├── exists.sv
│ │ │ │ │ ├── first.sv
│ │ │ │ │ ├── last.sv
│ │ │ │ │ ├── next.sv
│ │ │ │ │ ├── num.sv
│ │ │ │ │ ├── prev.sv
│ │ │ │ │ ├── size.sv
│ │ │ │ │ └── traversal.sv
│ │ │ │ ├── nonexistent.sv
│ │ │ │ ├── other.sv
│ │ │ │ ├── string.sv
│ │ │ │ └── wildcard.sv
│ │ │ ├── dynamic/
│ │ │ │ ├── basic.sv
│ │ │ │ ├── op-delete.sv
│ │ │ │ ├── op-new.sv
│ │ │ │ └── op-size.sv
│ │ │ ├── multidimensional/
│ │ │ │ ├── basic.sv
│ │ │ │ ├── copy.sv
│ │ │ │ ├── multi.sv
│ │ │ │ └── subarrays.sv
│ │ │ ├── packed/
│ │ │ │ ├── basic.sv
│ │ │ │ ├── equality.sv
│ │ │ │ ├── onebit.sv
│ │ │ │ ├── operations.sv
│ │ │ │ ├── querying-functions/
│ │ │ │ │ ├── dimensions.sv
│ │ │ │ │ ├── high.sv
│ │ │ │ │ ├── increment.sv
│ │ │ │ │ ├── left.sv
│ │ │ │ │ ├── low.sv
│ │ │ │ │ ├── right.sv
│ │ │ │ │ ├── size.sv
│ │ │ │ │ └── unpacked-dimensions.sv
│ │ │ │ ├── slice-equality.sv
│ │ │ │ ├── slice.sv
│ │ │ │ ├── treat-as-integer.sv
│ │ │ │ ├── variable-slice-zero.sv
│ │ │ │ └── variable-slice.sv
│ │ │ └── unpacked/
│ │ │ ├── assignments.sv
│ │ │ ├── basic.sv
│ │ │ ├── equality.sv
│ │ │ ├── index.sv
│ │ │ ├── onebit.sv
│ │ │ ├── operations.sv
│ │ │ ├── ordering-methods/
│ │ │ │ ├── reverse.sv
│ │ │ │ ├── rsort.sv
│ │ │ │ ├── shuffle.sv
│ │ │ │ └── sort.sv
│ │ │ ├── reduction-methods/
│ │ │ │ ├── and.sv
│ │ │ │ ├── or.sv
│ │ │ │ ├── product.sv
│ │ │ │ ├── sum.sv
│ │ │ │ └── xor.sv
│ │ │ ├── slice-equality.sv
│ │ │ ├── slice.sv
│ │ │ ├── subroutines.sv
│ │ │ └── variable-slice.sv
│ │ ├── memories/
│ │ │ ├── basic.sv
│ │ │ └── read-write.sv
│ │ ├── queues/
│ │ │ ├── basic.sv
│ │ │ ├── bounded.sv
│ │ │ ├── delete.sv
│ │ │ ├── delete_assign.sv
│ │ │ ├── insert.sv
│ │ │ ├── insert_assign.sv
│ │ │ ├── max-size.sv
│ │ │ ├── persistence.sv
│ │ │ ├── pop_back.sv
│ │ │ ├── pop_back_assing.sv
│ │ │ ├── pop_front.sv
│ │ │ ├── pop_front_assign.sv
│ │ │ ├── push_back.sv
│ │ │ ├── push_back_assign.sv
│ │ │ ├── push_front.sv
│ │ │ ├── push_front_assign.sv
│ │ │ ├── size.sv
│ │ │ └── slice.sv
│ │ ├── structures/
│ │ │ ├── packed/
│ │ │ │ ├── basic.sv
│ │ │ │ ├── default-value.sv
│ │ │ │ ├── signed.sv
│ │ │ │ └── unsigned.sv
│ │ │ └── unpacked/
│ │ │ ├── basic.sv
│ │ │ └── default-value.sv
│ │ └── unions/
│ │ ├── packed/
│ │ │ └── basic.sv
│ │ ├── tagged/
│ │ │ ├── basic.sv
│ │ │ └── packed.sv
│ │ └── unpacked/
│ │ └── basic.sv
│ ├── chapter-8/
│ │ ├── 8.10--static_methods.sv
│ │ ├── 8.11--this.sv
│ │ ├── 8.12--assignment.sv
│ │ ├── 8.12--shallow_copy.sv
│ │ ├── 8.13--inheritance.sv
│ │ ├── 8.14--override_member.sv
│ │ ├── 8.15--super-default-new.sv
│ │ ├── 8.15--super.sv
│ │ ├── 8.16--cast_func.sv
│ │ ├── 8.17--constructor_const_arg.sv
│ │ ├── 8.18--var_local.sv
│ │ ├── 8.18--var_protected.sv
│ │ ├── 8.19--global_constant.sv
│ │ ├── 8.19--instance_constant.sv
│ │ ├── 8.20--virtual_method.sv
│ │ ├── 8.21--abstract_class.sv
│ │ ├── 8.21--abstract_class_inst.sv
│ │ ├── 8.22--dynamic_method_lookup.sv
│ │ ├── 8.23--scope_resolution.sv
│ │ ├── 8.24--out_of_block_methods.sv
│ │ ├── 8.25--parametrized_class_extend.sv
│ │ ├── 8.25.1--parametrized_class_invalid_scope_resolution.sv
│ │ ├── 8.25.1--parametrized_class_scope_resolution.sv
│ │ ├── 8.26.2--implements.sv
│ │ ├── 8.26.2--implements_extends.sv
│ │ ├── 8.26.2--implements_multiple.sv
│ │ ├── 8.26.3--type_access_extends.sv
│ │ ├── 8.26.3--type_access_implements.sv
│ │ ├── 8.26.3--type_access_implements_invalid.sv
│ │ ├── 8.26.4--illegal_forward_def_implements.sv
│ │ ├── 8.26.4--illegal_implements_parameter.sv
│ │ ├── 8.26.5--cast_between_interface_classes.sv
│ │ ├── 8.26.5--implemented_class_handle.sv
│ │ ├── 8.26.5--invalid_interface_instantiation.sv
│ │ ├── 8.26.6.1--name_conflict_resolved.sv
│ │ ├── 8.26.6.1--name_conflict_unresolved.sv
│ │ ├── 8.26.6.2--parameter_type_conflict.sv
│ │ ├── 8.26.6.2--parameter_type_conflict_unresolved.sv
│ │ ├── 8.26.6.3--diamond_relationship.sv
│ │ ├── 8.26.6.3--diamond_relationship_parametrized.sv
│ │ ├── 8.26.7--partial_implementation.sv
│ │ ├── 8.27--forward_declaration.sv
│ │ ├── 8.4--instantiation.sv
│ │ ├── 8.5--parameters.sv
│ │ ├── 8.5--properties.sv
│ │ ├── 8.5--properties_enum.sv
│ │ ├── 8.6--methods.sv
│ │ ├── 8.7--constructor.sv
│ │ ├── 8.7--constructor_param.sv
│ │ ├── 8.7--constructor_super.sv
│ │ ├── 8.8--typed_constructor.sv
│ │ ├── 8.8--typed_constructor_param.sv
│ │ └── 8.9--static_properties.sv
│ ├── chapter-9/
│ │ ├── 9.2.1--initial.sv
│ │ ├── 9.2.2.1--always.sv
│ │ ├── 9.2.2.2--always_comb.sv
│ │ ├── 9.2.2.3--always_latch.sv
│ │ ├── 9.2.2.4--always_ff.sv
│ │ ├── 9.2.3--final.sv
│ │ ├── 9.3.1--sequential_block.sv
│ │ ├── 9.3.2--parallel_block_join.sv
│ │ ├── 9.3.2--parallel_block_join_any.sv
│ │ ├── 9.3.2--parallel_block_join_none.sv
│ │ ├── 9.3.3--block_start_finish.sv
│ │ ├── 9.3.3--event.sv
│ │ ├── 9.3.3--fork_return.sv
│ │ ├── 9.3.4--block_names_par.sv
│ │ ├── 9.3.4--block_names_seq.sv
│ │ ├── 9.3.5--statement_labels_par.sv
│ │ ├── 9.3.5--statement_labels_seq.sv
│ │ ├── 9.4.1--delay_control-sim.sv
│ │ ├── 9.4.1--delay_control-two-blocks-sim.sv
│ │ ├── 9.4.1--delay_control.sv
│ │ ├── 9.4.2--event_control_edge.sv
│ │ ├── 9.4.2--event_control_negedge.sv
│ │ ├── 9.4.2--event_control_posedge.sv
│ │ ├── 9.4.2--event_control_sim.sv
│ │ ├── 9.4.2--event_control_sim_minimal.sv
│ │ ├── 9.4.2.1--event_comma_op.sv
│ │ ├── 9.4.2.1--event_or_op.sv
│ │ ├── 9.4.2.2--event_implicit.sv
│ │ ├── 9.4.2.3--event_conditional.sv
│ │ ├── 9.4.2.4--event_sequence.sv
│ │ ├── 9.4.3--event_sequence_controls.sv
│ │ ├── 9.4.5--event_blocking_assignment_delay.sv
│ │ ├── 9.4.5--event_nonblocking_assignment_delay.sv
│ │ ├── 9.4.5--event_nonblocking_assignment_event.sv
│ │ ├── 9.4.5--event_nonblocking_assignment_repeat.sv
│ │ ├── 9.4.5--event_nonblocking_assignment_repeat_int.sv
│ │ ├── 9.4.5--event_nonblocking_assignment_repeat_int_neg.sv
│ │ ├── 9.4.5--event_nonblocking_assignment_repeat_neg.sv
│ │ ├── 9.6.1--wait_fork.sv
│ │ ├── 9.6.2--disable.sv
│ │ ├── 9.6.2--disable_other.sv
│ │ ├── 9.6.3--disable_fork.sv
│ │ ├── 9.7--process_cls_await.sv
│ │ ├── 9.7--process_cls_kill.sv
│ │ ├── 9.7--process_cls_self.sv
│ │ └── 9.7--process_cls_suspend_resume.sv
│ ├── generic/
│ │ ├── class/
│ │ │ ├── class_test_0.sv
│ │ │ ├── class_test_1.sv
│ │ │ ├── class_test_11.sv
│ │ │ ├── class_test_12.sv
│ │ │ ├── class_test_13.sv
│ │ │ ├── class_test_17.sv
│ │ │ ├── class_test_18.sv
│ │ │ ├── class_test_19.sv
│ │ │ ├── class_test_21.sv
│ │ │ ├── class_test_25.sv
│ │ │ ├── class_test_26.sv
│ │ │ ├── class_test_27.sv
│ │ │ ├── class_test_28.sv
│ │ │ ├── class_test_29.sv
│ │ │ ├── class_test_30.sv
│ │ │ ├── class_test_4.sv
│ │ │ ├── class_test_48.sv
│ │ │ ├── class_test_49.sv
│ │ │ ├── class_test_51.sv
│ │ │ ├── class_test_52.sv
│ │ │ ├── class_test_53.sv
│ │ │ ├── class_test_54.sv
│ │ │ ├── class_test_55.sv
│ │ │ ├── class_test_56.sv
│ │ │ ├── class_test_57.sv
│ │ │ ├── class_test_58.sv
│ │ │ ├── class_test_59.sv
│ │ │ ├── class_test_6.sv
│ │ │ ├── class_test_60.sv
│ │ │ ├── class_test_61.sv
│ │ │ ├── class_test_62.sv
│ │ │ ├── class_test_63.sv
│ │ │ ├── class_test_64.sv
│ │ │ ├── class_test_65.sv
│ │ │ ├── class_test_66.sv
│ │ │ ├── class_test_67.sv
│ │ │ ├── class_test_68.sv
│ │ │ ├── class_test_69.sv
│ │ │ ├── class_test_7.sv
│ │ │ ├── class_test_8.sv
│ │ │ └── class_test_9.sv
│ │ ├── desc/
│ │ │ ├── desc_test_0.sv
│ │ │ ├── desc_test_1.sv
│ │ │ ├── desc_test_10.sv
│ │ │ ├── desc_test_15.sv
│ │ │ ├── desc_test_16.sv
│ │ │ ├── desc_test_17.sv
│ │ │ ├── desc_test_18.sv
│ │ │ ├── desc_test_2.sv
│ │ │ ├── desc_test_3.sv
│ │ │ ├── desc_test_4.sv
│ │ │ ├── desc_test_5.sv
│ │ │ ├── desc_test_6.sv
│ │ │ ├── desc_test_7.sv
│ │ │ ├── desc_test_8.sv
│ │ │ └── desc_test_9.sv
│ │ ├── empty/
│ │ │ ├── empty_test_0.sv
│ │ │ ├── empty_test_1.sv
│ │ │ ├── empty_test_2.sv
│ │ │ ├── empty_test_3.sv
│ │ │ ├── empty_test_4.sv
│ │ │ └── empty_test_5.sv
│ │ ├── iface/
│ │ │ ├── iface_class_test_0.sv
│ │ │ ├── iface_class_test_1.sv
│ │ │ ├── iface_class_test_10.sv
│ │ │ ├── iface_class_test_2.sv
│ │ │ └── iface_class_test_9.sv
│ │ ├── member/
│ │ │ ├── class_member_test_0.sv
│ │ │ ├── class_member_test_10.sv
│ │ │ ├── class_member_test_11.sv
│ │ │ ├── class_member_test_12.sv
│ │ │ ├── class_member_test_14.sv
│ │ │ ├── class_member_test_15.sv
│ │ │ ├── class_member_test_18.sv
│ │ │ ├── class_member_test_19.sv
│ │ │ ├── class_member_test_2.sv
│ │ │ ├── class_member_test_25.sv
│ │ │ ├── class_member_test_26.sv
│ │ │ ├── class_member_test_27.sv
│ │ │ ├── class_member_test_3.sv
│ │ │ ├── class_member_test_31.sv
│ │ │ ├── class_member_test_32.sv
│ │ │ ├── class_member_test_39.sv
│ │ │ ├── class_member_test_4.sv
│ │ │ ├── class_member_test_40.sv
│ │ │ ├── class_member_test_41.sv
│ │ │ ├── class_member_test_5.sv
│ │ │ ├── class_member_test_6.sv
│ │ │ ├── class_member_test_7.sv
│ │ │ ├── class_member_test_8.sv
│ │ │ └── class_member_test_9.sv
│ │ ├── number/
│ │ │ ├── number_test_0.sv
│ │ │ ├── number_test_1.sv
│ │ │ ├── number_test_10.sv
│ │ │ ├── number_test_11.sv
│ │ │ ├── number_test_12.sv
│ │ │ ├── number_test_13.sv
│ │ │ ├── number_test_14.sv
│ │ │ ├── number_test_15.sv
│ │ │ ├── number_test_16.sv
│ │ │ ├── number_test_2.sv
│ │ │ ├── number_test_24.sv
│ │ │ ├── number_test_25.sv
│ │ │ ├── number_test_26.sv
│ │ │ ├── number_test_27.sv
│ │ │ ├── number_test_28.sv
│ │ │ ├── number_test_29.sv
│ │ │ ├── number_test_3.sv
│ │ │ ├── number_test_30.sv
│ │ │ ├── number_test_31.sv
│ │ │ ├── number_test_32.sv
│ │ │ ├── number_test_33.sv
│ │ │ ├── number_test_34.sv
│ │ │ ├── number_test_35.sv
│ │ │ ├── number_test_36.sv
│ │ │ ├── number_test_4.sv
│ │ │ ├── number_test_42.sv
│ │ │ ├── number_test_43.sv
│ │ │ ├── number_test_44.sv
│ │ │ ├── number_test_45.sv
│ │ │ ├── number_test_46.sv
│ │ │ ├── number_test_47.sv
│ │ │ ├── number_test_48.sv
│ │ │ ├── number_test_49.sv
│ │ │ ├── number_test_5.sv
│ │ │ ├── number_test_50.sv
│ │ │ ├── number_test_51.sv
│ │ │ ├── number_test_52.sv
│ │ │ ├── number_test_53.sv
│ │ │ ├── number_test_59.sv
│ │ │ ├── number_test_6.sv
│ │ │ ├── number_test_60.sv
│ │ │ ├── number_test_61.sv
│ │ │ ├── number_test_62.sv
│ │ │ ├── number_test_64.sv
│ │ │ ├── number_test_65.sv
│ │ │ ├── number_test_66.sv
│ │ │ ├── number_test_67.sv
│ │ │ ├── number_test_68.sv
│ │ │ ├── number_test_69.sv
│ │ │ ├── number_test_7.sv
│ │ │ ├── number_test_70.sv
│ │ │ ├── number_test_71.sv
│ │ │ ├── number_test_72.sv
│ │ │ ├── number_test_8.sv
│ │ │ └── number_test_9.sv
│ │ ├── preproc/
│ │ │ ├── preproc_test_0.sv
│ │ │ ├── preproc_test_2.sv
│ │ │ ├── preproc_test_2.svh
│ │ │ ├── preproc_test_4.sv
│ │ │ ├── preproc_test_5.sv
│ │ │ ├── preproc_test_6.sv
│ │ │ ├── preproc_test_7.sv
│ │ │ └── preproc_test_8.sv
│ │ ├── struct/
│ │ │ └── struct_test_0.sv
│ │ ├── typedef/
│ │ │ ├── typedef_test_0.sv
│ │ │ ├── typedef_test_1.sv
│ │ │ ├── typedef_test_10.sv
│ │ │ ├── typedef_test_11.sv
│ │ │ ├── typedef_test_12.sv
│ │ │ ├── typedef_test_13.sv
│ │ │ ├── typedef_test_14.sv
│ │ │ ├── typedef_test_16.sv
│ │ │ ├── typedef_test_18.sv
│ │ │ ├── typedef_test_19.sv
│ │ │ ├── typedef_test_2.sv
│ │ │ ├── typedef_test_20.sv
│ │ │ ├── typedef_test_21.sv
│ │ │ ├── typedef_test_22.sv
│ │ │ ├── typedef_test_23.sv
│ │ │ ├── typedef_test_24.sv
│ │ │ ├── typedef_test_25.sv
│ │ │ ├── typedef_test_25__bad.sv
│ │ │ ├── typedef_test_26.sv
│ │ │ ├── typedef_test_27.sv
│ │ │ ├── typedef_test_28__bad.sv
│ │ │ ├── typedef_test_3.sv
│ │ │ ├── typedef_test_4.sv
│ │ │ ├── typedef_test_5.sv
│ │ │ ├── typedef_test_6.sv
│ │ │ ├── typedef_test_7.sv
│ │ │ ├── typedef_test_8.sv
│ │ │ ├── typedef_test_8__bad.sv
│ │ │ └── typedef_test_9.sv
│ │ └── union/
│ │ └── union_test_0.sv
│ ├── sanity.sv
│ ├── testbenches/
│ │ ├── uvm_agent_active.sv
│ │ ├── uvm_agent_env.sv
│ │ ├── uvm_agent_passive.sv
│ │ ├── uvm_driver_sequencer_env.sv
│ │ ├── uvm_monitor_env.sv
│ │ ├── uvm_resource_db_read_by_name.sv
│ │ ├── uvm_scoreboard_env.sv
│ │ ├── uvm_scoreboard_monitor_agent_env.sv
│ │ ├── uvm_scoreboard_monitor_env.sv
│ │ ├── uvm_sequence.sv
│ │ └── uvm_test_run_test.sv
│ └── uvm/
│ └── uvm_files.sv
└── tools/
├── BaseRunner.py
├── check-runners
├── feature-analyzer
├── history-graph
├── logparser.py
├── report_analyzer.py
├── runner
├── runners/
│ ├── Icarus.py
│ ├── Odin.py
│ ├── Slang.py
│ ├── Slang_parse.py
│ ├── Surelog.py
│ ├── Sv2v_zachjs.py
│ ├── SynligYosys.py
│ ├── Verible.py
│ ├── VeribleExtractor.py
│ ├── Verilator.py
│ ├── Yosys.py
│ ├── circt_verilog.py
│ ├── moore.py
│ ├── moore_parse.py
│ ├── sv_parser.py
│ ├── tree_sitter_systemverilog.py
│ ├── tree_sitter_verilog.py
│ └── yosys_slang.py
├── runners.mk
└── sv-report
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
# Editor config file, see http://editorconfig.org/
root = true
[*]
charset = utf-8
indent_style = space
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.{h,cpp}]
indent_size = 2
[*.py]
indent_size = 4
[*.html]
indent_size = 2
[Makefile]
indent_style = tab
[*.mk]
indent_style = tab
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: gitsubmodule
directory: "/"
schedule:
interval: daily
# UTC
time: "22:00"
open-pull-requests-limit: 100
================================================
FILE: .github/workflows/comment-pr.yml
================================================
name: comment-pr
on:
workflow_run:
workflows: ["sv-tests-ci"]
types:
- completed
jobs:
Comment:
permissions:
pull-requests: write
name: Comment
runs-on: [ubuntu-latest]
if: ${{ github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' }}
steps:
- name: Download artifacts
id: get-artifacts
uses: actions/github-script@v7
with:
script: |
var artifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: ${{ github.event.workflow_run.id }},
});
var matchArtifact = artifacts.data.artifacts.filter((artifact) => {
return artifact.name == "tests_summary"
})[0];
var download = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifact.id,
archive_format: 'zip',
});
core.setOutput('artifact_id', matchArtifact.id);
var fs = require('fs');
fs.writeFileSync('${{github.workspace}}/tests_summary.zip', Buffer.from(download.data));
- name: Unpack artifacts
run: |
unzip tests_summary.zip
cat ./tests_summary.md
- name: Generate and append artifacts link
run: |
ARTIFACT_ID=${{ steps.get-artifacts.outputs.artifact_id}}
ARTIFACT_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}/artifacts/$ARTIFACT_ID"
MD_URL="[Download an archive containing all the details]($ARTIFACT_URL)"
echo -e "\n\n$MD_URL" >> tests_summary.md
- name: Show summary
run: |
cat tests_summary.md > $GITHUB_STEP_SUMMARY
- name: Prepare comment
id: get-comment-body
run: |
{
echo "body<<EOF"
cat tests_summary.md
echo EOF
} >> $GITHUB_OUTPUT
- name: Get PR number
id: get-pr-number
run: |
num=$(cat ./issue_num)
echo "num=$num" >> $GITHUB_OUTPUT
- name: Post comment
uses: KeisukeYamashita/create-comment@v1
with:
number: ${{ steps.get-pr-number.outputs.num }}
check-only-first-line: "true"
unique: "true"
token: ${{ secrets.GITHUB_TOKEN }}
comment: ${{ steps.get-comment-body.outputs.body }}
================================================
FILE: .github/workflows/lint-review.yml
================================================
name: lint-review
on:
pull_request:
workflow_dispatch:
jobs:
lint_review:
runs-on: ubuntu-latest
permissions:
checks: write
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v2
- name: Run Verible action
uses: chipsalliance/verible-linter-action@main
with:
paths:
./tests
github_token: ${{ secrets.GITHUB_TOKEN }}
suggest_fixes: 'false'
================================================
FILE: .github/workflows/report.sh
================================================
#!/bin/bash
set -euxo pipefail
make $@ generate-tests
cp -ar ./out/report_*/logs ./out/
make $@ report
================================================
FILE: .github/workflows/summary.sh
================================================
#!/bin/bash
set -euxo pipefail
set -x
set -e
#environment variables for this file are set in sv-tests-ci.yml
# Get base report from sv-tests master run
git clone https://github.com/chipsalliance/sv-tests-results.git --depth 120 $REPORTS_HISTORY
# Delete headers from all report.csv
for file in $(find ./out/report_* -name "*.csv" -print); do
sed -i.backup 1,1d $file
done
# concatenate test reports
cat $(find ./out/report_* -name "*.csv" -print) >> $COMPARE_REPORT
# Insert header at the first line of concatenated report
sed -i 1i\ $(head -1 $(find ./out/report_* -name "*.csv.backup" -print -quit)) $COMPARE_REPORT
python $ANALYZER $COMPARE_REPORT $BASE_REPORT -o $CHANGES_SUMMARY_JSON -t $CHANGES_SUMMARY_MD
# generate history graph
python $GRAPHER -n 120 -r $REPORTS_HISTORY
set +e
set +x
================================================
FILE: .github/workflows/sv-tests-ci.yml
================================================
name: sv-tests-ci
on:
push:
branches:
- master
pull_request:
workflow_dispatch:
schedule:
- cron: '0 1 * * *' # run daily at 01:00 am (UTC)
jobs:
Run:
strategy:
fail-fast: false
matrix:
tool:
- name: icarus
deps: autoconf autotools-dev bison flex libfl-dev gperf
- name: moore
rust_ver: "1.61"
- name: odin
repo: odin_ii
deps: autoconf autotools-dev bison flex libfl-dev cmake pkg-config
- name: slang
deps: cmake pkg-config
- name: surelog
repo: Surelog
submodules: third_party/UHDM third_party/antlr4 third_party/googletest
deps: cmake default-jre pkg-config tclsh uuid-dev
- name: sv-parser
deps: cargo
rust_ver: "1.94"
- name: tree-sitter-systemverilog
deps: gcc
- name: tree-sitter-verilog
deps: gcc
- name: verible
deps: bazel=7.6.1 bison flex libfl-dev
skip-ccache: 1
- name: verilator
deps: autoconf autotools-dev bison flex help2man libfl-dev libelf-dev
make_jobs_max: 4
- name: yosys
deps: bison clang tcl-dev flex libfl-dev pkg-config libreadline-dev
- name: yosys-synlig
repo: synlig
submodules: third_party/yosys third_party/surelog
deps: cmake clang tcl-dev bison default-jre flex libfl-dev libreadline-dev pkg-config tclsh uuid-dev
runners_filter: SynligYosys
- name: zachjs-sv2v
deps: haskell-stack
- name: yosys-slang
deps: bison clang tcl-dev flex libfl-dev pkg-config libreadline-dev cmake pkg-config
submodules: third_party/slang
- name: circt-verilog
deps: cmake clang ninja-build lld
submodules: llvm
env:
RUNNERS_FILTER: ${{ matrix.tool.runners_filter }}
CCACHE_DIR: "/root/sv-tests/sv-tests/.cache/"
# those generators can use a lot of RAM/cpu and starve other tests
# tests from those generators are run without "-j" flag
BIG_GENERATORS: "fusesoc black-parrot"
DEBIAN_FRONTEND: "noninteractive"
GHA_MACHINE_TYPE: "n2-highmem-16"
name: ${{ matrix.tool.name }}
runs-on: [self-hosted, Linux, X64, gcp-custom-runners]
container: ubuntu:jammy-20221130
steps:
- name: Cancel previous
uses: styfle/cancel-workflow-action@0.8.0
with:
access_token: ${{ github.token }}
- name: Show shell
run: |
echo "$SHELL"
- name: Checkout code
uses: actions/checkout@v2
- name: Update apt repos
run: |
apt-get update -qq
- name: Setup Node
run: |
apt -qq -y install curl
touch "$HOME/.bash_profile"
# From https://nodejs.org/en/download
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash
. "$HOME/.nvm/nvm.sh"
nvm install 22
- name: Add bazel repo (if needed)
if: ${{ contains(matrix.tool.deps, 'bazel') }}
run: |
apt -qq -y install apt-transport-https curl gnupg
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpg
chmod a+r bazel.gpg
mv bazel.gpg /etc/apt/trusted.gpg.d/
echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | tee /etc/apt/sources.list.d/bazel.list
apt-get update -qq
- name: Install common dependencies
run: |
apt install -y python3 python3-pip git wget file
update-alternatives --install /usr/bin/python python /usr/bin/python3 1
update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
pip install --use-pep517 --upgrade setuptools
pip install --use-pep517 -r conf/requirements.txt
- name: Install VeeR dependencies
run: |
apt install -y cpanminus
cpanm Bit::Vector JSON
- name: Install ccache
if: ${{ !matrix.tool.skip-ccache }}
run: |
apt install -y ccache
- name: Install tool-specific dependencies
if: ${{ matrix.tool.deps }}
run: |
apt -qq -y install ${{ matrix.tool.deps }}
- name: Setup Rust (if needed)
if: ${{ matrix.tool.rust_ver }}
run: |
apt -y install curl
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > setup.sh
sh setup.sh -y
source $HOME/.cargo/env
rustup install ${{ matrix.tool.rust_ver }}
rustup default ${{ matrix.tool.rust_ver }}
- name: Update haskell (if needed)
if: ${{ contains(matrix.tool.deps, 'haskell') }}
run: |
stack upgrade
- name: Checkout the tool submodule
run: |
# Github dropped support for unauthorized git: https://github.blog/2021-09-01-improving-git-protocol-security-github/
# Make sure we always use https:// instead of git://
git config --global url.https://github.com/.insteadOf git://github.com/
# take verilator from github (some tested tools still use a submodule
# from veripool)
git config --global url."https://github.com/verilator/verilator".insteadOf http://git.veripool.org/git/verilator
REPOSITORY_NAME=${{ matrix.tool.name }}
if [[ ! -z "${{ matrix.tool.repo }}" ]]; then
REPOSITORY_NAME=${{ matrix.tool.repo }}
fi
git submodule update --init --depth 1 third_party/tools/${REPOSITORY_NAME}
if [[ ! -z "${{ matrix.tool.submodules }}" ]]; then
pushd third_party/tools/${REPOSITORY_NAME}
git submodule update --init --recursive --depth 1 ${{ matrix.tool.submodules }}
popd
fi
# yosys tool contains tests, is a dependency of other tools
git submodule update --init --recursive --depth 1 third_party/tools/yosys
# icarus contains tests
git submodule update --init --depth 1 third_party/tools/icarus
- name: Create Cache Timestamp
id: cache_timestamp
uses: nanzm/get-time-action@v1.1
with:
format: 'YYYY-MM-DD-HH-mm-ss'
- name: Setup cache
uses: actions/cache@v4
timeout-minutes: 3
continue-on-error: true
with:
path: "/root/sv-tests/sv-tests/.cache/"
key: cache_${{ matrix.tool.name }}_${{ steps.cache_timestamp.outputs.time }}
restore-keys: cache_${{ matrix.tool.name }}_
- name: Build
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
[[ -f $HOME/.cargo/env ]] && source $HOME/.cargo/env
. "$HOME/.bash_profile" # GitHub Actions runs bash with --noprofile
make ${{ matrix.tool.name }} -j$(nproc)
- name: Check
run:
make info
- name: Checkout third party tests and cores
run: |
git submodule update --init --recursive --depth 1 third_party/tests
git submodule update --init --recursive --depth 1 third_party/cores
- name: Run
run: |
BIG_GENERATORS_EXPR=$(echo $BIG_GENERATORS | sed 's/ /\\|/g')
export STABLE_GENERATORS=$(make list-generators | tr ' ' '\n' | grep -v "${BIG_GENERATORS_EXPR}")
export UNSTABLE_GENERATORS=$(make list-generators | tr ' ' '\n' | grep "${BIG_GENERATORS_EXPR}")
export JOBS=${{ matrix.tool.make_jobs_max }}
if [[ "${JOBS}x" == "x" ]]; then export JOBS=$(nproc); fi
for gen in ${STABLE_GENERATORS}; do echo "==GEN stable $gen -j $JOBS" ; make generate-$gen -j${JOBS}; make -j ${JOBS}; done
for gen in ${UNSTABLE_GENERATORS}; do echo "==GEN unstable $gen" ; make generate-$gen; make; done
- name: Prepare Report
run:
mv out/report/report.csv out/report/${{ matrix.tool.name }}_report.csv
- name: Pack results
run: |
tar -cvf out_${{ matrix.tool.name }}.tar ./out/report/${{ matrix.tool.name }}_report.csv ./out/logs/
- uses: actions/upload-artifact@v4
with:
name: report_${{ matrix.tool.name }}
path: |
out_${{ matrix.tool.name }}.tar
**/plot_*.svg
Summary:
name: Summary
runs-on: [self-hosted, Linux, X64, gcp-custom-runners]
container: ubuntu:jammy-20221130
needs: Run
env:
ANALYZER: "$PWD/tools/report_analyzer.py"
GRAPHER: "$PWD/tools/history-graph"
OUT_REPORT_DIR: "$PWD/out/report/"
COMPARE_REPORT: "$OUT_REPORT_DIR/report.csv"
REPORTS_HISTORY: "$(mktemp -d --suffix='.history')"
BASE_REPORT: "$REPORTS_HISTORY/report.csv"
CHANGES_SUMMARY_JSON: "$OUT_REPORT_DIR/tests_summary.json"
CHANGES_SUMMARY_MD: "$OUT_REPORT_DIR/tests_summary.md"
TESTS_SUMMARY_DIR: "tests_summary/"
DEBIAN_FRONTEND: "noninteractive"
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup python
run: |
apt-get update -qq
apt install -y python3 python3-pip wget git curl jq
update-alternatives --install /usr/bin/python python /usr/bin/python3 1
update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
pip install --use-pep517 --upgrade setuptools
pip install --use-pep517 -r conf/requirements.txt
- name: Install VeeR dependencies
run: |
apt install -y cpanminus
cpanm Bit::Vector JSON
- name: Prepare output directories
run: |
mkdir -p out/report
- uses: actions/download-artifact@v4
with:
path: ./out/
- name: Extract
run: |
for file in $(find out/ -name *.tar -print); do tar -xf $file --strip-components=2 -C $(dirname $file); done
- name: Checkout third party tests and cores
run: |
# take verilator from github
git config --global url."https://github.com/verilator/verilator".insteadOf http://git.veripool.org/git/verilator
git submodule update --init --recursive --depth 1 third_party/tests
git submodule update --init --recursive --depth 1 third_party/cores
# yosys tool also contains tests
git submodule update --init --recursive --depth 1 third_party/tools/yosys
# icarus contains tests
git submodule update --init --depth 1 third_party/tools/icarus
- name: Summary
run: |
./.github/workflows/summary.sh
./.github/workflows/report.sh
- name: Update sv-tests-results repository
if: github.ref == 'refs/heads/master'
run: |
eval $(ssh-agent -s)
ssh-add - <<< "${{ secrets.REPORT_DEPLOY_KEY }}"
mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
./.github/workflows/update_report.sh
- name: Prepare artifacts for PR commenter
if: github.event_name == 'pull_request'
run: |
mkdir $TESTS_SUMMARY_DIR
echo ${{ github.event.number }} > $TESTS_SUMMARY_DIR/issue_num
cp $COMPARE_REPORT $TESTS_SUMMARY_DIR/report_base.csv
cp $OUT_REPORT_DIR/report.csv $TESTS_SUMMARY_DIR/report_new.csv
cp $OUT_REPORT_DIR/new_*csv $TESTS_SUMMARY_DIR
cp $OUT_REPORT_DIR/tests_summary.json $TESTS_SUMMARY_DIR
cp $OUT_REPORT_DIR/tests_summary.md $TESTS_SUMMARY_DIR
find out -name plot_*.svg -exec cp {} $TESTS_SUMMARY_DIR \;
- name: Post GitHub summary
run: |
cat $CHANGES_SUMMARY_MD > $GITHUB_STEP_SUMMARY
- name: Upload artifacts for summary
uses: actions/upload-artifact@v4
if: github.event_name == 'pull_request'
with:
name: tests_summary
path: |
./tests_summary/
- name: Find artifacts that are no longer needed
id: get-artifacts-to-delete
if: github.event_name == 'pull_request'
run: |
artifacts=$(find ./out -type d -name 'report_*' -exec basename {} \;)
echo $artifacts
artifacts="${artifacts//'%'/'%25'}"
artifacts="${artifacts//$'\n'/'%0A'}"
artifacts="${artifacts//$'\r'/'%0D'}"
echo "artifacts=$artifacts" >> GITHUB_OUTPUT
echo $artifacts
- name: Delete Old Artifacts
if: github.event_name == 'pull_request'
uses: geekyeggo/delete-artifact@v5
with:
name: ${{ steps.get-artifacts-to-delete.outputs.artifacts }}
Automerge:
name: Automerge dependabot pull requests
permissions:
pull-requests: write
contents: write
runs-on: ubuntu-latest
needs: Summary
if: ${{ github.event_name == 'pull_request' && github.event.pull_request.user.login == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v1.1.1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Enable auto-merge for Dependabot PRs
run: gh pr merge --auto --merge "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/sv-tests-code-quality.yml
================================================
name: "Code Quality Checks"
on:
push:
pull_request:
workflow_dispatch:
jobs:
Test:
name: "Code Quality Checks"
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
with:
submodules: true
- uses: actions/setup-python@v4
with:
python-version: 3.8
- name: Script
run:
pip install -r conf/requirements.txt
- name: Make
run:
make format
- name: Test
run:
test $(git status --porcelain | wc -l) -eq 0 || { git diff; false; }
- name: License
uses: SymbiFlow/actions/checks@main
with:
exclude_directory: |
./.git/
./.github/
./.dependabot/
./miniconda.sh
./build/
third_party: |
./third_party/cores/
./third_party/tests/
./third_party/tools/
================================================
FILE: .github/workflows/update_report.sh
================================================
#!/bin/bash
set -euxo pipefail
export CURRENT_PATH=$PWD
set -ex
git clone \
git@github.com:chipsalliance/sv-tests-results.git \
--single-branch \
--depth 1 \
--branch gh-pages \
output
cd output || (echo "The output directory doesn't exist! Cloning the sv-tests-results repository failed, please check the ssh-key! Exiting"; exit 1)
rm -rf *
cp -a $CURRENT_PATH/out/report/* -t .
touch .nojekyll
git add .
GIT_MESSAGE_FILE=/tmp/git-message
cat > $GIT_MESSAGE_FILE <<EOF
Deploy $GITHUB_REF (build $GITHUB_RUN_ID)
Build from $GITHUB_SHA
EOF
git config user.name "SymbiFlow Robot"
git config user.email "foss-fpga-tools@google.com"
git commit -F $GIT_MESSAGE_FILE
git show -s
git push
================================================
FILE: .gitignore
================================================
out
build
tests/generated
__pycache__
venv
================================================
FILE: .gitmodules
================================================
[submodule "third_party/tests/hdlconvertor"]
path = third_party/tests/hdlconvertor
url = https://github.com/Nic30/hdlConvertor
[submodule "third_party/cores/basejump_stl"]
path = third_party/cores/basejump_stl
url = https://github.com/bespoke-silicon-group/basejump_stl
[submodule "third_party/cores/ariane"]
path = third_party/cores/ariane
url = https://github.com/pulp-platform/ariane
[submodule "third_party/tools/odin_ii"]
path = third_party/tools/odin_ii
url = https://github.com/verilog-to-routing/vtr-verilog-to-routing.git
[submodule "third_party/tools/icarus"]
path = third_party/tools/icarus
url = https://github.com/steveicarus/iverilog.git
[submodule "third_party/tools/slang"]
path = third_party/tools/slang
url = https://github.com/MikePopoloski/slang.git
[submodule "third_party/tools/yosys"]
path = third_party/tools/yosys
url = https://github.com/YosysHQ/yosys.git
[submodule "third_party/tools/zachjs-sv2v"]
path = third_party/tools/zachjs-sv2v
url = https://github.com/zachjs/sv2v
[submodule "third_party/cores/veer-eh1"]
path = third_party/cores/veer-eh1
url = https://github.com/chipsalliance/Cores-VeeR-EH1
[submodule "third_party/cores/ibex"]
path = third_party/cores/ibex
url = https://github.com/lowRISC/ibex
[submodule "third_party/tools/tree-sitter-verilog"]
path = third_party/tools/tree-sitter-verilog
url = https://github.com/tree-sitter/tree-sitter-verilog
[submodule "third_party/tools/tree-sitter-systemverilog"]
path = third_party/tools/tree-sitter-systemverilog
url = https://github.com/gmlarumbe/tree-sitter-systemverilog
[submodule "third_party/cores/fx68k"]
path = third_party/cores/fx68k
url = https://github.com/ijor/fx68k
[submodule "third_party/tools/sv-parser"]
path = third_party/tools/sv-parser
url = https://github.com/dalance/sv-parser
[submodule "third_party/cores/scr1"]
path = third_party/cores/scr1
url = https://github.com/syntacore/scr1
[submodule "third_party/tools/verible"]
path = third_party/tools/verible
url = https://github.com/chipsalliance/verible.git
[submodule "third_party/tools/Surelog"]
path = third_party/tools/Surelog
url = https://github.com/chipsalliance/Surelog.git
[submodule "third_party/cores/rsd"]
path = third_party/cores/rsd
url = https://github.com/rsd-devel/rsd
[submodule "third_party/cores/black-parrot"]
path = third_party/cores/black-parrot
url = https://github.com/black-parrot/black-parrot
branch = dev
[submodule "third_party/tests/easyUVM"]
path = third_party/tests/easyUVM
url = https://github.com/antmicro/easyUVM.git
[submodule "third_party/tests/uvm"]
path = third_party/tests/uvm
url = https://github.com/SymbiFlow/uvm.git
branch = uvm-2020-3.1-vlt
[submodule "third_party/cores/tnoc"]
path = third_party/cores/tnoc
url = https://github.com/taichi-ishitani/tnoc.git
[submodule "third_party/tests/utd-sv"]
path = third_party/tests/utd-sv
url = https://github.com/SymbiFlow/utd-sv.git
[submodule "third_party/tests/axi-vip"]
path = third_party/tests/axi-vip
url = https://github.com/SymbiFlow/axi-vip.git
[submodule "third_party/tools/synlig"]
path = third_party/tools/synlig
url = https://github.com/chipsalliance/synlig.git
[submodule "third_party/tests/projf-explore"]
path = third_party/tests/projf-explore
url = https://github.com/projf/projf-explore.git
[submodule "third_party/tools/moore"]
path = third_party/tools/moore
url = https://github.com/fabianschuiki/moore.git
[submodule "third_party/cores/rggen-sample"]
path = third_party/cores/rggen-sample
url = https://github.com/rggen/rggen-sample.git
[submodule "third_party/cores/rggen-sv-rtl"]
path = third_party/cores/rggen-sv-rtl
url = https://github.com/rggen/rggen-sv-rtl.git
[submodule "third_party/cores/veer-el2"]
path = third_party/cores/veer-el2
url = https://github.com/chipsalliance/Cores-VeeR-EL2.git
[submodule "third_party/tools/yosys-slang"]
path = third_party/tools/yosys-slang
url = https://github.com/povik/yosys-slang.git
[submodule "third_party/tools/circt-verilog"]
path = third_party/tools/circt-verilog
url = https://github.com/llvm/circt.git
branch = main
[submodule "third_party/tools/verilator"]
path = third_party/tools/verilator
url = https://github.com/verilator/verilator
================================================
FILE: .style.yapf
================================================
[style]
based_on_style = pep8
split_before_expression_after_opening_paren = True
split_before_first_argument = True
split_complex_comprehension = True
split_penalty_comprehension = 2100
================================================
FILE: AUTHORS
================================================
# This is the list of sv-tests's significant contributors.
#
# This does not necessarily list everyone who has contributed code,
# especially since many employees of one corporation may be contributing.
# To see the full list of contributors, see the revision history in
# source control.
Antmicro
Google LLC
Ahmad Hegazy
Fabian Schuiki
Mike Popoloski
Naoya Hatta
Wilson Snyder
Zachary Snow
================================================
FILE: LICENSE
================================================
Copyright (C) 2020 The Symbiflow Authors
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
================================================
FILE: Makefile
================================================
# Copyright (C) 2020 The SymbiFlow Authors.
#
# Use of this source code is governed by a ISC-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/ISC
#
# SPDX-License-Identifier: ISC
all: report
OUT_DIR ?= ./out/
CONF_DIR ?= ./conf
TESTS_DIR ?= ./tests
BUILD_DIR ?= ./build
RUNNERS_DIR ?= ./tools/runners
THIRD_PARTY_DIR ?= ./third_party
GENERATORS_DIR ?= ./generators
USE_CGROUP := ${USE_CGROUP}
CGROUP_MAX_MEMORY ?= 3221225472 # 3GiB
export OUT_DIR
export CONF_DIR
export THIRD_PARTY_DIR
export TESTS_DIR
export RUNNERS_DIR
export GENERATORS_DIR
ifneq ($(DISABLE_TEST_TIMEOUTS),)
export DISABLE_TEST_TIMEOUTS
endif
ifneq ($(OVERRIDE_TEST_TIMEOUTS),)
export OVERRIDE_TEST_TIMEOUTS
endif
include tools/runners.mk
.PHONY: clean init info tests generate-tests report
clean:
rm -rf $(OUT_DIR)
rm -rf $(BUILD_DIR)
rm -rf $(TESTS_DIR)/generated/
init:
ifneq (,$(wildcard $(OUT_DIR)/*))
@echo -e "!!! WARNING !!!\nThe output directory is not empty\n"
endif
runners:
ifneq ($(RUNNER_KEEP_TMP),)
RUNNER_PARAM := --keep-tmp
else
RUNNER_PARAM := --quiet
endif
# $(1) - runner name
# $(2) - test
define runner_test_gen
# Set the runner value for the log target
ifneq ($(USE_CGROUP),)
$(OUT_DIR)/logs/$(1)/$(2).log : RUNNER = cgexec -g memory,cpu:$(USE_CGROUP)/$(1) ./tools/runner
else
$(OUT_DIR)/logs/$(1)/$(2).log : RUNNER = ./tools/runner
endif
$(OUT_DIR)/logs/$(1)/$(2).log: $(TESTS_DIR)/$(2) | $(1)-cg
RUNNERS_DIR=$(RUNNERS_DIR) $$(RUNNER) --runner $(1) --test $(2) --out $(OUT_DIR)/logs/$(1)/$(2).log $(RUNNER_PARAM)
tests: $(OUT_DIR)/logs/$(1)/$(2).log
endef
# $(1) - runner name
define runner_cg_gen
ifneq ($(USE_CGROUP),)
/sys/fs/cgroup/memory/$(USE_CGROUP)/$(1):
# Create a sub-cgroup for each runner under the $(USE_CGROUP) group.
cgcreate -g memory,cpu:$(USE_CGROUP)/$(1)
$(1)-cg: /sys/fs/cgroup/memory/$(USE_CGROUP)/$(1)
# Limit a single runner memory
echo $(CGROUP_MAX_MEMORY) > /sys/fs/cgroup/memory/$(USE_CGROUP)/$(1)/memory.limit_in_bytes
else
$(1)-cg:
@true
endif
endef
define runner_version_gen
$(OUT_DIR)/logs/$(1)/version:
./tools/runner --runner $(1) --version --out $(OUT_DIR)/logs/$(1)/version
versions: $(OUT_DIR)/logs/$(1)/version
endef
define runner_url_gen
$(OUT_DIR)/logs/$(1)/url:
./tools/runner --runner $(1) --url --out $(OUT_DIR)/logs/$(1)/url
urls: $(OUT_DIR)/logs/$(1)/url
endef
define generator_gen
generate-$(1):
$(GENERATORS_DIR)/$(1) $(1)
generate-tests: generate-$(1)
endef
RUNNERS_FOUND := $(wildcard $(RUNNERS_DIR)/*.py)
RUNNERS_FOUND := $(RUNNERS_FOUND:$(RUNNERS_DIR)/%=%)
RUNNERS_FOUND := $(sort $(basename $(RUNNERS_FOUND)))
ifdef RUNNERS_FILTER
FILTER := --filter $(RUNNERS_FILTER)
endif
RUNNERS := $(sort $(shell OUT_DIR=$(OUT_DIR) RUNNERS_DIR=$(RUNNERS_DIR) \
TREE_SITTER_SVERILOG_PARSER_DIR=$(TREE_SITTER_SVERILOG_PARSER_DIR) \
TREE_SITTER_VERILOG_PARSER_DIR=$(TREE_SITTER_VERILOG_PARSER_DIR) \
./tools/check-runners $(RUNNERS_FOUND) $(FILTER)))
TESTS := $(shell find $(TESTS_DIR) -type f -iname *.sv)
TESTS := $(TESTS:$(TESTS_DIR)/%=%)
GENERATORS := $(wildcard $(GENERATORS_DIR)/*)
GENERATORS := $(GENERATORS:$(GENERATORS_DIR)/%=%)
space := $(subst ,, )
ifneq ($(USE_ALL_RUNNERS),)
ifneq ($(RUNNERS), $(RUNNERS_FOUND))
$(warning Runners found: $(RUNNERS_FOUND))
$(warning Runners defined: $(RUNNERS))
$(error Some runners are missing)
endif
endif
info:
@echo -e "Found the following runners:$(subst $(space),"\\n \* ", $(RUNNERS))\n"
PY_FILES := $(shell file generators/* tools/* | sed -ne 's/:.*[Pp]ython.*//p')
PY_FILES += $(wildcard tools/*.py)
PY_FILES += $(wildcard tools/runners/*.py)
PY_FILES += $(wildcard conf/report/*.py)
format:
python3 -m yapf -p -i $(PY_FILES)
tests:
generate-tests:
urls:
versions:
report: init tests versions urls
./tools/sv-report --revision $(shell git rev-parse --short HEAD)
cp $(CONF_DIR)/report/*.css $(OUT_DIR)/report/
cp $(CONF_DIR)/report/*.js $(OUT_DIR)/report/
cp $(CONF_DIR)/report/*.png $(OUT_DIR)/report/
cp $(CONF_DIR)/report/*.svg $(OUT_DIR)/report/
list-generators:
@echo $(GENERATORS)
$(foreach g, $(GENERATORS), $(eval $(call generator_gen,$(g))))
$(foreach r, $(RUNNERS),$(foreach t, $(TESTS),$(eval $(call runner_test_gen,$(r),$(t)))))
$(foreach r, $(RUNNERS),$(eval $(call runner_cg_gen,$(r))))
$(foreach r, $(RUNNERS),$(eval $(call runner_version_gen,$(r))))
$(foreach r, $(RUNNERS),$(eval $(call runner_url_gen,$(r))))
================================================
FILE: README.md
================================================
# SystemVerilog Tester
[](https://github.com/chipsalliance/sv-tests/blob/master/LICENSE)
[](https://github.com/chipsalliance/sv-tests/actions)
The purpose of this project is to find all the supported and missing SystemVerilog features in various Verilog tools.
The report generated from the last passing master build can be viewed [on a dedicated dashboard:](https://chipsalliance.github.io/sv-tests-results/)
[](https://chipsalliance.github.io/sv-tests-results/)
History of the builds is also tracked and can be seen [on a separate page:](https://chipsalliance.github.io/sv-tests-results/history)
[](https://chipsalliance.github.io/sv-tests-results/history)
# Running
Initialize the submodules:
```bash
git submodule update --init --recursive
```
Install all the python dependencies and make sure the installed binaries can be called.
```bash
pip3 install --user -r conf/requirements.txt
export PATH=~/.local/bin:$PATH
```
Build tools (optional, tools from `PATH` can be used):
```bash
make -k runners
```
And then just run:
```bash
make generate-tests -j$(nproc)
make -j$(nproc)
```
This should generate many log files for all the tools/tests combinations and an `out/report.html` file with a summary of the tested features and tools.
If you don't want to generate the report file, but are interested in just running all the tests, you can run:
```bash
make tests
```
## Adding new test cases
Adding a new test case is a two step process.
First you create the test case itself which should use only a minimal required subset of SystemVerilog to test a particular feature.
Additionally each test should cover only a single feature.
If the test must use several features, each of those must be also covered in separate test cases.
After creating a new test case it must be correctly tagged:
* `name` - must be unique and should be directly related to what the test case covers.
* `description` - should provide a short description that will be visible in the report page.
* `should_fail_because` - must be used if the test is expected to fail and should contain the reason of failure.
* `files` - is a list of files used by this test case, can be omitted to use only the main file with metadata.
* `incdirs` - can be used to provide a list of include directories, can be omitted to use only the default ones.
* `top_module` - optional, allows to specify which module is the top one.
* `tags` - tag must be used to specify which part of SystemVerilog specification this test case covers.
* `defines` - provides a list of macros for preprocessor.
If the test case uses several SystemVerilog features, only the feature directly tested should be included in tags.
List of existing tags is located in `conf/lrm.conf`.
Finally the file containing the test case and metadata should be placed in `tests/chapter-([0-9]+)/` subdirectory based on the `tags` fields specified earlier.
## Importing existing tests from a test suite/core/tool
1. Add the tests as a submodule to this repository via `git submodule add <git_url> third_party/<category>/<name>`.
If you want to add tests from a tool that is already in `third_party/tools` you can skip this step.
2. Add a new tag named `<name>` to `conf/lrm.conf` together with a short description.
3. Generate wrapper `.sv` files by either:
* Adding a new config to `conf/generators/meta-path/` that will be used by `generators/path_generator`.
* Adding a new generator script to `generators/` that will create required wrappers.
First method works well with test suites in which each test case is contained in a separate Verilog file.
If the test suite provides metadata that must be processed or you are importing an IP core then you should create custom generator script.
Use tag that you added in the previous step.
## Adding a new tool
1. Add the tool as a submodule to this repository via `git submodule add <git_url> third_party/tools/<name>`.
2. Add a target for building and installing the tool manually in `tools/runners.mk`
3. Create a new runner script in `tools/runners/<name>.py` that will contain a subclass of `BaseRunner` named `<name>`.
This subclass will need to at least implement the following methods:
* `__init__` to provide general information about the tool.
* `prepare_run_cb` to prepare correct tool invocation that will be used during tests.
If the new tool is a Python library, reimplement `run` and other supporting methods instead of implementing `prepare_run_cb`.
## Supported tools
* [Yosys](https://github.com/yosysHQ/yosys)
* [Odin II](https://verilogtorouting.org)
* [Verilator](https://verilator.org)
* [Icarus](http://iverilog.icarus.com)
* [slang](https://github.com/MikePopoloski/slang)
* [sv2v(zachjs)](https://github.com/zachjs/sv2v)
* [tree-sitter-systemverilog](https://github.com/gmlarumbe/tree-sitter-systemverilog)
* [tree-sitter-verilog](https://github.com/tree-sitter/tree-sitter-verilog)
* [sv-parser](https://github.com/dalance/sv-parser)
* [moore](http://llhd.io)
* [verible](https://github.com/google/verible)
* [circt-verilog](https://github.com/llvm/circt)
* [yosys-slang](https://github.com/povik/yosys-slang)
================================================
FILE: conf/environment.yml
================================================
# Copyright (C) 2019-2021 The SymbiFlow Authors.
#
# Use of this source code is governed by a ISC-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/ISC
#
# SPDX-License-Identifier: ISC
name: sv-test-env
channels:
- LiteX-Hub
# - pkgw-forge
# - conda-forge
dependencies:
# - LiteX-Hub::iverilog
# - LiteX-Hub::moore
# - LiteX-Hub::odin_ii
# - LiteX-Hub::slang
# - LiteX-Hub::surelog
# - LiteX-Hub::sv-parser
# - LiteX-Hub::tree-sitter-verilog
# - LiteX-Hub::yosys-uhdm
# - LiteX-Hub::verible
# - LiteX-Hub::verilator
# - gxx_impl_linux-64
# - LiteX-Hub::yosys
# - LiteX-Hub::antmicro-yosys-complete
# - LiteX-Hub::zachjs-sv2v
- ccache
- python=3.8
- pip
- pip: # Packages installed from PyPI
- -r requirements.txt
================================================
FILE: conf/feature-analyzer/keywords.yml
================================================
# Copyright (C) 2019-2021 The SymbiFlow Authors.
#
# Use of this source code is governed by a ISC-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/ISC
#
# SPDX-License-Identifier: ISC
tags:
5.6:
- 'accept_on'
- 'default'
- 'forkjoin'
- 'alias'
- 'defparam'
- 'function'
- 'always'
- 'design'
- 'generate'
- 'always_comb'
- 'disable'
- 'genvar'
- 'always_ff'
- 'dist'
- 'global'
- 'always_latch'
- 'do'
- 'highz0'
- 'and'
- 'edge'
- 'highz1'
- 'assert'
- 'else'
- 'if'
- 'assign'
- 'end'
- 'iff'
- 'assume'
- 'endcase'
- 'ifnone'
- 'automatic'
- 'endchecker'
- 'ignore_bins'
- 'before'
- 'endclass'
- 'illegal_bins'
- 'begin'
- 'endclocking'
- 'implements'
- 'bind'
- 'endconfig'
- 'implies'
- 'bins'
- 'endfunction'
- 'import'
- 'binsof'
- 'endgenerate'
- 'incdir'
- 'bit'
- 'endgroup'
- 'include'
- 'break'
- 'endinterface'
- 'initial'
- 'buf'
- 'endmodule'
- 'inout'
- 'bufif0'
- 'endpackage'
- 'input'
- 'bufif1'
- 'endprimitive'
- 'inside'
- 'byte'
- 'endprogram'
- 'instance'
- 'case'
- 'endproperty'
- 'int'
- 'casex'
- 'endspecify'
- 'integer'
- 'casez'
- 'endsequence'
- 'interconnect'
- 'cell'
- 'endtable'
- 'interface'
- 'chandle'
- 'endtask'
- 'intersect'
- 'checker'
- 'enum'
- 'join'
- 'class'
- 'event'
- 'join_any'
- 'clocking'
- 'eventually'
- 'join_none'
- 'cmos'
- 'expect'
- 'large'
- 'config'
- 'export'
- 'let'
- 'const'
- 'extends'
- 'liblist'
- 'constraint'
- 'extern'
- 'library'
- 'context'
- 'final'
- 'local'
- 'continue'
- 'first_match'
- 'localparam'
- 'cover'
- 'for'
- 'logic'
- 'covergroup'
- 'force'
- 'longint'
- 'coverpoint'
- 'foreach'
- 'macromodule'
- 'cross'
- 'forever'
- 'matches'
- 'deassign'
- 'fork'
- 'medium'
- 'modport'
- 'reject_on'
- 'time'
- 'module'
- 'release'
- 'timeprecision'
- 'nand'
- 'repeat'
- 'timeunit'
- 'negedge'
- 'restrict'
- 'tran'
- 'nettype'
- 'return'
- 'tranif0'
- 'new'
- 'rnmos'
- 'tranif1'
- 'nexttime'
- 'rpmos'
- 'tri'
- 'nmos'
- 'rtran'
- 'tri0'
- 'nor'
- 'rtranif0'
- 'tri1'
- 'noshowcancelled'
- 'rtranif1'
- 'triand'
- 'not'
- 's_always'
- 'trior'
- 'notif0'
- 's_eventually'
- 'trireg'
- 'notif1'
- 's_nexttime'
- 'type'
- 'null'
- 's_until'
- 'typedef'
- 'or'
- 's_until_with'
- 'union'
- 'output'
- 'scalared'
- 'unique'
- 'package'
- 'sequence'
- 'unique0'
- 'packed'
- 'shortint'
- 'unsigned'
- 'parameter'
- 'shortreal'
- 'until'
- 'pmos'
- 'showcancelled'
- 'until_with'
- 'posedge'
- 'signed'
- 'untyped'
- 'primitive'
- 'small'
- 'use'
- 'priority'
- 'soft'
- 'uwire'
- 'program'
- 'solve'
- 'var'
- 'property'
- 'specify'
- 'vectored'
- 'protected'
- 'specparam'
- 'virtual'
- 'pull0'
- 'static'
- 'void'
- 'pull1'
- 'string'
- 'wait'
- 'pulldown'
- 'strong'
- 'wait_order'
- 'pullup'
- 'strong0'
- 'wand'
- 'pulsestyle_ondetect'
- 'strong1'
- 'weak'
- 'pulsestyle_onevent'
- 'struct'
- 'weak0'
- 'pure'
- 'super'
- 'weak1'
- 'rand'
- 'supply0'
- 'while'
- 'randc'
- 'supply1'
- 'wildcard'
- 'randcase'
- 'sync_accept_on'
- 'wire'
- 'randsequence'
- 'sync_reject_on'
- 'with'
- 'rcmos'
- 'table'
- 'within'
- 'real'
- 'tagged'
- 'wor'
- 'realtime'
- 'task'
- 'xnor'
- 'ref'
- 'this'
- 'xor'
- 'reg'
- 'throughout'
================================================
FILE: conf/feature-analyzer/operators.yml
================================================
# Copyright (C) 2019-2021 The SymbiFlow Authors.
#
# Use of this source code is governed by a ISC-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/ISC
#
# SPDX-License-Identifier: ISC
tags:
5.5:
- '='
- '+='
- '-='
- '*='
- '/='
- '%='
- '&='
- '|='
- '^='
- '<<='
- '>>='
- '<<<='
- '>>>='
- '!'
- '~'
- '&'
- '~&'
- '|'
- '~|'
- '^'
- '~^'
- '^~'
- '+'
- '-'
- '*'
- '/'
- '%'
- '=='
- '!='
- '==='
- '!=='
- '==?'
- '!=?'
- '&&'
- '||'
- '**'
- '<'
- '<='
- '>'
- '>='
- '&'
- '>>>'
- '<<<'
- '->'
- '<->'
- '++'
- '--'
- '>>'
- '<<'
10.4:
- '='
- '+='
- '-='
- '*='
- '/='
- '%='
- '&='
- '|='
- '^='
- '<<='
- '>>='
- '<<<='
- '>>>='
- '<='
11.3:
- '='
- '+='
- '-='
- '*='
- '/='
- '%='
- '&='
- '|='
- '^='
- '<<='
- '>>='
- '<<<='
- '>>>='
- '?'
- '+'
- '-'
- '!'
- '~'
- '&'
- '~&'
- '|'
- '~|'
- '^'
- '~^'
- '^~'
- '*'
- '/'
- '%'
- '=='
- '!='
- '==='
- '!=='
- '==?'
- '!=?'
- '&&'
- '||'
- '**'
- '<'
- '<='
- '>'
- '>='
- '>>'
- '<<'
- '>>>'
- '<<<'
- '++'
- '--'
- '->'
- '<->'
================================================
FILE: conf/feature-analyzer/tags.yml
================================================
# Copyright (C) 2019-2021 The SymbiFlow Authors.
#
# Use of this source code is governed by a ISC-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/ISC
#
# SPDX-License-Identifier: ISC
tags:
5.4:
- '//'
- '/*'
- '*/'
5.6:
- '`__FILE__'
- '`__LINE__'
- '`begin_keywords'
- '`celldefine'
- '`default_nettype'
- '`define'
- '`else'
- '`elsif'
- '`end_keywords'
- '`endcelldefine'
- '`endif'
- '`ifdef'
- '`ifndef'
- '`include'
- '`line'
- '`nounconnected_drive'
- '`pragma'
- '`resetall'
- '`timescale'
- '`unconnected_drive'
- '`undef'
- '`undefineall'
6.3:
- 'small'
- 'medium'
- 'large'
6.6:
- 'wire'
- 'tri'
- 'uwire'
- 'wor'
- 'wand'
- 'trior'
- 'triand'
- 'trireg'
- 'tri0'
- 'tri1'
- 'supply0'
- 'supply1'
- 'nettype'
- 'interconnect'
6.9:
- 'reg'
- 'logic'
- 'bit'
6.11:
- 'logic'
- 'reg'
- 'integer'
- 'time'
- 'bit'
- 'int'
- 'byte'
- 'shortint'
- 'int'
- 'integer'
- 'longint'
- 'unsigned'
- 'signed'
6.12:
- 'real'
- 'shortreal'
- 'realtime'
6.13:
- 'void'
6.14:
- 'chandle'
6.15:
- 'class'
6.16:
- 'string'
6.17:
- 'event'
6.18:
- 'typedef'
6.19:
- 'enum'
6.20:
- 'localparam'
- 'parameter'
- 'specparam'
- 'const'
6.23:
- 'type'
6.24:
- '$cast'
7.2:
- 'struct'
- 'struct packed'
7.3:
- 'union'
- 'union packed'
- 'union tagged'
- 'union tagged packed'
7.5:
- '[]'
7.8:
- '[*]'
7.10:
- '[$]'
- 'pop_front'
- 'pop_back'
- 'push_front'
- 'pop_front'
7.11:
- '$left'
- '$right'
- '$low'
- '$high'
- '$increment'
- '$size'
- '$dimensions'
- '$unpacked_dimensions'
8.3:
- 'class'
- 'virtual class'
8.7:
- 'function new'
8.10:
- 'static function'
8.11:
- 'this.'
8.13:
- 'extends'
8.15:
- 'super.'
8.16:
- '$cast'
8.20:
- 'virtual function'
8.21:
- 'virtual class'
- 'pure virtual function'
8.23:
- '::'
8.26:
- 'interface class'
9.2:
- 'initial'
- 'always'
- 'always_comb'
- 'always_latch'
- 'always_ff'
- 'final'
9.3:
- 'begin'
- 'end'
- 'fork'
- 'join'
- 'join_any'
- 'join_none'
9.4:
- 'repeat'
- 'wait'
- 'wait fork'
- 'wait_order'
9.6:
- 'wait'
- 'wait fork'
- 'wait_order'
- 'disable'
- 'disable fork'
9.7:
- 'kill'
- 'await'
- 'suspend'
- 'resume'
10.3:
- 'assign'
- 'supply1'
- 'strong1'
- 'pull1'
- 'weak1'
- 'highz1'
- 'supply0'
- 'strong0'
- 'pull0'
- 'weak0'
- 'highz0'
10.6:
- 'assign'
- 'deassign'
- 'force'
- 'release'
10.11:
- 'alias'
11.9:
- 'tagged'
11.12:
- 'let'
12.4:
- 'if'
- 'else if'
- 'else'
- 'unique'
- 'unique0'
- 'priority'
- 'matches'
12.5:
- 'case'
- 'casez'
- 'casex'
- 'endcase'
- 'matches'
- 'inside'
- 'default'
12.6:
- 'matches'
- 'tagged'
12.7:
- 'forever'
- 'repeat'
- 'while'
- 'for'
- 'do'
- 'while'
- 'foreach'
12.8:
- 'break'
- 'continue'
- 'return'
13.3:
- 'task'
- 'endtask'
13.4:
- 'function'
- 'endfunction'
14.3:
- 'clocking'
- 'endclocking'
14.11:
- '##'
14.12:
- 'default clocking'
14.14:
- 'global clocking'
15.3:
- 'semaphore'
15.4:
- 'mailbox'
15.5:
- 'event'
- 'wait_order'
16.2:
- 'assert'
- 'assume'
- 'cover'
- 'restrict'
16.4:
- 'assert #0'
- 'assert final'
- 'assume #0'
- 'assume final'
- 'cover #0'
- 'cover final'
16.8:
- 'sequence'
- 'endsequence'
16.9:
- '$sampled'
- '$rose'
- '$fell'
- '$stable'
- '$changed'
- '$past'
- '$past_gclk'
- '$rose_gclk'
- '$fell_gclk'
- '$stable_gclk'
- '$changed_gclk'
- '$future_gclk'
- '$rising_gclk'
- '$falling_gclk'
- '$steady_gclk'
- '$changing_gclk'
- 'intersect'
- 'first_match'
- 'throughout'
- 'within'
16.12:
- 'property'
- 'endproperty'
- 'nexttime'
- 's_nexttime'
- 'iff'
- 'until'
- 's_until'
- 'until_with'
- 's_until_with'
- 'implies'
- 's_always'
- 'eventually'
- 's_eventually'
- 'accept_on'
- 'reject_on'
- 'sync_accept_on'
- 'sync_reject_on'
- '#-#'
- '#=#'
16.17:
- 'expect'
17.2:
- 'checker'
- 'endchecker'
17.6:
- 'covergroup'
- 'coverpoint'
- 'endgroup'
20.2:
- '$finish'
- '$stop'
- '$exit'
20.3:
- '$realtime'
- '$stime'
- '$time'
20.4:
- '$printtimescale'
- '$timeformat'
20.5:
- '$bitstoreal'
- '$realtobits'
- '$bitstoshortreal'
- '$shortrealtobits'
- '$itor'
- '$rtoi'
- '$signed'
- '$unsigned'
- '$cast'
20.6:
- '$bits'
- '$isunbounded'
- '$typename'
20.7:
- '$unpacked_dimensions'
- '$dimensions'
- '$left'
- '$right'
- '$low'
- '$high'
- '$increment'
- '$size'
20.8:
- '$clog2'
- '$asin'
- '$ln'
- '$acos'
- '$log10'
- '$atan'
- '$exp'
- '$atan2'
- '$sqrt'
- '$hypot'
- '$pow'
- '$sinh'
- '$floor'
- '$cosh'
- '$ceil'
- '$tanh'
- '$sin'
- '$asinh'
- '$cos'
- '$acosh'
- '$tan'
- '$atanh'
20.9:
- '$countbits'
- '$countones'
- '$onehot'
- '$onehot0'
- '$isunknown'
20.10:
- '$fatal'
- '$error'
- '$warning'
- '$info'
20.11:
- '$fatal'
- '$error'
- '$warning'
- '$info'
20.12:
- '$asserton'
- '$assertoff'
- '$assertkill'
- '$assertcontrol'
- '$assertpasson'
- '$assertpassoff'
- '$assertfailon'
- '$assertfailoff'
- '$assertnonvacuouson'
- '$assertvacuousoff'
20.13:
- '$sampled'
- '$rose'
- '$fell'
- '$stable'
- '$changed'
- '$past'
- '$past_gclk'
- '$rose_gclk'
- '$fell_gclk'
- '$stable_gclk'
- '$changed_gclk'
- '$future_gclk'
- '$rising_gclk'
- '$falling_gclk'
- '$steady_gclk'
- '$changing_gclk'
20.14:
- '$coverage_control'
- '$coverage_get_max'
- '$coverage_get'
- '$coverage_merge'
- '$coverage_save'
- '$get_coverage'
- '$set_coverage_db_name'
- '$load_coverage_db'
20.15:
- '$random'
- '$dist_chi_square'
- '$dist_erlang'
- '$dist_exponential'
- '$dist_normal'
- '$dist_poisson'
- '$dist_t'
- '$dist_uniform'
20.16:
- '$q_initialize'
- '$q_add'
- '$q_remove'
- '$q_full'
- '$q_exam'
20.17:
- '$async$and$array'
- '$async$and$plane'
- '$async$nand$array'
- '$async$nand$plane'
- '$async$or$array'
- '$async$or$plane'
- '$async$nor$array'
- '$async$nor$plane'
- '$sync$and$array'
- '$sync$and$plane'
- '$sync$nand$array'
- '$sync$nand$plane'
- '$sync$or$array'
- '$sync$or$plane'
- '$sync$nor$array'
- '$sync$nor$plane'
20.18:
- '$system'
21.2:
- '$display'
- '$displayb'
- '$displayh'
- '$displayo'
- '$strobe'
- '$strobeb'
- '$strobeh'
- '$strobeo'
- '$write'
- '$writeb'
- '$writeh'
- '$writeo'
- '$monitor'
- '$monitorb'
- '$monitorh'
- '$monitoro'
- '$monitoroff'
- '$monitoron'
21.3:
- '$fclose'
- '$fdisplay'
- '$fdisplayb'
- '$fdisplayh'
- '$fdisplayo'
- '$fstrobe'
- '$fstrobeb'
- '$fstrobeh'
- '$fstrobeo'
- '$swrite'
- '$swriteb'
- '$swriteh'
- '$swriteo'
- '$fscanf'
- '$fread'
- '$fseek'
- '$fflush'
- '$feof'
- '$fopen'
- '$fwrite'
- '$fwriteb'
- '$fwriteh'
- '$fwriteo'
- '$fmonitor'
- '$fmonitorb'
- '$fmonitorh'
- '$fmonitoro'
- '$sformat'
- '$sformatf'
- '$fgetc'
- '$ungetc'
- '$fgets'
- '$sscanf'
- '$rewind'
- '$ftell'
- '$ferror'
21.4:
- '$readmemb'
- '$readmemh'
21.5:
- '$writememb'
- '$writememh'
21.6:
- '$test$plusargs'
- '$value$plusargs'
21.7:
- '$dumpfile'
- 'idumpoff'
- '$dumpall'
- '$dumpflush'
- '$dumpportsoff'
- '$dumpportsall'
- '$dumpportsflush'
- '$dumpvars'
- '$dumpon'
- '$dumplimit'
- '$dumpports'
- '$dumpportson'
- '$dumpportslimit'
22.3:
- '`resetall'
22.4:
- '`include'
22.5:
- '`define'
- '`undef'
- '`undefineall'
22.6:
- '`else'
- '`elsif'
- '`endif'
- '`ifdef'
- '`ifndef'
22.7:
- '`timescale'
22.8:
- '`default_nettype'
22.9:
- '`unconnected_drive'
- '`nounconnected_drive'
22.10:
- '`celldefine'
- '`endcelldefine'
22.11:
- '`pragma'
22.12:
- '`line'
22.13:
- '`__FILE__'
- '`__LINE__'
22.14:
- '`begin_keywords'
- '`end_keywords'
23.2:
- 'module'
- 'macromodule'
- 'endmodule'
23.5:
- 'extern module'
24.3:
- 'program'
- 'endprogram'
25.3:
- 'interface'
- 'endinterface'
26.2:
- 'package'
- 'endpackage'
26.3:
- 'import'
================================================
FILE: conf/fusesoc-configs/ibex-sim.yml
================================================
# Copyright (C) 2019-2021 The SymbiFlow Authors.
#
# Use of this source code is governed by a ISC-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/ISC
#
# SPDX-License-Identifier: ISC
name: ibex
description: Full ibex core test
top_module: ibex_simple_system
tags: ibex
path: third_party/cores/ibex
command: fusesoc --cores-root third_party/cores/ibex run --target=sim --setup lowrisc:ibex:ibex_simple_system --RV32E=0 --RV32M=ibex_pkg::RV32MFast
conf_file: build/lowrisc_ibex_ibex_simple_system_0/sim-verilator/lowrisc_ibex_ibex_simple_system_0.vc
test_file: ibex-sim.sv
timeout: 100
compatible-runners: verilator slang circt-verilog
type: parsing elaboration simulation_without_run
================================================
FILE: conf/fusesoc-configs/veer-eh1-sim.yml
================================================
# Copyright (C) 2019-2021 The SymbiFlow Authors.
#
# Use of this source code is governed by a ISC-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/ISC
#
# SPDX-License-Identifier: ISC
name: veer-eh1
description: Full VeeR EH1 core test
top_module: tb_top
tags: veer-eh1
path: third_party/cores/veer-eh1
command: fusesoc --cores-root third_party/cores/veer-eh1 run --target=sim --setup --build-root build/veer-eh1_sim chipsalliance.org:cores:VeeR_EH1:1.8
conf_file: build/veer-eh1_sim/sim-verilator/chipsalliance.org_cores_VeeR_EH1_1.8.vc
test_file: veer-eh1-sim.sv
timeout: 180
compatible-runners: verilator slang circt-verilog
type: parsing elaboration simulation_without_run
================================================
FILE: conf/fusesoc-configs/veer-eh1-synth.yml
================================================
# Copyright (C) 2019-2021 The SymbiFlow Authors.
#
# Use of this source code is governed by a ISC-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/ISC
#
# SPDX-License-Identifier: ISC
name: veer-eh1
description: Full VeeR EH1 core test
top_module: veer-eh1_wrapper
tags: veer-eh1
path: third_party/cores/veer-eh1
command: fusesoc --cores-root third_party/cores/veer-eh1 run --target=synth --setup --build-root build/veer-eh1_synth chipsalliance.org:cores:VeeR_EH1:1.8
conf_file: build/veer-eh1_synth/synth-vivado/chipsalliance.org_cores_VeeR_EH1_1.8.tcl
test_file: veer-eh1-synth.sv
timeout: 180
compatible-runners: yosys-synlig yosys yosys-sv zachjs-sv2v icarus moore moore-parse odin sv-parser tree-sitter-verilog verible verible_extractor Surelog slang-parse circt-verilog
type: parsing elaboration
================================================
FILE: conf/generators/meta-path/basejump.json
================================================
{
"name": "BaseJumpSTL",
"project": "basejump",
"paths": [
[
"cores",
"basejump_stl",
"*"
]
],
"matches": [
"*.sv"
],
"commons": [
"cores/basejump_stl/bsg_misc/bsg_defines.sv",
"cores/basejump_stl/bsg_cache/bsg_cache_pkg.sv",
"cores/basejump_stl/bsg_cache/bsg_cache_non_blocking_pkg.sv",
"cores/basejump_stl/bsg_dmc/bsg_dmc_pkg.sv",
"cores/basejump_stl/bsg_noc/bsg_noc_pkg.sv",
"cores/basejump_stl/bsg_noc/bsg_mesh_router_pkg.sv",
"cores/basejump_stl/bsg_noc/bsg_wormhole_router_pkg.sv",
"cores/basejump_stl/bsg_tag/bsg_tag_pkg.sv",
"cores/basejump_stl/bsg_test/bsg_dramsim3_pkg.sv",
"cores/basejump_stl/bsg_axi/bsg_axi_pkg.sv"
],
"incdirs": [
"cores/basejump_stl/bsg_misc",
"cores/basejump_stl/bsg_noc",
"cores/basejump_stl/bsg_clk_gen"
],
"timeouts": {
"bsg_scatter_gather.sv": "60",
"bsg_launch_sync_sync.sv": "60",
"bsg_cache.sv": "30",
"bsg_cache_non_blocking_mhu.sv": "30",
"bsg_tag_master.sv": "30",
"bsg_round_robin_fifo_to_fifo.sv": "30"
},
"blacklist": [
"bsg_1_to_n_tagged_fifo_shared.sv",
"bsg_cache_BaseJumpSTL_bsg_cache_to_axi.sv",
"bsg_cache_BaseJumpSTL_bsg_cache_to_axi_rx.sv",
"bsg_cache_BaseJumpSTL_bsg_cache_to_axi_tx.sv",
"bsg_cache_non_blocking_pkg.sv",
"bsg_cache_pkg.sv",
"bsg_cache_to_dram_ctrl.sv",
"bsg_dmc_pkg.sv",
"bsg_dramsim3_pkg.sv",
"bsg_mem_banked_crossbar.sv",
"bsg_mem_multiport.sv",
"bsg_mem_multiport_latch_write_banked_bypassing.sv",
"bsg_mem_multiport_latch_write_banked_bypassing_sync.sv",
"bsg_mesh_router_pkg.sv",
"bsg_nonsynth_mixin_motherboard.sv",
"bsg_pg_tree.sv",
"bsg_sbox_ctrl.sv",
"bsg_sbox_ctrl_concentrate.sv",
"bsg_sparse_to_dense_boolean.sv",
"bsg_tag_pkg.sv",
"bsg_test_BaseJumpSTL_bsg_nonsynth_axi_mem.sv",
"bsg_wormhole_router_pkg.sv",
"test_bsg_clock_params.sv",
"bsg_dmc_xilinx_ui_trace_replay.sv",
"bsg_nonsynth_profiler.sv"
],
"fake_topmodule": true,
"results_group": "imported"
}
================================================
FILE: conf/generators/meta-path/hdlconvertor.json
================================================
{
"name": "hdlconvertor",
"project": "hdlconv",
"paths": [
["tests", "hdlconvertor", "tests", "sv_test", "others"],
["tests", "hdlconvertor", "tests", "verilog", "*"]
],
"matches": ["*.sv", "*.v"],
"blacklist": [
"aFifo.v",
"adder_implicit.v",
"aes.v",
"directive_verilogpp.v",
"fifo_rx.sv",
"hierarchical_name_of_type.sv",
"lfsr_updown_tb.v",
"parity_using_function2.v",
"stm_import.sv"
],
"type": "parsing",
"results_group": "imported"
}
================================================
FILE: conf/generators/meta-path/hdlconvertor_std2012.json
================================================
{
"name": "hdlconvertor_std2012",
"project": "hdlconv_std2012",
"paths": [
["tests", "hdlconvertor", "tests", "sv_test", "std2012"]
],
"matches": ["*.sv", "*.v"],
"blacklist": [
"p12.sv",
"p59.sv",
"p138.sv",
"p140.sv",
"p160_2.sv",
"p76.sv",
"p77.sv",
"p87.sv"
],
"type": "parsing",
"results_group": "imported"
}
================================================
FILE: conf/generators/meta-path/hdlconvertor_std2017.json
================================================
{
"name": "hdlconvertor_std2017",
"project": "hdlconv_std2017",
"paths": [
["tests", "hdlconvertor", "tests", "sv_test", "std2017"]
],
"matches": ["*.sv", "*.v"],
"blacklist": [
"p95.sv",
"p137.sv",
"p141.sv",
"p142.sv",
"p172.sv",
"p174_2.sv",
"p176.sv",
"p180.sv",
"p180_2.sv",
"p188_3.sv",
"p191.sv",
"p196_2.sv",
"p197.sv",
"p201.sv",
"p220.sv",
"p221.sv",
"p229.sv",
"p229_2.sv",
"p253.sv",
"p294.sv",
"p295.sv",
"p296.sv",
"p297.sv",
"p333.sv",
"p335.sv",
"p338.sv",
"p339.sv",
"p340.sv",
"p341.sv",
"p342.sv",
"p346.sv",
"p352.sv",
"p477.sv",
"p478.sv",
"p499.sv",
"p504.sv",
"p504_2.sv",
"p507.sv",
"p510.sv",
"p522.sv",
"p524.sv",
"p532.sv",
"p535.sv",
"p550.sv",
"p552.sv",
"p557.sv",
"p558.sv",
"p560.sv",
"p565.sv",
"p566.sv",
"p568.sv",
"p573.sv",
"p576.sv",
"p578.sv",
"p580.sv",
"p581.sv",
"p584.sv",
"p594.sv",
"p621.sv",
"p622.sv",
"p700.sv",
"p701.sv",
"p702.sv",
"p704.sv",
"p706.sv",
"p710.sv",
"p711.sv",
"p713.sv",
"p714.sv",
"p716.sv",
"p720.sv",
"p721.sv",
"p724.sv",
"p726.sv",
"p731.sv",
"p732.sv",
"p734.sv",
"p735.sv",
"p736.sv",
"p753.sv",
"p755.sv",
"p764.sv",
"p772.sv",
"p773.sv",
"p777.sv",
"p782.sv",
"p793.sv",
"p794.sv",
"p795.sv",
"p802.sv",
"p825.sv",
"p832.sv",
"p833.sv",
"p834.sv",
"p836.sv",
"p837.sv",
"p886.sv",
"p940.sv"
],
"type": "parsing",
"results_group": "imported"
}
================================================
FILE: conf/generators/meta-path/projf-explore.json
================================================
{
"name": "projf",
"project": "projf-explore",
"paths": [
["tests", "projf-explore", "*", "*", "*"]
],
"matches": ["*.sv"],
"type": "parsing",
"blacklist": [
"MMCME2_BASE.sv",
"OBUFDS.sv",
"OSERDESE2.sv",
"SB_IO.sv",
"SB_PLL40_PAD.sv",
"clock_1080p.sv",
"clock_480p.sv",
"clock_720p.sv",
"clock_gen_1080p.sv",
"clock_gen_480p.sv",
"clock_gen_480p_tb.sv",
"clock_gen_720p.sv",
"clock_gen_sys.sv",
"clock_sys.sv",
"clock_tb.sv",
"clut_simple_tb.sv",
"display_480p_tb.sv",
"display_720p_tb.sv",
"div_int_tb.sv",
"div_tb.sv",
"draw_char_tb.sv",
"draw_circle_tb.sv",
"draw_line_1d_tb.sv",
"draw_line_tb.sv",
"draw_rectangle_fill_tb.sv",
"draw_rectangle_tb.sv",
"draw_triangle_fill_tb.sv",
"draw_triangle_tb.sv",
"dvi_generator.sv",
"get_glyph_line_tb.sv",
"lfsr_tb.sv",
"life_tb.sv",
"linebuffer_simple_tb.sv",
"oserdes_10b.sv",
"render_circles.sv",
"render_circles_fill.sv",
"render_cube.sv",
"render_cube_fill.sv",
"render_cube_shatter.sv",
"render_edge.sv",
"render_line.sv",
"render_rects.sv",
"render_rects_fill.sv",
"render_square_colr.sv",
"render_teleport.sv",
"render_triangles.sv",
"render_triangles_fill.sv",
"simple_480p_tb.sv",
"simple_720p_tb.sv",
"sine_table_tb.sv",
"spram.sv",
"spram_nibble.sv",
"sprite_inline_tb.sv",
"sprite_rom_tb.sv",
"sprite_tb.sv",
"sqrt_int_tb.sv",
"sqrt_tb.sv",
"starfield_tb.sv",
"tmds_out.sv",
"top.sv",
"top_bounce.sv",
"top_castle.sv",
"top_colour.sv",
"top_colour_cycle.sv",
"top_david_16colr.sv",
"top_david_fizzle.sv",
"top_david_mono.sv",
"top_david_scale.sv",
"top_demo.sv",
"top_demo_sb.sv",
"top_flag_ethiopia.sv",
"top_flag_sweden.sv",
"top_graphing.sv",
"top_greet.sv",
"top_greet_v1.sv",
"top_hedgehog.sv",
"top_hello.sv",
"top_hello_en.sv",
"top_hello_jp.sv",
"top_hitomezashi.sv",
"top_hourglass.sv",
"top_mandel.sv",
"top_lfsr.sv",
"top_life.sv",
"top_pong.sv",
"top_rasterbars.sv",
"top_sinescroll.sv",
"top_space_f.sv",
"top_square.sv",
"top_starfields.sv",
"top_tinyf_inline.sv",
"top_tinyf_move.sv",
"top_tinyf_rom.sv",
"top_tinyf_scale.sv",
"top_uart.sv",
"xd_tb.sv"
],
"results_group": "imported"
}
================================================
FILE: conf/generators/meta-path/utd-systemverilog.json
================================================
{
"name": "utd-sv",
"project": "utd-sv",
"paths": [
["tests", "utd-sv"]
],
"matches": ["*.v"],
"type": "parsing",
"results_group": "imported",
"blacklist": [
"bw_dtl_impctl_pulldown.v",
"bw_dtl_impctl_pullup.v",
"bw_r_l2d.v",
"bw_zzctu_sync.v",
"c2i_buf.v",
"c2i_sdp.v",
"casez.v",
"ccx.v",
"ccx_arb_atomq.v",
"ccx_arb_srcq.v",
"ccx_arbc.v",
"chip8_config.v",
"cluster_header_dup.v",
"core1_config.v",
"cpx.v",
"cpx_buf_pt.v",
"cpx_buf_top.v",
"cpx_datacx2_ff.v",
"cpx_dp0.v",
"cpx_dp2.v",
"cpx_dp4.v",
"cpx_dp6.v",
"cpx_dp_array.v",
"cpx_dp_halfarray.v",
"cpx_io_grant_ff.v",
"ctu_bottom_rptr.v",
"ctu_bottom_rptr2.v",
"ctu_clsp_clkgn_clksel.v",
"ctu_clsp_clkgn_clksw.v",
"ctu_clsp_clkgn_ssiclk.v",
"ctu_clsp_cmpgif.v",
"ctu_clsp_jbusgif.v",
"ctu_clsp_synch_cljl.v",
"ctu_clsp_synch_dldg.v",
"ctu_clsp_synch_jldl.v",
"ctu_sync_header.v",
"ctu_top_rptr.v",
"ctu_top_rptr2.v",
"dbginit_mon.v",
"dbl_buf.v",
"efc_lib.v",
"expression_tostring.v",
"ff_dram_sc_bank0.v",
"ff_dram_sc_bank1.v",
"ff_dram_sc_bank2.v",
"ff_dram_sc_bank3.v",
"ff_jbi_sc0_1.v",
"ff_jbi_sc0_2.v",
"ff_jbi_sc1_1.v",
"ff_jbi_sc1_2.v",
"ff_jbi_sc2_1.v",
"ff_jbi_sc2_2.v",
"ff_jbi_sc3_1.v",
"ff_jbi_sc3_2.v",
"flop_rptrs_xa0.v",
"flop_rptrs_xa1.v",
"flop_rptrs_xb0.v",
"flop_rptrs_xb1.v",
"flop_rptrs_xb2.v",
"flop_rptrs_xb3.v",
"flop_rptrs_xc0.v",
"flop_rptrs_xc1.v",
"flop_rptrs_xc2.v",
"flop_rptrs_xc3.v",
"flop_rptrs_xc4.v",
"flop_rptrs_xc5.v",
"flop_rptrs_xc6.v",
"flop_rptrs_xc7.v",
"forever-disable.v",
"fpu.v",
"fpu_add_ctl.v",
"fpu_add_exp_dp.v",
"fpu_div.v",
"fpu_div_exp_dp.v",
"fpu_in_ctl.v",
"fpu_in_dp.v",
"fpu_mul_ctl.v",
"fpu_mul_exp_dp.v",
"fpu_out.v",
"fpu_out_ctl.v",
"fpu_out_dp.v",
"fpu_rptr_groups.v",
"generate.v",
"i2c_fctrl.v",
"i2c_fdp.v",
"ifdef-2.v",
"ifdef-2.v",
"io_cpx_reqdata_ff.v",
"lsu_dcdp.v",
"lsu_pcx_qmon.v",
"lsu_qdp1.v",
"lsu_qdp2.v",
"lsu_rrobin_picker2.v",
"lsu_stb_ctldp.v",
"lsu_stb_rwdp.v",
"lsu_tagdp.v",
"lsu_tlbdp.v",
"module-instance.v",
"operators.v",
"pad_ddr0.v",
"pad_ddr1.v",
"pad_ddr2.v",
"pad_ddr3.v",
"pad_jbusf.v",
"pad_jbusl.v",
"pad_jbusr.v",
"pcx.v",
"pcx_buf_pt.v",
"pcx_buf_pt1.v",
"pcx_buf_top.v",
"pcx_data_px2.v",
"pcx_dp0.v",
"pcx_dp1.v",
"pcx_dp2.v",
"pcx_dp3.v",
"pcx_dp4.v",
"pcx_dp_array.v",
"pcx_dp_array02.v",
"pcx_dp_array134.v",
"sc_0_1_dbg_rptr.v",
"sc_2_3_dbg_rptr.v",
"scbuf.v",
"scbuf_evict.v",
"scbuf_fbd.v",
"scbuf_rdmard.v",
"scdata_ctr_io.v",
"scdata_periph_io.v",
"scdata_subbank.v",
"sctag_arbaddrdp.v",
"sctag_dbgdp.v",
"sctag_deccdp.v",
"sctag_dir_ctl.v",
"sctag_dir_in.v",
"sctag_dir_out.v",
"sctag_dirrep.v",
"sctag_dirvec_dp.v",
"sctag_oqdp.v",
"sctag_retdp.v",
"sctag_scbufrep.v",
"sctag_snpctl.v",
"sctag_snpdp.v",
"sctag_tagdp.v",
"sctag_tagl_dp.v",
"sctag_ua_dp.v",
"sctag_vd_dp.v",
"sctag_vuad_ctl.v",
"sctag_vuad_dpm.v",
"sctag_vuad_io.v",
"sctag_vuadcol_dp.v",
"sctag_vuaddp_ctl.v",
"sctag_wbctl.v",
"sparc_exu_aluaddsub.v",
"sparc_exu_alulogic.v",
"sparc_exu_byp_eccgen.v",
"sparc_exu_ecc.v",
"sparc_exu_ecl_cnt6.v",
"sparc_exu_ecl_divcntl.v",
"sparc_exu_shft.v",
"sparc_ffu_ctl_visctl.v",
"sparc_ffu_vis.v",
"sparc_ifu_sscan.v",
"sparc_ifu_thrcmpl.v",
"spu_lsurpt1.v",
"spu_maexp.v",
"spu_mald.v",
"spu_mast.v",
"std-3.11.1-parameters.v",
"sync_pulse_synchronizer.v",
"synchronizer_asr.v",
"synchronizer_asr_dup.v",
"tlu_misctl.v",
"ucb_bus_in.v",
"ucb_bus_out.v",
"ucb_flow_jbi.v",
"ucb_flow_spi.v"
]
}
================================================
FILE: conf/generators/meta-path/yosys-asicworld.json
================================================
{
"name": "asicworld",
"project": "yosys",
"paths": [
["tools", "yosys", "tests", "asicworld"]
],
"matches": ["*.v"],
"blacklist": ["code_verilog_tutorial_counter_tb.v", "code_hdl_models_arbiter_tb.v", "code_verilog_tutorial_first_counter_tb.v", "code_verilog_tutorial_fsm_full_tb.v", "code_hdl_models_full_subtracter_gates.v", "simple_values.v", "svinterface_at_top.sv"],
"results_group": "imported"
}
================================================
FILE: conf/generators/meta-path/yosys-errors.json
================================================
{
"name": "errors",
"project": "yosys",
"should_fail_because": "this test imported from yosys repository contains intentional syntax error",
"paths": [
["tools", "yosys", "tests", "errors"]
],
"matches": ["*.v"],
"blacklist": ["syntax_err06.v", "syntax_err09.v", "syntax_err12.v", "syntax_err13.v"],
"results_group": "imported"
}
================================================
FILE: conf/generators/meta-path/yosys-memories.json
================================================
{
"name": "memories",
"project": "yosys",
"paths": [
["tools", "yosys", "tests", "memories"]
],
"matches": ["*.v"],
"blacklist": ["issue00335.v"],
"results_group": "imported"
}
================================================
FILE: conf/generators/meta-path/yosys-simple.json
================================================
{
"name": "simple",
"project": "yosys",
"paths": [
["tools", "yosys", "tests", "simple"]
],
"matches": ["*.v"],
"blacklist": ["hierdefparam.v", "memory.v", "values.v", "func_width_scope.v", "named_genblk.v", "mem2reg_bounds_tern.v", "module_scope_func.v"],
"results_group": "imported"
}
================================================
FILE: conf/generators/meta-path/yosys-sva.json
================================================
{
"name": "sva",
"project": "yosys",
"paths": [
["tools", "yosys", "tests", "sva"]
],
"matches": ["*.sv"],
"blacklist": ["basic04.sv", "basic05.sv"],
"results_group": "imported"
}
================================================
FILE: conf/generators/meta-path/yosys-svinterfaces.json
================================================
{
"name": "svinterfaces",
"project": "yosys",
"paths": [
["tools", "yosys", "tests", "svinterfaces"]
],
"matches": ["*.sv"],
"blacklist": ["svinterface1.sv", "svinterface_at_top.sv", "load_and_derive.sv", "ondemand.sv", "resolve_types.sv"],
"results_group": "imported"
}
================================================
FILE: conf/generators/templates/assignment-sim.json
================================================
{
"name": "assignment_sim",
"filename": "11.4.1--{1}_assignment-sim-{4}.sv",
"template": [
"/*",
":name: {1}_assignment_sim_{4}",
":description: {0}= assignment simulation test",
":type: simulation elaboration parsing",
":tags: 11.4.1",
"*/",
"module top();",
"reg [31:0] a;",
"wire [31:0] b;",
"assign b = 32'd{3};",
"final begin",
" a = 32'd{2};",
" a {0}= b;",
" $display(\":assert: (int(%s) == %d)\", \"{2}{0}{3}\", a);",
"end",
"endmodule"
],
"cartesian_product": "true",
"values": [[
["+", "plus"],
["-", "minus"],
["*", "mul"],
["/", "div"],
["%", "mod"],
["&", "and"],
["|", "or"],
["^", "xor"],
["<<", "log_shl"],
[">>", "log_shr"]
],
[
["4", "3", "0"],
["4", "4", "1"]
]]
}
================================================
FILE: conf/generators/templates/assignment.json
================================================
{
"name": "assignment_op",
"filename": "11.4.1--{1}_assignment.sv",
"template": [
"/*",
":name: {1}_assignment",
":description: {0} assignment test",
":tags: 11.4.1",
"*/",
"module top();",
"int a = 12;",
"int b = 5;",
"initial begin",
" a {0} b;",
"end",
"endmodule"
],
"values": [
["=", "normal"],
["+=", "plus"],
["-=", "minus"],
["*=", "mul"],
["/=", "div"],
["%=", "mod"],
["&=", "and"],
["|=", "or"],
["^=", "xor"],
["<<=", "log_shl"],
[">>=", "log_shr"],
["<<<=", "arith_shl"],
[">>>=", "arith_shr"]
]
}
================================================
FILE: conf/generators/templates/binary.json
================================================
{
"name": "binary_op",
"filename": "{2}--binary_op_{1}.sv",
"template": [
"/*",
":name: binary_op_{1}",
":description: {0} operator test",
":tags: {2}",
"*/",
"module top();",
"int a = 12;",
"int b = 5;",
"int c;",
"initial begin",
" c = a {0} b;",
"end",
"endmodule"
],
"values": [
["+", "plus", "11.4.3"],
["-", "minus", "11.4.3"],
["*", "mul", "11.4.3"],
["/", "div", "11.4.3"],
["%", "mod", "11.4.3"],
["==", "log_eq", "11.4.5"],
["!=", "log_neq", "11.4.5"],
["===", "case_eq", "11.4.5"],
["!==", "case_neq", "11.4.5"],
["==?", "wild_eq", "11.4.6"],
["!=?", "wild_neq", "11.4.6"],
["&&", "log_and", "11.4.7"],
["||", "log_or", "11.4.7"],
["**", "pow", "11.4.3"],
["<", "lt", "11.4.4"],
["<=", "le", "11.4.4"],
[">", "gt", "11.4.4"],
[">=", "ge", "11.4.4"],
["&", "bit_and", "11.4.8"],
["|", "bit_or", "11.4.8"],
["^", "bit_xor", "11.4.8"],
["^~", "bit_xnor", "11.4.8"],
["~^", "bit_xnor", "11.4.8"],
[">>", "log_shr", "11.4.10"],
["<<", "log_shl", "11.4.10"],
[">>>", "arith_shr", "11.4.10"],
["<<<", "arith_shl", "11.4.10"],
["->", "log_imp", "11.4.7"],
["<->", "log_equiv", "11.4.7"]
]
}
================================================
FILE: conf/generators/templates/encapsulation-fail.json
================================================
{
"name": "encapsulation",
"filename": "8.18--{0}.sv",
"template": [
"/*",
":name: {0}",
":description: encapsulation test",
":should_fail_because: {1}",
":tags: 8.18",
":type: simulation elaboration",
"*/",
"module top();",
"class a_cls;",
" local int a_loc = 21;",
" protected int a_prot = 22;",
" int a = 23;",
"endclass",
"class b_cls extends a_cls;",
" local int b_loc = 31;",
" protected int b_prot = 32;",
" int b = 33;",
" function void fun();",
" $display({2});",
" endfunction",
"endclass",
"b_cls b_obj;",
"initial begin",
" b_obj = new;",
" $display(b_obj.{3});",
" b_obj.fun();",
"end",
"endmodule"
],
"values": [
["inherited_local_from_outside", "It is illegal to access inherited local variable from subclass instance.", "b", "a_loc"],
["local_from_outside", "It is illegal to access local variable from class instance.", "b", "b_loc"],
["inherited_prot_from_outside", "It is illegal to access inherited protected variable from subclass instance.", "b", "a_prot"],
["prot_from_outside", "It is illegal to access protected variable from class instance.", "b", "b_prot"],
["inherited_local_from_inside", "It is illegal to access inherited local variable inside subclass.", "a_loc", "b"]
]
}
================================================
FILE: conf/generators/templates/encapsulation-success.json
================================================
{
"name": "encapsulation",
"filename": "8.18--{0}.sv",
"template": [
"/*",
":name: {0}",
":description: encapsulation test",
":tags: 8.18",
":type: simulation elaboration parsing",
"*/",
"module top();",
"class a_cls;",
" local int a_loc = 21;",
" protected int a_prot = 22;",
" int a = 23;",
"endclass",
"class b_cls extends a_cls;",
" local int b_loc = 31;",
" protected int b_prot = 32;",
" int b = 33;",
" function void fun();",
" $display({1});",
" endfunction",
"endclass",
"b_cls b_obj;",
"initial begin",
" b_obj = new;",
" $display(b_obj.{2});",
" b_obj.fun();",
"end",
"endmodule"
],
"values": [
["local_from_inside", "b_loc", "b"],
["inherited_prot_from_inside", "a_prot", "b"],
["prot_from_inside", "b_prot", "b"]
]
}
================================================
FILE: conf/generators/templates/equality.json
================================================
{
"name": "equality_operators_sim",
"filename": "11.4.5--equality_operator_{4}.sv",
"template": [
"/*",
":name: equality_operator_sim_{4}",
":description: equality operator test in simulation",
":type: simulation elaboration parsing",
":tags: 11.4.5",
"*/",
"module top();",
"wire [7:0] a = {0};",
"wire [7:0] b = {1};",
"wire c;",
"assign a = {0};",
"assign b = {1};",
"assign c = a {2} b;",
"final begin",
" $display(\":assert: ('%s' == '%d')\", \"{3}\", c);",
"end",
"endmodule"
],
"values": [
["8'b1101x001", "8'b1101x001", "==" , "x"],
["8'b1101x001", "8'b1101x000", "==" , "0"],
["8'b1101z001", "8'b1101z001", "==" , "x"],
["8'b1101z001", "8'b1101z000", "==" , "0"],
["8'b11011001", "8'b11011001", "==" , "1"],
["8'b11011001", "8'b11011000", "==" , "0"],
["8'b1101x001", "8'b1101x001", "!=" , "x"],
["8'b1101x001", "8'b1101x000", "!=" , "1"],
["8'b1101z001", "8'b1101z001", "!=" , "x"],
["8'b1101z001", "8'b1101z000", "!=" , "1"],
["8'b11011001", "8'b11011001", "!=" , "0"],
["8'b11011001", "8'b11011000", "!=" , "1"],
["8'b1101x001", "8'b1101x001", "===", "1"],
["8'b1101x001", "8'b1101x000", "===", "0"],
["8'b1101z001", "8'b1101z001", "===", "1"],
["8'b1101z001", "8'b1101z000", "===", "0"],
["8'b11011001", "8'b11011001", "===", "1"],
["8'b11011001", "8'b11011000", "===", "0"],
["8'b1101x001", "8'b1101x001", "!==", "0"],
["8'b1101x001", "8'b1101x000", "!==", "1"],
["8'b1101z001", "8'b1101z001", "!==", "0"],
["8'b1101z001", "8'b1101z000", "!==", "1"],
["8'b11011001", "8'b11011001", "!==", "0"],
["8'b11011001", "8'b11011000", "!==", "1"],
["8'b1101z001", "8'b1101x001", "===", "0"],
["8'b1101z001", "8'b1101x001", "==" , "x"]
]
}
================================================
FILE: conf/generators/templates/force-assignments.json
================================================
{
"name": "assignment-strengths",
"filename": "10.3.4--assignment_{0}_{1}.sv",
"template": [
"/*",
":name: cont_assignment_strength_{0}_{1}",
":description: {0} {1} assignment test",
":tags: 10.3.4",
"*/",
"module top(input a, input b);",
"wire ({0}, {1}) w = a & b;",
"endmodule"
],
"values": [
["supply1", "supply0"],
["strong1", "supply0"],
["pull1", "supply0"],
["weak1", "supply0"],
["highz1", "supply0"],
["supply1", "strong0"],
["strong1", "strong0"],
["pull1", "strong0"],
["weak1", "strong0"],
["highz1", "strong0"],
["supply1", "pull0"],
["strong1", "pull0"],
["pull1", "pull0"],
["weak1", "pull0"],
["highz1", "pull0"],
["supply1", "weak0"],
["strong1", "weak0"],
["pull1", "weak0"],
["weak1", "weak0"],
["highz1", "weak0"],
["supply1", "highz0"],
["strong1", "highz0"],
["pull1", "highz0"],
["weak1", "highz0"]
]
}
================================================
FILE: conf/generators/templates/integers.json
================================================
{
"name": "integers",
"filename": "6.11--integer_{2}.sv",
"template": [
"/*",
":name: integer_{2}",
":description: {1} {0}net test",
":tags: 6.11",
"*/",
"module top();",
"{1} {0}v;",
"endmodule"
],
"values": [
["", "shortint", "shortint"],
["", "int", "int"],
["", "longint", "longint"],
["", "byte", "byte"],
["", "bit", "bit"],
["", "logic", "logic"],
["", "reg", "reg"],
["", "integer", "integer"],
["", "time", "time"],
["signed ", "shortint", "signed_shortint"],
["signed ", "int", "signed_int"],
["signed ", "longint", "signed_longint"],
["signed ", "byte", "signed_byte"],
["signed ", "bit", "signed_bit"],
["signed ", "logic", "signed_logic"],
["signed ", "reg", "signed_reg"],
["signed ", "integer", "signed_integer"],
["signed ", "time", "signed_time"],
["unsigned ", "shortint", "unsigned_shortint"],
["unsigned ", "int", "unsigned_int"],
["unsigned ", "longint", "unsigned_longint"],
["unsigned ", "byte", "unsigned_byte"],
["unsigned ", "bit", "unsigned_bit"],
["unsigned ", "logic", "unsigned_logic"],
["unsigned ", "reg", "unsigned_reg"],
["unsigned ", "integer", "unsigned_integer"],
["unsigned ", "time", "unsigned_time"]
]
}
================================================
FILE: conf/generators/templates/keywords.json
================================================
{
"name": "keywords",
"filename": "5.6.2--keyword_{0}.sv",
"template": [
"/*",
":name: keyword_{0}",
":description: The '{0}' keyword should be reserved",
":should_fail_because: The '{0}' keyword should be reserved",
":tags: 5.6.2",
"*/",
"module top();",
" bit {0};",
"endmodule"
],
"values": [
["accept_on"],
["alias"],
["always"],
["always_comb"],
["always_ff"],
["always_latch"],
["and"],
["assert"],
["assign"],
["assume"],
["automatic"],
["before"],
["begin"],
["bind"],
["bins"],
["binsof"],
["bit"],
["break"],
["buf"],
["bufif0"],
["bufif1"],
["byte"],
["case"],
["casex"],
["casez"],
["cell"],
["chandle"],
["checker"],
["class"],
["clocking"],
["cmos"],
["config"],
["const"],
["constraint"],
["context"],
["continue"],
["cover"],
["covergroup"],
["coverpoint"],
["cross"],
["deassign"],
["default"],
["defparam"],
["design"],
["disable"],
["dist"],
["do"],
["edge"],
["else"],
["end"],
["endcase"],
["endchecker"],
["endclass"],
["endclocking"],
["endconfig"],
["endfunction"],
["endgenerate"],
["endgroup"],
["endinterface"],
["endmodule"],
["endpackage"],
["endprimitive"],
["endprogram"],
["endproperty"],
["endspecify"],
["endsequence"],
["endtable"],
["endtask"],
["enum"],
["event"],
["eventually"],
["expect"],
["export"],
["extends"],
["extern"],
["final"],
["first_match"],
["for"],
["force"],
["foreach"],
["forever"],
["fork"],
["forkjoin"],
["function"],
["generate"],
["genvar"],
["global"],
["highz0"],
["highz1"],
["if"],
["iff"],
["ifnone"],
["ignore_bins"],
["illegal_bins"],
["implements"],
["implies"],
["import"],
["incdir"],
["include"],
["initial"],
["inout"],
["input"],
["inside"],
["instance"],
["int"],
["integer"],
["interconnect"],
["interface"],
["intersect"],
["join"],
["join_any"],
["join_none"],
["large"],
["let"],
["liblist"],
["library"],
["local"],
["localparam"],
["logic"],
["longint"],
["macromodule"],
["matches"],
["medium"],
["modport"],
["module"],
["nand"],
["negedge"],
["nettype"],
["new"],
["nexttime"],
["nmos"],
["nor"],
["noshowcancelled"],
["not"],
["notif0"],
["notif1"],
["null"],
["or"],
["output"],
["package"],
["packed"],
["parameter"],
["pmos"],
["posedge"],
["primitive"],
["priority"],
["program"],
["property"],
["protected"],
["pull0"],
["pull1"],
["pulldown"],
["pullup"],
["pulsestyle_ondetect"],
["pulsestyle_onevent"],
["pure"],
["rand"],
["randc"],
["randcase"],
["randsequence"],
["rcmos"],
["real"],
["realtime"],
["ref"],
["reg"],
["reject_on"],
["release"],
["repeat"],
["restrict"],
["return"],
["rnmos"],
["rpmos"],
["rtran"],
["rtranif0"],
["rtranif1"],
["s_always"],
["s_eventually"],
["s_nexttime"],
["s_until"],
["s_until_with"],
["scalared"],
["sequence"],
["shortint"],
["shortreal"],
["showcancelled"],
["signed"],
["small"],
["soft"],
["solve"],
["specify"],
["specparam"],
["static"],
["string"],
["strong"],
["strong0"],
["strong1"],
["struct"],
["super"],
["supply0"],
["supply1"],
["sync_accept_on"],
["sync_reject_on"],
["table"],
["tagged"],
["task"],
["this"],
["throughout"],
["time"],
["timeprecision"],
["timeunit"],
["tran"],
["tranif0"],
["tranif1"],
["tri"],
["tri0"],
["tri1"],
["triand"],
["trior"],
["trireg"],
["type"],
["typedef"],
["union"],
["unique"],
["unique0"],
["unsigned"],
["until"],
["until_with"],
["untyped"],
["use"],
["uwire"],
["var"],
["vectored"],
["virtual"],
["void"],
["wait"],
["wait_order"],
["wand"],
["weak"],
["weak0"],
["weak1"],
["while"],
["wildcard"],
["wire"],
["with"],
["within"],
["wor"],
["xnor"],
["xor"]
]
}
================================================
FILE: conf/generators/templates/logical-equiv.json
================================================
{
"name": "logical_equivalence_operator_sim",
"filename": "11.4.7--logical_equiv_operator_{2}.sv",
"template": [
"/*",
":name: logical_equiv_operator_sim_{2}",
":description: logical equivalence operator test in simulation",
":type: simulation elaboration parsing",
":tags: 11.4.7",
"*/",
"module top();",
"wire a;",
"wire b;",
"wire c;",
"assign a = {0};",
"assign b = {1};",
"assign c = a <-> b;",
"final begin",
" $display(\":assert: ((%s) == %d)\", \"(((not {0}) or {1}) and ((not {1}) or {0}))\", c);",
"end",
"endmodule"
],
"values": [
["0", "0"],
["0", "1"],
["1", "0"],
["1", "1"]
]
}
================================================
FILE: conf/generators/templates/logical-impl.json
================================================
{
"name": "logical_implication_operator_sim",
"filename": "11.4.7--logical_impl_operator_{2}.sv",
"template": [
"/*",
":name: logical_impl_operator_sim_{2}",
":description: logical implication operator test in simulation",
":type: simulation elaboration parsing",
":tags: 11.4.7",
"*/",
"module top();",
"wire a;",
"wire b;",
"wire c;",
"assign a = {0};",
"assign b = {1};",
"assign c = a -> b;",
"final begin",
" $display(\":assert: ((%s) == %d)\", \"((not {0}) or {1})\", c);",
"end",
"endmodule"
],
"values": [
["0", "0"],
["0", "1"],
["1", "0"],
["1", "1"]
]
}
================================================
FILE: conf/generators/templates/logical.json
================================================
{
"name": "logical_operators_sim",
"filename": "11.4.7--logical_operator_{4}.sv",
"template": [
"/*",
":name: logical_operator_sim_{4}",
":description: logical operator test in simulation",
":type: simulation elaboration parsing",
":tags: 11.4.7",
"*/",
"module top();",
"wire a;",
"wire b;",
"wire c;",
"assign a = {0};",
"assign b = {1};",
"assign c = a {2} b;",
"final begin",
" $display(\":assert: ((%s) == %d)\", \"{0} {3} {1}\", c);",
"end",
"endmodule"
],
"cartesian_product": "true",
"values": [[
["0", "0"],
["0", "1"],
["1", "0"],
["1", "1"]
],
[
["&&", "and"],
["||", "or"]
]]
}
================================================
FILE: conf/generators/templates/nets.json
================================================
{
"name": "nets",
"filename": "{1}--net_{0}.sv",
"template": [
"/*",
":name: net_{0}",
":description: {0} net test",
":tags: {1}",
"*/",
"module top();",
"{0} v;",
"endmodule"
],
"values": [
["wire", "6.6.1"],
["tri", "6.6.1"],
["uwire", "6.6.2"],
["wor", "6.6.3"],
["wand", "6.6.3"],
["trior", "6.6.3"],
["triand", "6.6.3"],
["trireg", "6.6.4"],
["tri0", "6.6.5"],
["tri1", "6.6.5"],
["supply0", "6.6.6"],
["supply1", "6.6.6"]
]
}
================================================
FILE: conf/generators/templates/operators-sim.json
================================================
{
"name": "operators_sim",
"filename": "{2}--{1}_operator_sim_{5}.sv",
"template": [
"/*",
":name: {1}_operator_sim_{5}",
":description: {0} operator test in simulation",
":type: simulation elaboration parsing",
":tags: {2}",
"*/",
"module top();",
"wire [31:0] a;",
"wire [31:0] b;",
"wire [31:0] c;",
"assign a = 32'd{3};",
"assign b = 32'd{4};",
"assign c = a {0} b;",
"final begin",
" $display(\":assert: (int(%s) == %d)\", \"{3}{0}{4}\", c);",
"end",
"endmodule"
],
"cartesian_product": "true",
"values": [[
["+", "plus", "11.4.3"],
["-", "minus", "11.4.3"],
["*", "mul", "11.4.3"],
["/", "div", "11.4.3"],
["%", "mod", "11.4.3"],
["**", "exp", "11.4.3"],
["==", "log_eq", "11.4.5"],
["!=", "log_neq", "11.4.5"],
["<", "lt", "11.4.4"],
["<=", "le", "11.4.4"],
[">", "gt", "11.4.4"],
[">=", "ge", "11.4.4"],
["&", "bit_and", "11.4.8"],
["|", "bit_or", "11.4.8"],
["^", "bit_xor", "11.4.8"],
["<<", "log_shl", "11.4.10"],
[">>", "log_shr", "11.4.10"]
],
[
["4", "3", "0"],
["4", "4", "1"]
]]
}
================================================
FILE: conf/generators/templates/sampled-functions-gclk.json
================================================
{
"name": "sampled_functions",
"filename": "20.13--{0}.sv",
"template": [
"/*",
":name: {0}_function",
":description: ${0} test",
":tags: {1}",
":type: simulation elaboration parsing",
"*/",
"module top();",
"logic a, clk;",
"global clocking @(posedge clk); endclocking",
"assert property (@(posedge clk) ${0}(a)) else $info;",
"endmodule"
],
"values": [
["past_gclk", "20.13 16.9"],
["rose_gclk", "20.13 16.9"],
["fell_gclk", "20.13 16.9"],
["stable_gclk", "20.13 16.9"],
["changed_gclk", "20.13 16.9"],
["future_gclk", "20.13 16.9"],
["rising_gclk", "20.13 16.9"],
["falling_gclk", "20.13 16.9"],
["steady_gclk", "20.13 16.9"],
["changing_gclk", "20.13 16.9"]
]
}
================================================
FILE: conf/generators/templates/sampled-functions.json
================================================
{
"name": "sampled_functions",
"filename": "20.13--{0}.sv",
"template": [
"/*",
":name: {0}_function",
":description: ${0} test",
":tags: {1}",
":type: simulation elaboration parsing",
"*/",
"module top();",
"logic a, clk;",
"assert property (@(posedge clk) ${0}(a)) else $info;",
"endmodule"
],
"values": [
["sampled", "20.13 16.9"],
["rose", "20.13 16.9"],
["fell", "20.13 16.9"],
["stable", "20.13 16.9"],
["changed", "20.13 16.9"],
["past", "20.13 16.9"]
]
}
================================================
FILE: conf/generators/templates/simple-logical.json
================================================
{
"name": "simple_logical_operators_sim",
"filename": "11.4.7--simple_{1}_logical_operator.sv",
"template": [
"/*",
":name: simple_{1}_logical_operator_sim",
":description: minimal {0} operator simulation test (without result verification)",
":type: simulation elaboration parsing",
":tags: 11.4.7",
"*/",
"module top(input a, input b, output c);",
" assign c = a {0} b;",
"endmodule"
],
"values": [
["&&", "and"],
["||", "or"],
["<->", "equiv"],
["->", "impl"]
]
}
================================================
FILE: conf/generators/templates/simple-operators-sim.json
================================================
{
"name": "operators_sim",
"filename": "{2}--simple_{1}_operator_sim.sv",
"template": [
"/*",
":name: simple_{1}_operator_sim",
":description: minimal {0} operator simulation test (without result verification)",
":type: simulation elaboration parsing",
":tags: {2}",
"*/",
"module top(input [3:0] a, input [3:0] b, output [3:0] c);",
" assign c = a {0} b;",
"endmodule"
],
"values": [
["+", "plus", "11.4.3"],
["-", "minus", "11.4.3"],
["*", "mul", "11.4.3"],
["/", "div", "11.4.3"],
["%", "mod", "11.4.3"],
["**", "exp", "11.4.3"],
["==", "eq", "11.4.5"],
["!=", "neq", "11.4.5"],
["===", "eq_xz", "11.4.5"],
["!==", "neq_xz", "11.4.5"],
["<", "lt", "11.4.4"],
["<=", "le", "11.4.4"],
[">", "gt", "11.4.4"],
[">=", "ge", "11.4.4"],
["&", "bit_and", "11.4.8"],
["|", "bit_or", "11.4.8"],
["^", "bit_xor", "11.4.8"],
["<<", "log_shl", "11.4.10"],
[">>", "log_shr", "11.4.10"]
]
}
================================================
FILE: conf/generators/templates/simple-unary.json
================================================
{
"name": "unary_op",
"filename": "{2}--simple_unary_op_{1}.sv",
"template": [
"/*",
":name: simple_unary_op_{1}",
":description: minimal {0} operator simulation test (without result verification)",
":tags: {2}",
"*/",
"module top(input [3:0] a, output [3:0] b);",
" assign b = {0}a;",
"endmodule"
],
"values": [
["+", "plus", "11.3"],
["-", "minus", "11.3"],
["!", "not_log", "11.3"],
["~", "not_bit", "11.4.8"],
["&", "and", "11.4.9"],
["~&", "nand", "11.4.9"],
["|", "or", "11.4.9"],
["~|", "nor", "11.4.9"],
["^", "xor", "11.4.9"],
["~^", "xnor_1", "11.4.9"],
["^~", "xnor_2", "11.4.9"]
]
}
================================================
FILE: conf/generators/templates/trig-functions.json
================================================
{
"name": "trig_functions",
"filename": "20.8--{0}.sv",
"template": [
"/*",
":name: {0}_function",
":description: ${0} test",
":tags: 20.8",
":type: simulation elaboration parsing",
"*/",
"module top();",
"initial",
"$display(\"%f\", ${0}(4));",
"endmodule"
],
"values": [
["sin"],
["cos"],
["tan"],
["asin"],
["acos"],
["atan"],
["sinh"],
["cosh"],
["tanh"],
["asinh"],
["acosh"],
["atanh"]
]
}
================================================
FILE: conf/generators/templates/unary.json
================================================
{
"name": "unary_op",
"filename": "{2}--unary_op_{1}.sv",
"template": [
"/*",
":name: unary_op_{1}",
":description: {0} operator test",
":tags: {2}",
"*/",
"module top();",
"int a = 12;",
"int b = 5;",
"initial begin",
" a = {0}b;",
"end",
"endmodule"
],
"values": [
["+", "plus", "11.3"],
["-", "minus", "11.3"],
["!", "not_log", "11.3"],
["~", "not_bit", "11.4.8"],
["&", "and", "11.4.9"],
["~&", "nand", "11.4.9"],
["|", "or", "11.4.9"],
["~|", "nor", "11.4.9"],
["^", "xor", "11.4.9"],
["~^", "xnor_1", "11.4.9"],
["^~", "xnor_2", "11.4.9"]
]
}
================================================
FILE: conf/generators/templates/uniquecase.json
================================================
{
"name": "uniquecase",
"filename": "12.5.3--{2}.sv",
"template": [
"/*",
":name: {1}_{0}",
":description: {0} statement with {1}",
":tags: 12.5.3",
"*/",
"module top();",
"wire [3:0] a = 3;",
"reg [3:0] b = 0;",
"initial begin",
" {1} {0} (a)",
" 0, 1: b = 1;",
" 2: b = 2;",
" 3: b = 3;",
" endcase",
"end",
"endmodule"
],
"values": [
["case", "unique", "unique_case"],
["case", "unique0", "unique0_case"],
["case", "priority", "priority_case"],
["casez", "unique", "unique_casez"],
["casez", "unique0", "unique0_casez"],
["casez", "priority", "priority_casez"],
["casex", "unique", "unique_casex"],
["casex", "unique0", "unique0_casex"],
["casex", "priority", "priority_casex"]
]
}
================================================
FILE: conf/generators/templates/uvm-classes_0.json
================================================
{
"name": "uvm_classes_0",
"filename": "{0}_class_0.sv",
"template_file": "uvm-classes_0.sv",
"values": [
["uvm_agent"],
["uvm_component"],
["uvm_driver"],
["uvm_env"],
["uvm_monitor"],
["uvm_sequencer"],
["uvm_scoreboard"],
["uvm_test"]
]
}
================================================
FILE: conf/generators/templates/uvm-classes_0.sv
================================================
// Copyright (C) 2019-2021 The SymbiFlow Authors.
//
// Use of this source code is governed by a ISC-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/ISC
//
// SPDX-License-Identifier: ISC
/*
:name: {0}_0
:description: {0} class test
:tags: uvm uvm-classes
:type: simulation elaboration parsing
:timeout: 300
:unsynthesizable: 1
*/
import uvm_pkg::*;
`include "uvm_macros.svh"
class C extends {0};
function new(string name, uvm_component parent = null);
super.new(name, parent);
`uvm_info("RESULT", "new {0} created", UVM_LOW);
endfunction
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
`uvm_info("RESULT", "build phase completed", UVM_LOW);
endfunction
virtual function void connect_phase(uvm_phase phase);
super.connect_phase(phase);
`uvm_info("RESULT", "connect phase completed", UVM_LOW);
endfunction
virtual function void end_of_elaboration_phase(uvm_phase phase);
super.end_of_elaboration_phase(phase);
`uvm_info("RESULT", "end of elaboration phase completed", UVM_LOW);
endfunction
virtual function void start_of_simulation_phase(uvm_phase phase);
super.start_of_simulation_phase(phase);
`uvm_info("RESULT", "start of simulation phase completed", UVM_LOW);
endfunction
task run_phase(uvm_phase phase);
`uvm_info("RESULT", "run phase phase completed", UVM_LOW);
endtask
virtual function void extract_phase(uvm_phase phase);
super.extract_phase(phase);
`uvm_info("RESULT", "extract phase completed", UVM_LOW);
endfunction
virtual function void check_phase(uvm_phase phase);
super.check_phase(phase);
`uvm_info("RESULT", "check phase completed", UVM_LOW);
endfunction
virtual function void report_phase(uvm_phase phase);
super.report_phase(phase);
`uvm_info("RESULT", "report phase completed", UVM_LOW);
endfunction
endclass
module top;
C obj;
initial begin
obj = new("C");
run_test();
end
endmodule
================================================
FILE: conf/generators/templates/uvm-classes_1.json
================================================
{
"name": "uvm_classes_1",
"filename": "{0}_class_1.sv",
"template_file": "uvm-classes_1.sv",
"values": [
["uvm_agent"],
["uvm_component"],
["uvm_driver"],
["uvm_env"],
["uvm_monitor"],
["uvm_sequencer"],
["uvm_scoreboard"],
["uvm_test"]
]
}
================================================
FILE: conf/generators/templates/uvm-classes_1.sv
================================================
// Copyright (C) 2019-2021 The SymbiFlow Authors.
//
// Use of this source code is governed by a ISC-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/ISC
//
// SPDX-License-Identifier: ISC
/*
:name: {0}_1
:description: {0} class test
:tags: uvm uvm-classes
:type: simulation elaboration parsing
:timeout: 300
:unsynthesizable: 1
*/
import uvm_pkg::*;
`include "uvm_macros.svh"
`define PATTERN 2
interface input_if(input clk);
logic [7:0] data;
modport port(input clk, data);
endinterface
interface output_if(input clk);
logic [7:0] data;
modport port(input clk, output data);
endinterface
module dut(input_if.port in, output_if.port out);
always @(posedge in.clk)
out.data <= in.data;
endmodule
class C extends {0};
virtual output_if out_vif;
virtual input_if in_vif;
`uvm_component_utils(C)
function new(string name, uvm_component parent = null);
super.new(name, parent);
endfunction
virtual function void connect_phase(uvm_phase phase);
super.connect_phase(phase);
assert(uvm_resource_db#(virtual input_if)::read_by_name(
"C", "input_if", in_vif));
assert(uvm_resource_db#(virtual output_if)::read_by_name(
"C", "output_if", out_vif));
endfunction
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
endfunction
task run_phase(uvm_phase phase);
phase.raise_objection(this);
`uvm_info("RESULT", $sformatf("Writing %0d to input interface", `PATTERN), UVM_LOW);
in_vif.data <= `PATTERN;
repeat(2) @(posedge out_vif.clk);
if(out_vif.data == `PATTERN) begin
`uvm_info("RESULT", $sformatf("Match %d == %d",
out_vif.data, `PATTERN), UVM_LOW);
end
else begin
`uvm_error("RESULT", $sformatf("Mismatch %d != %d",
out_vif.data, `PATTERN));
end
phase.drop_objection(this);
endtask
endclass
module top;
logic clk;
C obj;
input_if in(clk);
output_if out(clk);
dut d(in, out);
always #5 clk = !clk;
initial begin
obj = new("C");
uvm_resource_db#(virtual input_if)::set("C","input_if", in);
uvm_resource_db#(virtual output_if)::set("C", "output_if", out);
clk = 0;
run_test();
end
endmodule
================================================
FILE: conf/generators/templates/uvm-classes_2.json
================================================
{
"name": "uvm_classes_2",
"filename": "{0}_class_2.sv",
"template": [
"/*",
":name: {0}_2",
":description: {0} class test",
":tags: uvm uvm-classes",
":type: parsing",
":timeout: 300",
"*/",
"import uvm_pkg::*;",
"`include \"uvm_macros.svh\"\n",
"class C extends {0}(\"\", null);",
"endclass"
],
"values": [
["uvm_agent"],
["uvm_component"],
["uvm_driver"],
["uvm_env"],
["uvm_monitor"],
["uvm_sequencer"],
["uvm_scoreboard"],
["uvm_test"]
]
}
================================================
FILE: conf/generators/templates/uvm-classes_3.json
================================================
{
"name": "uvm_classes_3",
"filename": "{0}_class_3.sv",
"template_file": "uvm-classes_3.sv",
"values": [
["uvm_agent"],
["uvm_component"],
["uvm_driver"],
["uvm_env"],
["uvm_monitor"],
["uvm_sequencer"],
["uvm_scoreboard"],
["uvm_test"]
]
}
================================================
FILE: conf/generators/templates/uvm-classes_3.sv
================================================
// Copyright (C) 2019-2021 The SymbiFlow Authors.
//
// Use of this source code is governed by a ISC-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/ISC
//
// SPDX-License-Identifier: ISC
/*
:name: {0}_3
:description: {0} class test
:tags: uvm uvm-classes
:type: simulation elaboration parsing
:timeout: 300
:unsynthesizable: 1
*/
import uvm_pkg::*;
`include "uvm_macros.svh"
class C extends {0};
`uvm_component_utils(C)
function new(string name, uvm_component parent = null);
super.new(name, parent);
`uvm_info("RESULT", "Created new {0}", UVM_LOW);
endfunction
endclass
module top;
C obj;
initial begin
obj = new("C");
end
endmodule
================================================
FILE: conf/generators/templates/wildcard-const.json
================================================
{
"name": "wildcard_const_operators_sim",
"filename": "11.4.6--wildcard_const_operator_{4}.sv",
"template": [
"/*",
":name: wildcard_const_operator_sim_{4}",
":description: wildcard operator with constant test in simulation",
":type: simulation elaboration parsing",
":tags: 11.4.6",
"*/",
"module top();",
"logic [3:0] a = {0};",
"logic c;",
"initial begin",
" c = a {2} {1};",
" $display(\":assert: ('%s' == '%d')\", \"{3}\", c);",
"end",
"endmodule"
],
"values": [
["4'b1001", "4'bx001", "==?" , "1"],
["4'b1001", "4'bz001", "==?" , "1"],
["4'bx001", "4'b1001", "==?" , "x"],
["4'bz001", "4'b1001", "==?" , "x"],
["4'bz001", "4'bx001", "==?" , "1"],
["4'b1001", "4'bx001", "!=?" , "0"],
["4'bz001", "4'bx001", "!=?" , "0"],
["4'bz001", "4'b1001", "!=?" , "x"]
]
}
================================================
FILE: conf/generators/templates/wildcard.json
================================================
{
"name": "wildcard_operators_sim",
"filename": "11.4.6--wildcard_operator_{4}.sv",
"template": [
"/*",
":name: wildcard_operator_sim_{4}",
":description: wildcard operator test in simulation",
":type: simulation elaboration parsing",
":tags: 11.4.6",
"*/",
"module top();",
"logic [3:0] a = {0};",
"logic [3:0] b = {1};",
"logic c;",
"initial begin",
" c = a {2} b;",
" $display(\":assert: ('%s' == '%d')\", \"{3}\", c);",
"end",
"endmodule"
],
"values": [
["4'b1001", "4'bx001", "==?" , "1"],
["4'b1001", "4'bz001", "==?" , "1"],
["4'bx001", "4'b1001", "==?" , "x"],
["4'bz001", "4'b1001", "==?" , "x"],
["4'bz001", "4'bx001", "==?" , "1"],
["4'b1001", "4'bx001", "!=?" , "0"],
["4'bz001", "4'bx001", "!=?" , "0"],
["4'bz001", "4'b1001", "!=?" , "x"]
]
}
================================================
FILE: conf/lrm.conf
================================================
# vim: noet tabstop=64
#
# input database for the report generator
# syntax:
# <TAG NAME><tab><TAG DESCRIPTION>[<tab><TAG URL>]
#
sanity Various sanity checks
veer-eh1 VeeR EH1 RISC-V core https://github.com/chipsalliance/Cores-VeeR-EH1
veer-el2 VeeR EL2 RISC-V core https://github.com/chipsalliance/Cores-VeeR-EL2
ibex Ibex RISC-V core https://github.com/lowRISC/ibex
fx68k FX68K m68k core https://github.com/ijor/fx68k
yosys Tests imported from Yosys https://github.com/YosysHQ/yosys/tree/master/tests/hana
hdlconv Tests imported from hdlConvertor https://github.com/Nic30/hdlConvertor/tree/master/tests
hdlconv_std2012 Tests imported from hdlConvertor (std2012) https://github.com/Nic30/hdlConvertor/tree/master/tests
hdlconv_std2017 Tests imported from hdlConvertor (std2017) https://github.com/Nic30/hdlConvertor/tree/master/tests
utd-sv Tests imported from utd-SystemVerilog https://github.com/SymbiFlow/utd-sv
uvm Tests imported from UVM https://github.com/SymbiFlow/uvm
uvm-req UVM Prerequisites
uvm-assertions UVM tests using assertions
uvm-scoreboards uvm_scoreboard examples
uvm-agents uvm_agent examples
uvm-classes Particular UVM classes
basejump Tests imported from Basejump STL https://github.com/bespoke-silicon-group/basejump_stl
ariane Ariane RISC-V core https://github.com/openhwgroup/cva6
scr1 SCR1 RISC-V core https://github.com/syntacore/scr1
taiga Taiga RISC-V core https://gitlab.com/sfu-rcl/Taiga
black-parrot BlackParrot RISC-V core https://github.com/black-parrot/black-parrot
rsd RSD RISC-V core https://github.com/rsd-devel/rsd
ivtest Tests imported from ivtest https://github.com/steveicarus/iverilog/tree/master/ivtest
RgGen RgGen code generator for configuration and status registers https://github.com/rggen/rggen
TNoC NoC router and fabric https://github.com/taichi-ishitani/tnoc
5 Lexical conventions
5.1 General
5.2 Lexical tokens
5.3 White space
5.4 Comments
5.5 Operators
5.6 Identifiers, keywords, and system names
5.6.1 Escaped identifiers
5.6.2 Keywords
5.6.3 System tasks and system functions
5.6.4 Compiler directives
5.7 Numbers
5.7.1 Integer literal constants
5.7.2 Real literal constants
5.8 Time literals
5.9 String literals
5.9.1 Special characters in strings
5.10 Structure literals
5.11 Array literals
5.12 Attributes
5.13 Built-in methods
6 Data types
6.1 General
6.2 Data types and data objects
6.3 Value set
6.3.1 Logic values
6.3.2 Strengths
6.3.2.1 Charge strength
6.3.2.2 Drive strength
6.4 Singular and aggregate types
6.5 Nets and variables
6.6 Net types
6.6.1 Wire and tri nets
6.6.2 Unresolved nets
6.6.3 Wired nets
6.6.4 Trireg net
6.6.4.1 Capacitive networks
6.6.4.2 Ideal capacitive state and charge decay
6.6.5 Tri0 and tri1 nets
6.6.6 Supply nets
6.6.7 User-defined nettypes
6.6.8 Generic interconnect
6.7 Net declarations
6.7.1 Net declarations with built-in net types
6.7.2 Net declarations with user-defined nettypes
6.7.3 Initialization of nets with user-defined nettypes
6.8 Variable declarations
6.9 Vector declarations
6.9.1 Specifying vectors
6.9.2 Vector net accessibility
6.10 Implicit declarations
6.11 Integer data types
6.11.1 Integral types
6.11.2 2-state (two-value) and 4-state (four-value) data types
6.11.3 Signed and unsigned integer types
6.12 Real, shortreal, and realtime data types
6.12.1 Operators and real numbers
6.12.2 Conversion
6.13 Void data type
6.14 Chandle data type
6.15 Class
6.16 String data type
6.16.1 Len()
6.16.2 Putc()
6.16.3 Getc()
6.16.4 Toupper()
6.16.5 Tolower()
6.16.6 Compare()
6.16.7 Icompare()
6.16.8 Substr()
6.16.9 Atoi(), atohex(), atooct(), atobin()
6.16.10 Atoreal()
6.16.11 Itoa()
6.16.12 Hextoa()
6.16.13 Octtoa()
6.16.14 Bintoa()
6.16.15 Realtoa()
6.17 Event data type
6.18 User-defined types
6.19 Enumerations
6.19.1 Defining new data types as enumerated types
6.19.2 Enumerated type ranges
6.19.3 Type checking
6.19.4 Enumerated types in numerical expressions
6.19.5 Enumerated type methods
6.19.5.1 First()
6.19.5.2 Last()
6.19.5.3 Next()
6.19.5.4 Prev()
6.19.5.5 Num()
6.19.5.6 Name()
6.19.5.7 Using enumerated type methods
6.20 Constants
6.20.1 Parameter declaration syntax
6.20.2 Value parameters
6.20.2.1 $ as a parameter value
6.20.3 Type parameters
6.20.4 Local parameters (localparam)
6.20.5 Specify parameters
6.20.6 Const constants
6.21 Scope and lifetime
6.22 Type compatibility
6.22.1 Matching types
6.22.2 Equivalent types
6.22.3 Assignment compatible
6.22.4 Cast compatible
6.22.5 Type incompatible
6.22.6 Matching nettypes
6.23 Type operator
6.24 Casting
6.24.1 Cast operator
6.24.2 $cast dynamic casting
6.24.3 Bit-stream casting
6.25 Parameterized data types
7 Aggregate data types
7.1 General
7.2 Structures
7.2.1 Packed structures
7.2.2 Assigning to structures
7.3 Unions
7.3.1 Packed unions
7.3.2 Tagged unions
7.4 Packed and unpacked arrays
7.4.1 Packed arrays
7.4.2 Unpacked arrays
7.4.3 Operations on arrays
7.4.4 Memories
7.4.5 Multidimensional arrays
7.4.6 Indexing and slicing of arrays
7.5 Dynamic arrays
7.5.1 New[ ]
7.5.2 Size()
7.5.3 Delete()
7.6 Array assignments
7.7 Arrays as arguments to subroutines
7.8 Associative arrays
7.8.1 Wildcard index type
7.8.2 String index
7.8.3 Class index
7.8.4 Integral index
7.8.5 Other user-defined types
7.8.6 Accessing invalid indices
7.8.7 Allocating associative array elements
7.9 Associative array methods
7.9.1 Num() and size()
7.9.2 Delete()
7.9.3 Exists()
7.9.4 First()
7.9.5 Last()
7.9.6 Next()
7.9.7 Prev()
7.9.8 Arguments to traversal methods
7.9.9 Associative array assignment
7.9.10 Associative array arguments
7.9.11 Associative array literals
7.10 Queues
7.10.1 Queue operators
7.10.2 Queue methods
7.10.2.1 Size()
7.10.2.2 Insert()
7.10.2.3 Delete()
7.10.2.4 Pop_front()
7.10.2.5 Pop_back()
7.10.2.6 Push_front()
7.10.2.7 Push_back()
7.10.3 Persistence of references to elements of a queue
7.10.4 Updating a queue using assignment and unpacked array concatenation
7.10.5 Bounded queues
7.11 Array querying functions
7.12 Array manipulation methods
7.12.1 Array locator methods
7.12.2 Array ordering methods
7.12.3 Array reduction methods
7.12.4 Iterator index querying
8 Classes
8.1 General
8.2 Overview
8.3 Syntax
8.4 Objects (class instance)
8.5 Object properties and object parameter data
8.6 Object methods
8.7 Constructors
8.8 Typed constructor calls
8.9 Static class properties
8.10 Static methods
8.11 This
8.12 Assignment, renaming, and copying
8.13 Inheritance and subclasses
8.14 Overridden members
8.15 Super
8.16 Casting
8.17 Chaining constructors
8.18 Data hiding and encapsulation
8.19 Constant class properties
8.20 Virtual methods
8.21 Abstract classes and pure virtual methods
8.22 Polymorphism: dynamic method lookup
8.23 Class scope resolution operator ::
8.24 Out-of-block declarations
8.25 Parameterized classes
8.25.1 Class scope resolution operator for parameterized classes
8.26 Interface classes
8.26.1 Interface class syntax
8.26.2 Extends versus implements
8.26.3 Type access
8.26.4 Type usage restrictions
8.26.5 Casting and object reference assignment
8.26.6 Name conflicts and resolution
8.26.6.1 Method name conflict resolution
8.26.6.2 Parameter and type declaration inheritance conflicts and resolution
8.26.6.3 Diamond relationship
8.26.7 Partial implementation
8.26.8 Method default argument values
8.26.9 Constraint blocks, covergroups, and randomization
8.27 Typedef class
8.28 Classes and structures
8.29 Memory management
9 Processes
9.1 General
9.2 Structured procedures
9.2.1 Initial procedures
9.2.2 Always procedures
9.2.2.1 General purpose always procedure
9.2.2.2 Combinational logic always_comb procedure
9.2.2.2.1 Implicit always_comb sensitivities
9.2.2.2.2 always_comb compared to always @*
9.2.2.3 Latched logic always_latch procedure
9.2.2.4 Sequential logic always_ff procedure
9.2.3 Final procedures
9.3 Block statements
9.3.1 Sequential blocks
9.3.2 Parallel blocks
9.3.3 Statement block start and finish times
9.3.4 Block names
9.3.5 Statement labels
9.4 Procedural timing controls
9.4.1 Delay control
9.4.2 Event control
9.4.2.1 Event OR operator
9.4.2.2 Implicit event_expression list
9.4.2.3 Conditional event controls
9.4.2.4 Sequence events
9.4.3 Level-sensitive event control
9.4.4 Level-sensitive sequence controls
9.4.5 Intra-assignment timing controls
9.5 Process execution threads
9.6 Process control
9.6.1 Wait fork statement
9.6.2 Disable statement
9.6.3 Disable fork statement
9.7 Fine-grain process control
10.3 Continuous assignments
10.3.1 The net declaration assignment
10.3.2 The continuous assignment statement
10.3.3 Continuous assignment delays
10.3.4 Continuous assignment strengths
10.4.1 Blocking procedural assignments
10.4.2 Nonblocking procedural assignments
10.6.1 The assign and deassign procedural statements
10.6.2 The force and release procedural statements
11 Operators and expressions
11.1 General
11.2 Overview
11.2.1 Constant expressions
11.2.2 Aggregate expressions
11.3 Operators
11.3.1 Operators with real operands
11.3.2 Operator precedence
11.3.3 Using integer literals in expressions
11.3.4 Operations on logic (4-state) and bit (2-state) types
11.3.5 Operator expression short circuiting
11.3.6 Assignment within an expression
11.4 Operator descriptions
11.4.1 Assignment operators
11.4.2 Increment and decrement operators
11.4.3 Arithmetic operators
11.4.3.1 Arithmetic expressions with unsigned and signed types
11.4.4 Relational operators
11.4.5 Equality operators
11.4.6 Wildcard equality operators
11.4.7 Logical operators
11.4.8 Bitwise operators
11.4.9 Reduction operators
11.4.10 Shift operators
11.4.11 Conditional operator
11.4.12 Concatenation operators
11.4.12.1 Replication operator
11.4.12.2 String concatenation
11.4.13 Set membership operator
11.4.14 Streaming operators (pack/unpack)
11.4.14.1 Concatenation of stream_expressions
11.4.14.2 Re-ordering of the generic stream
11.4.14.3 Streaming concatenation as an assignment target (unpack)
11.4.14.4 Streaming dynamically sized data
11.5 Operands
11.5.1 Vector bit-select and part-select addressing
11.5.2 Array and memory addressing
11.5.3 Longest static prefix
11.6 Expression bit lengths
11.6.1 Rules for expression bit lengths
11.6.2 Example of expression bit-length problem
11.6.3 Example of self-determined expressions
11.7 Signed expressions
11.8 Expression evaluation rules
11.8.1 Rules for expression types
11.8.2 Steps for evaluating an expression
11.8.3 Steps for evaluating an assignment
11.8.4 Handling X and Z in signed expressions
11.9 Tagged union expressions and member access
11.10 String literal expressions
11.10.1 String literal operations
11.10.2 String literal value padding and potential problems
11.10.3 Empty string literal handling
11.11 Minimum, typical, and maximum delay expressions
11.12 Let construct
12 Procedural programming statements
12.1 General
12.2 Overview
12.3 Syntax
12.4 Conditional if-else statement
12.4.1 if-else-if construct
12.4.2 unique-if, unique0-if, and priority-if
12.4.2.1 Violation reports generated by unique-if, unique0-if, and priority-if constructs
12.4.2.2 If statement violation reports and multiple processes
12.5 Case statement
12.5.1 Case statement with do-not-cares
12.5.2 Constant expression in case statement
12.5.3 unique-case, unique0-case, and priority-case
12.5.3.1 Violation reports generated by unique-case, unique0-case, and priority-case constructs
12.5.3.2 Case statement violation reports and multiple processes
12.5.4 Set membership case statement
12.6 Pattern matching conditional statements
12.6.1 Pattern matching in case statements
12.6.2 Pattern matching in if statements
12.6.3 Pattern matching in conditional expressions
12.7 Loop statements
12.7.1 The for-loop
12.7.2 The repeat loop
12.7.3 The foreach-loop
12.7.4 The while-loop
12.7.5 The do...while-loop
12.7.6 The forever-loop
12.8 Jump statements
13.3 Tasks
13.3.1 Static and automatic tasks
13.4 Functions
13.4.1 Return values and void functions
13.4.2 Static and automatic functions
13.4.3 Constant functions
13.4.4 Background processes spawned by function calls
14.3 Clocking block declaration
15.4 Mailboxes
15.5 Named Events
16.2 Overview
16.4 Deferred assertions
16.7 Sequences
16.9 Sequence operations
16.10 Local variables
16.12 Declaring properties
16.14 Concurrent assertions
16.15 Disable iff resolution
16.17 Expect statement
18.4 Random variables
18.4.1 Rand modifier
18.4.2 Randc modifier
18.5 Constraint blocks
18.5.1 External constraint blocks
18.5.2 Constraint inheritance
18.5.3 Set membership
18.5.4 Distribution
18.5.5 Uniqueness constraints
18.5.6 Implication
18.5.7 if–else constraints
18.5.8 Iterative constraints
18.5.8.1 foreach iterative constraints
18.5.8.2 Array reduction iterative constraints
18.5.9 Global constraints
18.5.10 Variable ordering
18.5.11 Static constraint blocks
18.5.12 Functions in constraints
18.5.13 Constraint guards
18.5.14 Soft constraints
18.5.14.1 Soft constraint priorities
18.5.14.2 Discarding soft constraints
18.6 Randomization methods
18.6.1 Randomize()
18.6.2 Pre_randomize() and post_randomize()
18.6.3 Behavior of randomization methods
18.7 In-line constraints—randomize() with
18.7.1 local:: scope resolution
18.8 Disabling random variables with rand_mode()
18.9 Controlling constraints with constraint_mode()
18.10 Dynamic constraint modification
18.11 In-line random variable control
18.11.1 In-line constraint checker
18.12 Randomization of scope variables—std::randomize()
18.12.1 Adding constraints to scope variables—std::randomize() with
18.13 Random number system functions and methods
18.13.1 $urandom
18.13.2 $urandom_range()
18.13.3 srandom()
18.13.4 get_randstate()
18.13.5 set_randstate()
18.14 Random stability
18.14.1 Random stability properties
18.14.2 Thread stability
18.14.3 Object stability
18.15 Manually seeding randomize
18.16 Random weighted case—randcase
18.17 Random sequence generation—randsequence
18.17.1 Random production weights
18.17.2 if–else production statements
18.17.3 Case production statements
18.17.4 Repeat production statements
18.17.5 Interleaving productions—rand join
18.17.6 Aborting productions—break and return
18.17.7 Value passing between productions
20.2 Simulation control system tasks
20.3 Simulation time system functions
20.4 Timescale system tasks
20.5 Conversion functions
20.6 Data query functions
20.7 Array query functions
20.8 Math functions
20.9 Bit vector system functions
20.10 Severity tasks
20.11 Elaboration system tasks
20.13 Sampled value system functions
20.14 Coverage system functions
20.15 Probabilistic distribution functions
21.2 Display system tasks
21.3 File input/output system tasks and system functions
21.4 Loading memory array data from a file
21.6 Command line input
21.7 Value change dump (VCD) files
23.2 Module definitions
22 Compiler directives
22.1 General
22.2 Overview
22.3 resetall
22.4 include
22.5 define, undef and undefineall
22.5.1 define
22.5.2 undef
22.5.3 undefineall
22.6 ifdef, else, elsif, endif, ifndef
22.7 timescale
22.8 default_nettype
22.9 unconnected_drive and nounconnected_drive
22.10 celldefine and endcelldefine
22.11 pragma
22.12 line
22.13 __FILE__ and __LINE__
24.3 The program construct
25.3 Interface syntax
26.2 Package declarations
26.3 Referencing data in packages
================================================
FILE: conf/meta-tags.conf
================================================
# vim: noet tabstop=16
#
# meta-tags configuration file
# syntax:
# <META TAG NAME><tab><SPACE SEPARATED DEPENDENCY TAGS>
#
uvm-req 5.4 5.5 5.6 6.11 6.12 6.13 6.14 6.15 6.16 6.17 6.18 6.19 6.2 6.23 6.24 6.3 6.6 6.9 7.1 7.11 7.2 7.5 8.1 8.11 8.13 8.15 8.16 8.2 8.21 8.23 8.26 8.3 8.7 9.2 9.3 9.4 9.6 9.7 10.11 10.3 10.4 10.6 11.12 11.3 12.4 12.5 12.6 12.7 12.8 13.3 13.4 14.11 15.3 15.4 15.5 16.12 16.17 16.2 16.8 16.9 17.2 20.15 20.2 20.3 20.4 20.5 20.6 20.7 20.9 21.2 21.3 21.6 22.13 22.4 22.5 22.6 22.7 23.2 24.3 25.3 26.2 26.3
================================================
FILE: conf/report/code-template.html
================================================
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" type="text/css" href="{{csspath}}">
</head>
<body>
<header id="header_code"><h2>{{filename|e}}</h2></header>
{{ code }}
</body>
</html>
================================================
FILE: conf/report/code.css
================================================
@import 'details-view.css';
:root {
font-family: "Courier New", Consolas, monospace;
}
pre {
margin: 0; padding: 4px;
}
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #228B22 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #8B008B; font-weight: bold } /* Keyword */
.highlight .cm { color: #228B22 } /* Comment.Multiline */
.highlight .cp { color: #1e889b } /* Comment.Preproc */
.highlight .c1 { color: #228B22 } /* Comment.Single */
.highlight .cs { color: #8B008B; font-weight: bold } /* Comment.Special */
.highlight .gd { color: #aa0000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00aa00 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #8B008B; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #8B008B; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #8B008B; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #8B008B; font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { color: #8B008B; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #a7a7a7; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #B452CD } /* Literal.Number */
.highlight .s { color: #CD5555 } /* Literal.String */
.highlight .na { color: #658b00 } /* Name.Attribute */
.highlight .nb { color: #658b00 } /* Name.Builtin */
.highlight .nc { color: #008b45; font-weight: bold } /* Name.Class */
.highlight .no { color: #00688B } /* Name.Constant */
.highlight .nd { color: #707a7c } /* Name.Decorator */
.highlight .ne { color: #008b45; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #008b45 } /* Name.Function */
.highlight .nn { color: #008b45; text-decoration: underline } /* Name.Namespace */
.highlight .nt { color: #8B008B; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #00688B } /* Name.Variable */
.highlight .ow { color: #8B008B } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #B452CD } /* Literal.Number.Float */
.highlight .mh { color: #B452CD } /* Literal.Number.Hex */
.highlight .mi { color: #B452CD } /* Literal.Number.Integer */
.highlight .mo { color: #B452CD } /* Literal.Number.Oct */
.highlight .sb { color: #CD5555 } /* Literal.String.Backtick */
.highlight .sc { color: #CD5555 } /* Literal.String.Char */
.highlight .sd { color: #CD5555 } /* Literal.String.Doc */
.highlight .s2 { color: #CD5555 } /* Literal.String.Double */
.highlight .se { color: #CD5555 } /* Literal.String.Escape */
.highlight .sh { color: #1c7e71; font-style: italic } /* Literal.String.Heredoc */
.highlight .si { color: #CD5555 } /* Literal.String.Interpol */
.highlight .sx { color: #cb6c20 } /* Literal.String.Other */
.highlight .sr { color: #1c7e71 } /* Literal.String.Regex */
.highlight .s1 { color: #CD5555 } /* Literal.String.Single */
.highlight .ss { color: #CD5555 } /* Literal.String.Symbol */
.highlight .bp { color: #658b00 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #00688B } /* Name.Variable.Class */
.highlight .vg { color: #00688B } /* Name.Variable.Global */
.highlight .vi { color: #00688B } /* Name.Variable.Instance */
.highlight .il { color: #B452CD } /* Literal.Number.Integer.Long */
.highlight pre {
margin: 0;
}
#header_code {
position:sticky;
left: 0;
top: 0;
width: calc(100vw - 13px);
}
.linenodiv a {
color: #000000;
text-decoration: none;
}
.linenodiv a:hover {
text-decoration: underline;
}
================================================
FILE: conf/report/details-view.css
================================================
:root {
font-family: sans-serif;
font-size: 0.8rem;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
padding: 0;
width: 100%;
min-width: min-content;
}
header {
width: 100%;
height: 50px;
background-color: #666; color: #fff;
font-family: sans-serif;
line-height: 1.4rem;
padding-left: 20px;
margin: 0;
display: flex;
align-items: center;
gap: 0;
justify-content: stretch;
justify-items: stretch;
}
h1 {
font-size: 1em;
margin: 0;
padding: 4px;
text-decoration: inherit;
font-weight: bold;
text-transform: uppercase;
}
h2 {
font-size: inherit;
margin: 0;
padding: 4px;
color: inherit;
font-weight: normal;
}
header a {
color: inherit;
text-decoration: underline;
text-underline-position: under;
text-decoration-color: #fff4;
}
header a:hover {
background-color: #0004;
}
pre, code {
font-family: "Courier New", Consolas, monospace;
}
================================================
FILE: conf/report/filter.js
================================================
// NOTE: Code here uses classes and functions from report.js
const HEADER_COLUMNS_COUNT = 2
/// Filter state manager ///////////////////////////////////////////////
const filter_state = new StateManager({
hidden_column_ids: {
initial: [],
validator: (v) => Array.isArray(v),
},
row_filter_func: {
initial: null,
validator: (v) => (typeof v === "function" || v === null)
},
cell_filter_func: {
initial: null,
validator: (v) => (typeof v === "function" || v === null)
},
tool_filter: {
initial: TOOL_NAMES.map((v) => v.toLowerCase()).sort(),
validator: (v) => (Array.isArray(v) && v.every((v) => is_string(v))),
},
applied_tool_filter: {
initial: TOOL_NAMES.map((v) => v.toLowerCase()).sort(),
validator: (v) => (Array.isArray(v) && v.every((v) => is_string(v))),
},
coverage_filter: {
initial: [">=", 0],
validator: (v) => Array.isArray(v),
},
applied_coverage_filter: {
initial: [">=", 0],
validator: (v) => Array.isArray(v),
},
type_filter: {
initial: ["elaboration", "parsing", "simulation"],
validator: (v) => (Array.isArray(v) && v.every((v) => is_string(v))),
},
applied_type_filter: {
initial: ["elaboration", "parsing", "simulation"],
validator: (v) => (Array.isArray(v) && v.every((v) => is_string(v))),
},
})
/// EntriesListController //////////////////////////////////////////////
class CoverageFilterEntriesController {
constructor(state_manager, element) {
this._state = state_manager
this._top = element
this._first_entry = this._top.querySelector(".p_entry")
this._first_operator = this._first_entry.querySelector(".p_entry-operator")
this._first_value = this._first_entry.querySelector(".p_entry-value");
[this._first_operator, this._first_value].forEach((element) => {
element.addEventListener("change", this._update_state.bind(this))
})
this._entry_template = this._top.querySelector(".p_entry-template")
this._add_button = this._top.querySelector(".p_add-entry-button")
this._add_button.onclick = this._add_entry_button_clicked.bind(this)
this._state.subscribe(
["coverage_filter"],
StateManager.debounce(this._state_changed.bind(this)))
this._update_state_handle = null
}
static _select_option(select_element, option_value) {
let i = 0
for (const child of select_element.options) {
if (child.value === option_value) {
select_element.selectedIndex = i
return
}
++i
}
select_element.selectedIndex = -1
}
_state_changed(state, changed_values) {
let entries = [...this._top.querySelectorAll(".p_entry.v_removable")]
const values = state.coverage_filter
const expected_removable_entries_count = (values.length - 2) / 3
if (entries.length > expected_removable_entries_count) {
for (let i = expected_removable_entries_count; i < entries.length; ++i) {
entries[i].remove()
}
entries.splice(expected_removable_entries_count)
} else if (entries.length < expected_removable_entries_count) {
let last_entry = entries.length > 0 ? entries[entries.lenght-1] : this._first_entry
for (let i = entries.length; i < expected_removable_entries_count; ++i) {
const new_entry = this._create_entry()
last_entry.after(new_entry)
entries.push(new_entry)
last_entry = new_entry
}
}
CoverageFilterEntriesController._select_option(this._first_operator, values[0])
this._first_value.value = values[1]
let i = 2
for (const entry of entries) {
CoverageFilterEntriesController._select_option(entry.querySelector(".p_entry-relation"), values[i+0])
CoverageFilterEntriesController._select_option(entry.querySelector(".p_entry-operator"), values[i+1])
entry.querySelector(".p_entry-value").value = values[i + 2]
i += 3
}
}
_add_entry_button_clicked(event) {
const entries = this._top.querySelectorAll(".p_entry")
const last_entry = entries[entries.length - 1]
const new_entry = this._create_entry()
last_entry.after(new_entry)
new_entry.querySelector("select, input, button").focus()
this._update_state()
}
_update_state() {
if (this._update_state_handle !== null)
clearTimeout(this._update_state_handle)
this._update_state_handle = setTimeout(() => {
this._update_state_handle = null
const entries = this._top.querySelectorAll(".p_entry.v_removable")
const new_state = new Array(2 + 3 * (entries.length))
new_state[0] = this._first_operator.value
if (this._first_value.validity.valid)
new_state[1] = this._first_value.valueAsNumber|0
else
new_state[1] = NaN
let i = 2
for (const entry of entries) {
new_state[i+0] = entry.querySelector(".p_entry-relation").value
new_state[i+1] = entry.querySelector(".p_entry-operator").value
const value_field = entry.querySelector(".p_entry-value")
if (value_field.validity.valid)
new_state[i + 2] = value_field.valueAsNumber|0
else
new_state[i + 2] = NaN
i += 3
}
this._state.state.coverage_filter = new_state
}, 100)
}
_create_entry() {
const entry = this._entry_template.content.firstElementChild.cloneNode(true)
entry.querySelectorAll("select, input").forEach((element) => {
element.addEventListener("change", this._update_state.bind(this))
})
const remove_button = entry.querySelector(".p_remove-entry-button")
remove_button.onclick = (event) => {
entry.remove()
this._update_state()
}
return entry
}
}
/// CheckboxGroupController ////////////////////////////////////////////
class CheckboxGroupController {
constructor(state_manager, state_key, checkbox_list) {
this._state = state_manager
this._key = state_key
this._checkboxes = new Map()
this._selections = new Set(this._state.state[this._key])
for (const checkbox of checkbox_list) {
this._checkboxes.set(checkbox.value, checkbox)
checkbox.checked = this._selections.has(checkbox.value)
checkbox.addEventListener("change", this._checkbox_changed.bind(this))
}
this._state.subscribe(
[state_key],
StateManager.debounce(this._state_changed.bind(this)))
this._update_state_handle = null
}
_state_changed(state, changed_values) {
this._selections = new Set(state[this._key])
for (const [value, checkbox] of this._checkboxes) {
checkbox.checked = this._selections.has(value)
}
}
_checkbox_changed(event) {
const checkbox = event.target
if (checkbox.checked == this._selections.has(checkbox.value))
return
if (checkbox.checked) {
this._selections.add(checkbox.value)
} else {
this._selections.delete(checkbox.value)
}
if (this._update_state_handle === null) {
this._update_state_handle = setTimeout(() => {
this._update_state_handle = null
this._state.state[this._key] = [...this._selections].sort()
}, 0)
}
}
}
/// FilterController ///////////////////////////////////////////////////
class FilterController {
constructor(state_manager, elements) {
this._state = state_manager
this._apply_button = elements.apply_button
this._reset_button = elements.reset_button
this._error_label = elements.error_label
this._apply_button.onclick = this._apply_clicked.bind(this)
this._reset_button.onclick = this._reset_clicked.bind(this)
this._state.subscribe(
["tool_filter", "coverage_filter", "type_filter", "applied_tool_filter", "applied_coverage_filter", "applied_type_filter"],
StateManager.debounce(this._state_changed.bind(this)))
}
static _is_filter_valid(key, value) {
const VALID_OPERATORS = new Set([">=", "<=", ">", "<", "=="])
const VALID_RELATIONS = new Set(["&&", "||"])
switch (key) {
case "tool_filter":
case "type_filter":
return value.length > 0
case "coverage_filter": {
if (value.length < 2 || ((value.length - 2) % 3) !== 0)
return false
if (!VALID_OPERATORS.has(value[0]) || !isFinite(value[1]) || value[1] < 0 || value[1] > 100)
return false
for (let i = 2; i < value.length; i += 3) {
if (!VALID_RELATIONS.has(value[i+0])) return false
if (!VALID_OPERATORS.has(value[i+1])) return false
if (!isFinite(value[i+2]) || value[i+2] < 0 || value[i+2] > 100) return false
}
return true
}
}
}
_state_changed(state, changed_values) {
let apply_possible = false;
let reset_possible = false;
const ERROR_MSGS = {
tool_filter: "No tool selected.",
coverage_filter: "Invalid coverage value(s).",
type_filter: "No type selected.",
}
const ERROR_MSG_PREFIX = "<strong>Error(s):</strong> "
const errors = []
for (const key of ["tool_filter", "coverage_filter", "type_filter"]) {
if (!deep_eq(state[key], this._state.state_spec[key].initial))
reset_possible = true
if (!deep_eq(state[key], state[`applied_${key}`]))
apply_possible = true
if (!FilterController._is_filter_valid(key, state[key]))
errors.push(ERROR_MSGS[key])
}
if (errors.length > 0)
this._error_label.innerHTML = ERROR_MSG_PREFIX + errors.join(" ")
else
this._error_label.innerText = ""
this._apply_button.disabled = (errors.length != 0) || !apply_possible;
this._reset_button.disabled = !reset_possible;
}
_apply_clicked(event) {
const tool_filter = this._state.state.tool_filter
const coverage_filter = this._state.state.coverage_filter
const type_filter = this._state.state.type_filter
this._state.state.applied_tool_filter = tool_filter
this._state.state.applied_coverage_filter = coverage_filter
this._state.state.applied_type_filter = type_filter
if (!(coverage_filter.length === 2 && (
(coverage_filter[0] === ">=" && coverage_filter[1] === 0) ||
(coverage_filter[0] === "<=" && coverage_filter[1] === 100)
))) {
const operator = coverage_filter[0]
const value = coverage_filter[1]
let coverage_filter_code = `(coverage ${operator} ${value})`
for (let i = 2; i < coverage_filter.length; i += 3) {
const relation = coverage_filter[i + 0]
const operator = coverage_filter[i + 1]
const value = coverage_filter[i + 2]
coverage_filter_code += ` ${relation} (coverage ${operator} ${value})`
}
const cell_filter_func_code = `(coverage) => { return (${coverage_filter_code}) }`
Log.dbg("filter", "Cell filter function: %o", cell_filter_func_code)
const cell_filter_func = eval(cell_filter_func_code)
this._state.state.cell_filter_func = cell_filter_func
} else {
this._state.state.cell_filter_func = null
}
if (!deep_eq(type_filter, this._state.state_spec.type_filter.initial)) {
const type_filter_codes = []
for (const type of type_filter)
type_filter_codes.push(`(types.includes("${type}"))`)
const type_filter_code = type_filter_codes.join(" || ")
const row_filter_func_code = `(types) => { return (${type_filter_code}) }`
Log.dbg("filter", "Row filter function: %o", row_filter_func_code)
const row_filter_func = eval(row_filter_func_code)
this._state.state.row_filter_func = row_filter_func
} else {
this._state.state.row_filter_func = null
}
const hidden_column_ids = []
let i = HEADER_COLUMNS_COUNT
for (const tool of TOOL_NAMES) {
if (!tool_filter.includes(tool.toLowerCase()))
hidden_column_ids.push(i)
++i
}
this._state.state.hidden_column_ids = hidden_column_ids
}
_reset_clicked(event) {
for (const key of ["tool_filter", "coverage_filter", "type_filter"]) {
this._state.state[key] = this._state.state_spec[key].initial
}
}
}
/// DataTable filter function that does actual filtering ///////////////
$.fn.dataTable.ext.search.push(function (settings, searchData, index, rowData, counter) {
if (filter_state.state.row_filter_func) {
const dt = settings.oInstance.DataTable();
const types = dt.row(index).node().dataset.types.split(" ")
if (!filter_state.state.row_filter_func(types))
return false
}
if (filter_state.state.cell_filter_func) {
const hidden_column_ids = filter_state.state.hidden_column_ids
const cell_filter_func = filter_state.state.cell_filter_func
let i = 0
let has_matching_cell = false;
for (let col = HEADER_COLUMNS_COUNT; col < rowData.length; ++col) {
if (col === hidden_column_ids[i]) {
++i
continue
}
const coverage = Math.round(parseSimpleFraction(rowData[col]) * 100)|0
if (cell_filter_func(coverage)) {
has_matching_cell = true
break
}
}
if (!has_matching_cell)
return false
}
return true
})
/// Main ///////////////////////////////////////////////////////////////
window.addEventListener('DOMContentLoaded', function(event) {
// DataTable
$('table.dataTable').DataTable({
paging: false,
autoWidth: false,
order: [ [1, "asc"], ],
columns: [
{ orderable: false },
{ orderDataType: "original-order", type: "num" },
...TOOL_NAMES.map(() => {
return {
orderDataType: "simple-fraction",
type: "num",
}
})
],
})
// Update tables when a filter is applied
const tables = []
$('table.dataTable').each(function () {
const table = $(this).dataTable().api()
tables.push(table)
filter_state.subscribe(
["hidden_column_ids", "row_filter_func", "cell_filter_func"],
StateManager.debounce((state, changed_values) => tables.forEach((table) => {
if (changed_values.has("hidden_column_ids")) {
table.columns().visible(true)
table.columns(state.hidden_column_ids).visible(false)
}
setTimeout(()=>table.draw(), 0)
}), 0))
})
// Filter
const filter_section = document.querySelector("#filter-section")
const filter_controller = new FilterController(filter_state, {
apply_button: document.getElementById("filter-apply-button"),
reset_button: document.getElementById("filter-reset-button"),
error_label: document.getElementById("filter-error-msg"),
})
// Tool filter
const tool_filter = filter_section.querySelector(".p_tool-filter")
const tool_filter_checkboxes = tool_filter.querySelectorAll("input[type='checkbox']")
tool_filter.querySelector(".p_select-all-button").onclick = (event) => {
tool_filter_checkboxes.forEach((element) => {
if (!element.checked) {
element.checked = true
element.dispatchEvent(new Event("change"))
}
})
}
tool_filter.querySelector(".p_invert-selection-button").onclick = (event) => {
tool_filter_checkboxes.forEach((element) => {
element.checked = !(element.checked)
element.dispatchEvent(new Event("change"))
})
}
const tool_filter_controls = new CheckboxGroupController(filter_state, "tool_filter", tool_filter_checkboxes)
// Coverage filter
const coverage_filter_controls = new CoverageFilterEntriesController(filter_state, filter_section.querySelector(".p_coverage-filter"));
// Type filter
const type_filter_checkboxes = document.querySelectorAll("#filter-section .p_type-filter input[type='checkbox']")
const type_filter_controls = new CheckboxGroupController(filter_state, "type_filter", type_filter_checkboxes)
})
================================================
FILE: conf/report/filter_ui_test.py
================================================
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright (C) 2021 The SymbiFlow Authors.
#
# Use of this source code is governed by a ISC-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/ISC
#
# SPDX-License-Identifier: ISC
from selenium import webdriver
from selenium.webdriver.support.ui import Select
import sys
def setDriver(arg=None):
global driver
if arg is None:
driver = webdriver.Chrome()
else:
driver = arg
def openPage(URL):
driver.get(URL)
driver.implicitly_wait(10)
driver.find_element_by_tag_name('button').click()
def addEntries(iter):
for _ in range(iter):
driver.find_element_by_class_name('filter-add').click()
def fillEntryType(num, type):
entry_type = "//*[@class='filter-entry-type']"
select = Select(driver.find_elements_by_xpath(entry_type)[num])
select.select_by_value(type)
def fillSpan(entry_id, *args):
for i in range(len(args)):
entry_operator = f"(//*[@id='filter']/ul/li[{entry_id+1}]/span/select)[{i+1}]"
select = Select(driver.find_element_by_xpath(entry_operator))
select.select_by_value(args[i])
def applyFilters():
driver.find_element_by_class_name('filter-apply').click()
def removeIcon(num):
driver.find_elements_by_class_name('filter-clear')[num].click()
def removeAll():
driver.find_element_by_class_name('filter-remove').click()
if __name__ == "__main__":
URL = sys.argv[1]
driver = setDriver(webdriver.Chrome())
openPage(URL)
addEntries(3)
fillEntryType(0, "coverage")
fillEntryType(1, "type")
fillEntryType(2, "tool")
fillSpan(0, ">", "50", "or", "<", "80")
fillSpan(1, "is", "preprocessing")
fillSpan(2, "is", "verible", "and", "is", "surelog")
applyFilters()
removeIcon(2)
removeAll()
================================================
FILE: conf/report/footer.html
================================================
<footer>
<div>
<p>
Generated using <a href="https://github.com/chipsalliance/sv-tests">sv-tests</a>,
revision: <a href="https://github.com/chipsalliance/sv-tests/commit/{{revision}}">{{revision}}</a>,
{% if build_id != 'local' %}
build_id: <a href="{{'https://github.com/chipsalliance/sv-tests/actions/runs/' ~ build_id|string}}">{{build_id}}</a>,
{% else %}
build_id: {{build_id}},
{% endif %}
date: {{datetime}}.
</p>
</div>
<div class="footer">
<a href="https://www.linuxfoundation.org/">
<svg width="219" height="158" viewBox="0 0 219 158" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M94.8842 57.0703H102.446V57.8342H99.1235V66.6183H98.2069V57.8342H94.8842V57.0703ZM103.363 57.0703H104.241V61.2332H109.932V57.0703H110.81V66.6183H109.932V61.9971H104.241V66.6183H103.363V57.0703ZM112.758 57.0703H119.327V57.8342H113.636V61.3096H118.945V62.0735H113.636V65.8163H119.403V66.6183H112.758V57.0703ZM94.8842 90.2592H100.957V91.023H95.8008V94.4603H100.384V95.2623H95.8008V99.769H94.8842V90.2592Z" fill="#003764"/>
<path d="M106.074 90.068C109.053 90.068 110.543 92.4359 110.543 95.033C110.543 97.6682 109.053 99.9979 106.074 99.9979C103.057 99.9979 101.568 97.6682 101.568 95.033C101.568 92.3977 103.057 90.068 106.074 90.068ZM106.074 99.1959C108.595 99.1959 109.664 97.0954 109.664 94.9948C109.664 92.8942 108.595 90.7937 106.074 90.7937C103.554 90.7937 102.484 92.8942 102.484 94.9948C102.484 97.0954 103.516 99.1959 106.074 99.1959ZM111.88 90.259H112.796V96.1406C112.796 98.3557 113.827 99.1959 115.584 99.1959C117.341 99.1959 118.372 98.3557 118.372 96.1406V90.259H119.289V96.3697C119.289 98.3175 118.22 99.9979 115.584 99.9979C112.949 99.9979 111.88 98.3175 111.88 96.3697V90.259V90.259ZM121.084 90.259H122.115L127.653 98.3175H127.691V90.259H128.57V99.7688H127.577L122.039 91.7103H122.001V99.7688H121.084V90.259ZM130.479 90.259H133.764C136.628 90.3354 138.156 91.863 138.156 95.033C138.156 98.2029 136.666 99.7306 133.764 99.807H130.479V90.259ZM131.396 99.005H133.344C136.093 99.005 137.277 97.8592 137.277 95.033C137.277 92.1686 136.093 91.061 133.344 91.061H131.396V99.005V99.005ZM142.433 90.259H143.464L147.207 99.807H146.214L145.068 96.828H140.715L139.569 99.807H138.576L142.433 90.259ZM140.982 96.0642H144.725L142.892 91.1756L140.982 96.0642ZM146.1 90.259H153.662V91.0228H150.339V99.7688H149.422V91.0228H146.1V90.259ZM154.616 90.259H155.533V99.807H154.616V90.259ZM161.529 90.068C164.508 90.068 165.998 92.4359 165.998 95.033C165.998 97.6682 164.508 99.9979 161.529 99.9979C158.512 99.9979 157.023 97.6682 157.023 95.033C157.023 92.3977 158.512 90.068 161.529 90.068ZM161.529 99.1959C164.05 99.1959 165.119 97.0954 165.119 94.9948C165.119 92.8942 164.05 90.7937 161.529 90.7937C159.009 90.7937 157.939 92.8942 157.939 94.9948C157.939 97.0954 159.009 99.1959 161.529 99.1959ZM167.411 90.259H168.404L173.98 98.3175H174.018V90.259H174.896V99.7688H173.903L168.327 91.7103V99.7688H167.411V90.259ZM94.8842 69.4443H100.155V82.1241H107.679V86.478H94.8842V69.4443ZM111.116 69.4443H116.386V86.478H111.116V69.4443ZM120.32 69.4443H125.667L130.632 78.5722H130.708V69.4443H135.673V86.478H130.556L125.323 77.1973H125.285V86.478H120.32V69.4443ZM155.075 79.9089C155.075 84.6448 152.554 86.8981 147.322 86.8981C142.051 86.8981 139.531 84.6448 139.531 79.9089V69.4443H144.801V78.725C144.801 80.4436 144.763 82.6588 147.36 82.6588C149.842 82.6588 149.842 80.4436 149.842 78.725V69.4443H155.113V79.9089H155.075ZM163.439 77.4265L157.825 69.4443H163.974L166.571 74.0656L169.091 69.4443H174.896L169.435 77.4647L175.546 86.478H169.206L166.303 81.3984L163.286 86.478H157.252L163.439 77.4265Z" fill="#003764"/>
<path d="M53.1784 91.2136V74.0654H44.5852V99.7687H70.3266V91.2136H53.1784Z" fill="#009ADE"/>
<path d="M87.4749 56.9175H44.5852V69.7882H53.1784V65.5107H78.8817V91.2139H74.6042V99.7689H87.4749V56.9175Z" fill="#003764"/>
</svg>
</a>
<a href="https://chipsalliance.org/">
<svg width="219" height="157" viewBox="0 0 219 157" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M122.426 54.9409H119.34V75.598H122.426V54.9409Z" fill="#00D0C9"/>
<path d="M95.706 75.598H102.142C103.396 75.598 104.029 74.9641 104.029 73.71H104.016V68.5974H100.943V72.9383H96.9463V57.5868H100.943V61.6658H104.016V56.8426C104.016 55.5748 103.382 54.9409 102.128 54.9409H95.6922C94.4795 54.9409 93.8594 55.5748 93.8732 56.8426V73.71C93.8732 74.9641 94.4795 75.598 95.706 75.598Z" fill="#00D0C9"/>
<path d="M143.938 68.942V72.9934H140.163V68.7904H137.076V73.71C137.076 74.9641 137.696 75.598 138.936 75.598H145.151C146.405 75.598 147.025 74.9641 147.025 73.71V68.7904C147.025 68.0876 146.805 67.5363 146.35 67.1091L140.163 61.28V57.5454H143.938V61.4316H147.025V56.8151C147.025 55.561 146.405 54.9409 145.151 54.9409H138.936C137.696 54.9409 137.076 55.5748 137.076 56.8426V61.4316C137.076 62.1068 137.296 62.658 137.751 63.0852L143.938 68.942Z" fill="#00D0C9"/>
<path d="M109.542 66.3237H113.717V75.598H116.832V54.9409H113.717V63.4573H109.542V54.9409H106.455V75.598H109.542V66.3237Z" fill="#00D0C9"/>
<path d="M151.283 91.4041C151.283 91.7624 151.339 92.2585 151.476 92.8924L146.529 80.1592H143.828V100.816H146.832V89.3095C146.832 88.9512 146.777 88.4551 146.639 87.8212L151.587 100.816H154.288V80.1592H151.283V91.4041Z" fill="#1226AA"/>
<path d="M134.871 80.1318L130.874 100.761V100.816H133.92L134.54 96.9027H138.412L139.033 100.816H142.092L138.123 80.1318H134.871V80.1318ZM134.953 94.2431L136.469 84.9275L137.971 94.2431H134.953Z" fill="#1226AA"/>
<path d="M129.097 80.1592H126.01V100.816H129.097V80.1592Z" fill="#1226AA"/>
<path d="M172.45 98.0877V91.6108H177.094V88.9236H172.45V82.9015H177.838V80.1592H169.363V100.816H177.921V98.0877H172.45Z" fill="#1226AA"/>
<path d="M165.036 80.1592H158.601C157.374 80.1592 156.768 80.7931 156.768 82.0609V98.9283C156.768 100.182 157.374 100.816 158.601 100.816H165.036C166.29 100.816 166.924 100.182 166.924 98.9283V93.8157H163.851V98.1566H159.855V82.805H163.851V86.8841H166.924V82.0609C166.924 80.7931 166.29 80.1592 165.036 80.1592Z" fill="#1226AA"/>
<path d="M97.1121 80.1318L93.1157 100.761V100.816H96.1612L96.7814 96.9027H100.654L101.274 100.816H104.333L100.364 80.1318H97.1121V80.1318ZM97.1948 94.2431L98.7106 84.9275L100.213 94.2431H97.1948Z" fill="#1226AA"/>
<path d="M85.8118 80.5591C84.4613 80.5591 83.2899 81.4962 82.973 82.7916H78.9353V79.5118H75.6555V77.5412H78.9353V69.6587H75.6555V67.6743H78.9353V64.3945H82.973C83.097 64.932 83.3726 65.4005 83.7447 65.7726C84.2683 66.2962 84.9987 66.627 85.798 66.627C86.5972 66.627 87.3276 66.2962 87.8513 65.7726C88.3749 65.2489 88.7057 64.5186 88.7057 63.7193C88.7057 62.107 87.3965 60.8116 85.798 60.8116C84.4475 60.8116 83.2761 61.7487 82.9592 63.044H78.9215V59.7643H75.6417V55.9746H53.1794V59.7643H49.8996V67.6743H53.1794V69.6449H49.8996V72.9247H45.8619C45.545 71.6155 44.3736 70.6922 43.0231 70.6922C41.4246 70.6785 40.1154 71.9876 40.1154 73.5999C40.1154 74.3992 40.4462 75.1296 40.9698 75.6532C41.4935 76.1769 42.2239 76.5076 43.0231 76.5076C43.8224 76.5076 44.5528 76.1769 45.0764 75.6532C45.4485 75.2812 45.7241 74.7988 45.8482 74.2752H49.8996V77.555H53.1794V79.5256H49.8996V87.408H53.1794V89.3787H49.8996V92.6584H45.8619C45.545 91.3493 44.3736 90.426 43.0231 90.426C41.4246 90.4398 40.1154 91.7489 40.1154 93.3475C40.1154 94.9598 41.4246 96.2552 43.0231 96.2552C44.3736 96.2552 45.545 95.3181 45.8619 94.0227H49.8996V97.3025H53.1794V101.161H75.6555V97.3025H78.8939V89.3924H75.6555V87.4218H78.9353V84.1558H82.973C83.097 84.6933 83.3726 85.1618 83.7447 85.5339C84.2683 86.0576 84.9987 86.3883 85.798 86.3883C86.5972 86.3883 87.3276 86.0576 87.8513 85.5339C88.3749 85.0102 88.7057 84.2799 88.7057 83.4806C88.7195 81.8683 87.4103 80.5591 85.8118 80.5591Z" fill="#1226AA"/>
<path d="M84.7094 62.6169C84.9851 62.3413 85.3847 62.1621 85.8119 62.1621C86.2391 62.1621 86.6387 62.3413 86.9143 62.6169C87.1899 62.8925 87.3691 63.2921 87.3691 63.7193C87.3691 64.1465 87.1899 64.5461 86.9143 64.8218C86.6387 65.0974 86.2391 65.2765 85.8119 65.2765C85.3847 65.2765 84.9851 65.0974 84.7094 64.8218C84.4338 64.5461 84.2547 64.1465 84.2547 63.7193C84.2547 63.2921 84.4338 62.8925 84.7094 62.6169Z" fill="#00D0C9"/>
<path d="M44.1257 74.7021C43.8363 74.9777 43.4505 75.1569 43.0233 75.1569C42.5961 75.1569 42.1965 74.9777 41.9208 74.7021C41.6452 74.4265 41.4661 74.0269 41.4661 73.5997C41.4661 72.7315 42.1551 72.0425 43.0233 72.0425C43.8915 72.0425 44.5805 72.7315 44.5805 73.5997C44.5805 74.0269 44.4151 74.4127 44.1257 74.7021Z" fill="#1226AA"/>
<path d="M44.1257 94.4497C43.8363 94.7253 43.4505 94.9044 43.0233 94.9044C42.5961 94.9044 42.1965 94.7253 41.9208 94.4497C41.6452 94.1741 41.4661 93.7744 41.4661 93.3472C41.4661 92.92 41.6452 92.5204 41.9208 92.2448C42.1965 91.9692 42.5961 91.79 43.0233 91.79C43.4505 91.79 43.8501 91.9692 44.1257 92.2448C44.4013 92.5204 44.5805 92.92 44.5805 93.3472C44.5805 93.7882 44.4151 94.1741 44.1257 94.4497Z" fill="#1226AA"/>
<path d="M77.5846 61.1284H72.3894V66.3099H77.5846V61.1284Z" fill="white"/>
<path d="M56.4589 70.9951H51.2636V76.1904H56.4589V70.9951Z" fill="white"/>
<path d="M56.4589 80.876H51.2636V86.0712H56.4589V80.876Z" fill="#1226AA"/>
<path d="M56.4589 90.7568H51.2636V95.9521H56.4589V90.7568Z" fill="white"/>
<path d="M74.3604 99.4522H74.3053H54.5302V96.958H57.81V89.0479H54.5302V87.0773H57.81V79.1673H54.5302V77.1966H57.81V69.3004H54.5302V67.316H57.81V59.406H54.5302V56.9668H74.3053V59.406H71.0393V67.316H74.3191V69.2866H71.0531V77.1829H74.3328V79.1535H71.0668V87.0635H74.3466V89.0341H71.0806V96.9442H74.3604V99.4522Z" fill="#00D0C9"/>
<path d="M77.5846 80.876H72.3894V86.0712H77.5846V80.876Z" fill="white"/>
<path d="M86.9143 84.583C86.6387 84.8586 86.2391 85.0377 85.8119 85.0377C85.3847 85.0377 84.9851 84.8586 84.7094 84.583C84.4338 84.3074 84.2547 83.9077 84.2547 83.4805C84.2547 83.0533 84.4338 82.6537 84.7094 82.3781C84.9851 82.1025 85.3847 81.9233 85.8119 81.9233C86.2391 81.9233 86.6387 82.1025 86.9143 82.3781C87.1899 82.6537 87.3691 83.0533 87.3691 83.4805C87.3691 83.9077 87.1899 84.2936 86.9143 84.583Z" fill="#00D0C9"/>
<path d="M109.142 80.1592H106.055V100.816H114.172V98.0601H109.142V80.1592Z" fill="#1226AA"/>
<path d="M128.049 68.1151H133.051C134.305 68.1151 134.939 67.4674 134.939 66.1858V56.8426C134.939 55.5748 134.305 54.9409 133.051 54.9409H124.962V75.598H128.049V68.1151V68.1151ZM128.049 57.5868H131.825V65.4555H128.049V57.5868Z" fill="#00D0C9"/>
<path d="M119.092 80.1592H116.005V100.816H124.122V98.0601H119.092V80.1592Z" fill="#1226AA"/>
</svg>
</a>
</div>
</footer>
================================================
FILE: conf/report/history-graph-template.html
================================================
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/chart.js@3.5.0/dist/chart.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns@2.0.0/dist/chartjs-adapter-date-fns.bundle.min.js"></script>
</head>
<body>
<canvas id="line-chart" width=300" height="150"></canvas>
<script>
function handleHover(evt, item, legend) {
legend.chart.data.datasets.forEach((line) => {
line.borderColorOrig = line.borderColor;
if (item.text != line.label) {
line.borderColor = line.borderColor + "0c";
}
});
legend.chart.update();
};
function handleLeave(evt, item, legend) {
legend.chart.data.datasets.forEach((line) => {
line.borderColor = line.borderColorOrig;
});
legend.chart.update();
};
new Chart(document.getElementById("line-chart"), {
type: 'line',
data: {
labels: [ {{ labels }} ],
datasets: [
{% for tool in datasets | sort %}
{
data: [ {{ datasets[tool] }} ],
label: "{{ tool }}" ,
borderColor: "{{ colors[tool] }}",
stepped: true,
fill: false
},
{% endfor %}
]
},
options: {
responsive: true,
plugins: {
title: {
display: true,
text: 'SV-Tests results history'
},
legend: {
onHover: handleHover,
onLeave: handleLeave
}
},
scales: {
x: {
display: true,
type: 'time',
title: {
display: true,
text: 'Date of the build'
}
},
y: {
display: true,
title: {
display: true,
text: 'Tests passed [%]'
},
}
}
},
});
</script>
</body>
</html>
================================================
FILE: conf/report/log-template.html
================================================
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" type="text/css" href="{{csspath}}">
</head>
<body>
<header class="{{result.status}}">
<a href="{{log['runner_url']}}" target="_blank"><h1>{{log['runner']|e}}</h1></a>
<h2>{{result.name|e}}</h2>
</header>
<section class="property-list">
<dl>
<div><dt>description</dt><dd>{{log['description']|e}}</dd></div>
<div><dt>rc</dt><dd>{{result.exit_code}} (means success: {{log['tool_success']|e}})</dd></div>
{% if should_fail_because|length %}
<div><dt>should_fail_because</dt><dd> {{log['should_fail_because']|e}}</dd></div>
{% endif %}
<div><dt>tags</dt><dd>{{result.tags|join(' ')|e}}</dd></div>
<div>
<dt>incdirs</dt>
<dd><ul>
{% for dir in log['incdirs'].split(' ') %}
<li>{{dir}}<li>
{% endfor %}
</ul></dd>
</div>
<div><dt>top module</dt><dd>{{log['top_module']|e}}</dd></div>
<div><dt>type</dt><dd>{{result.types|join(' ')|e}}</dd></div>
<div><dt>results group</dt><dd>{% if result.results_group|length %}{{result.results_group|e}}{% else %}<em></em>{% endif %}</dd></div>
<div><dt>mode</dt><dd>{{log['mode']|e}}</dd></div>
<div>
<dt>files</dt>
<dd><ul>
{% for f, f_html in input_files_map.items() %}
<li><a href="{{f_html}}" target="file-frame">{{f|e}}</a><li>
{% endfor %}
</ul></dd>
</div>
<div><dt>defines</dt><dd><code>{{log['defines']|e}}</code></dd></div>
<div><dt>completed</dt><dd>{{log['date_completed']|e}}</dd></div>
<div><dt>time elapsed</dt><dd>{{'%0.3f'| format(result.total_time|float)}}s</dd></div>
<div><dt>ram usage</dt><dd>{{'%d'| format(result.ram_usage|int)}} KB</dd></div>
</dl>
</section>
<section class="log">
{% for line in content.split('\n') %}
<pre>{{line}}</pre>
{% endfor %}
</section>
</body>
</html>
================================================
FILE: conf/report/log.css
================================================
@import 'details-view.css';
:root {
/* Colors */
--white: #FFFFFF;
--light-gray: #F9F9F9;
--gray: #E6E6E6;
--dark-gray: #8E8E93;
--black: #2C2C2E;
--red: #ED5545;
--green: #63C366;
--accent: #1226AA;
/* Padding */
--gap-l:30px;
--gap-m:20px;
--gap-s:10px;
/* Breakpoints */
--mobile:670px;
--tablet:1280px;
--desktop:1920px;
}
section {
margin: 0;
padding: 4px;
overflow: hidden;
width: 100%;
}
section.property-list.test-passed { background-color: #D7ECD4; }
section.property-list.test-failed { background-color: #F5CFCA; }
section.property-list a:link {
color: #00006f;
}
section.property-list > dl {
margin: 0;
}
section.property-list > dl > div {
display: block;
line-height: 1.2em;
}
header.test-passed {
background-color: var(--green);
position: sticky;
left: 0;
top: 0;
width: calc(100vw - 15px);
}
header.test-failed {
background-color: var(--red);
position: sticky;
left: 0;
top: 0;
width: calc(100vw - 15px);
}
section.property-list > dl dt {
display: inline;
font-weight: bold;
}
section.property-list > dl dt::after {
content: ":";
}
section.property-list > dl dd {
margin: 0 0 0 0.5em;
display: inline;
}
section.property-list > dl dd ul {
margin: 0 0 0.5rem 1rem;
padding: 0;
}
section.property-list > dl dd ul li {
list-style-type: none;
}
section.log {
padding: 4px;
background-color: white;
}
section.log > pre {
margin: 0;
padding: 0;
font-family: "Courier New", Consolas, monospace;
}
================================================
FILE: conf/report/navbar.html
================================================
<section class="top-nav">
<div class="nav-logo">
<svg width="66" height="62" viewBox="0 0 66 62" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M65.3463 29.9323C65.2247 38.422 61.4477 46.7454 55.1771 52.53C48.9534 58.3713 40.3029 61.6235 31.7477 61.442C23.186 61.3222 14.8047 57.7789 8.97575 51.8959C3.09325 46.0559 -0.179302 37.9506 0.0075892 29.9323C0.138282 21.9065 3.7049 14.0621 9.63183 8.60273C15.513 3.09417 23.6735 0.0373689 31.7477 0.215105C39.8272 0.341159 47.7132 3.68411 53.2062 9.23552C58.7463 14.7567 61.8123 22.3779 61.6294 29.9323H65.3463ZM61.6294 29.9323C61.4987 22.3691 58.1333 15.005 52.5488 9.86957C46.9996 4.69254 39.3397 1.83364 31.7477 2.00759C24.1492 2.13364 16.7585 5.28499 11.604 10.5036C6.40763 15.6933 3.54545 22.8418 3.7245 29.9323C3.85519 37.0291 7.01927 43.9243 12.2601 48.7282C17.4734 53.5737 24.6367 56.2347 31.7477 56.0645C38.8639 55.9385 45.7593 52.9838 50.578 48.0941C55.4306 43.2297 58.0928 36.564 57.9125 29.9323H61.6294Z" fill="#1226AA"/>
<path d="M20.7043 26.7528C20.6095 26.9045 20.5084 27.0183 20.4009 27.0941C20.2998 27.17 20.167 27.2079 20.0027 27.2079C19.8573 27.2079 19.6992 27.1636 19.5286 27.0751C19.3642 26.9803 19.1746 26.876 18.9597 26.7622C18.7511 26.6485 18.5109 26.5473 18.239 26.4588C17.9672 26.364 17.6575 26.3166 17.3098 26.3166C16.7093 26.3166 16.2605 26.4462 15.9634 26.7054C15.6726 26.9582 15.5272 27.3027 15.5272 27.7389C15.5272 28.017 15.6157 28.2477 15.7927 28.431C15.9697 28.6144 16.2005 28.7724 16.4849 28.9051C16.7757 29.0379 17.1044 29.1612 17.471 29.2749C17.844 29.3824 18.2232 29.5057 18.6088 29.6447C18.9944 29.7775 19.3705 29.9355 19.7372 30.1188C20.1101 30.3021 20.4388 30.536 20.7233 30.8205C21.0141 31.1049 21.2479 31.4526 21.4249 31.8635C21.6019 32.268 21.6904 32.7579 21.6904 33.3332C21.6904 33.9716 21.5798 34.569 21.3586 35.1252C21.1373 35.6815 20.8149 36.1682 20.3914 36.5854C19.9742 36.9963 19.4559 37.3218 18.8364 37.5621C18.2232 37.7959 17.5247 37.9129 16.7409 37.9129C16.3111 37.9129 15.8717 37.8686 15.4229 37.7801C14.9805 37.6916 14.5506 37.5684 14.1334 37.4103C13.7162 37.246 13.3243 37.0532 12.9577 36.832C12.591 36.6107 12.2718 36.3642 12 36.0924L12.9482 34.5942C13.024 34.4868 13.122 34.3983 13.2421 34.3287C13.3685 34.2529 13.5045 34.215 13.6498 34.215C13.8395 34.215 14.0291 34.275 14.2187 34.3951C14.4147 34.5152 14.6328 34.648 14.873 34.7934C15.1195 34.9387 15.4008 35.0715 15.7169 35.1916C16.0329 35.3117 16.4059 35.3718 16.8357 35.3718C17.4173 35.3718 17.8693 35.2453 18.1916 34.9925C18.514 34.7333 18.6752 34.3256 18.6752 33.7693C18.6752 33.4469 18.5867 33.1846 18.4097 32.9823C18.2327 32.7801 17.9988 32.6125 17.7081 32.4798C17.4236 32.347 17.0981 32.2301 16.7314 32.129C16.3648 32.0278 15.9887 31.9172 15.6031 31.7971C15.2175 31.6707 14.8414 31.519 14.4748 31.342C14.1081 31.1587 13.7794 30.9216 13.4886 30.6308C13.2042 30.3337 12.9735 29.9671 12.7965 29.5309C12.6195 29.0885 12.531 28.5448 12.531 27.9001C12.531 27.3817 12.6353 26.876 12.8439 26.383C13.0525 25.8899 13.3591 25.4506 13.7636 25.065C14.1682 24.6794 14.6644 24.3728 15.2523 24.1453C15.8401 23.9114 16.5134 23.7944 17.2719 23.7944C17.6954 23.7944 18.1063 23.8292 18.5045 23.8987C18.9091 23.9619 19.2915 24.0599 19.6518 24.1927C20.0121 24.3191 20.3472 24.474 20.6569 24.6573C20.973 24.8343 21.2543 25.0366 21.5008 25.2641L20.7043 26.7528Z" fill="#1226AA"/>
<path d="M35.6498 23.9461L30.1124 37.7612H27.2109L21.6735 23.9461H24.2526C24.5307 23.9461 24.7551 24.0125 24.9258 24.1453C25.0965 24.2717 25.2261 24.436 25.3146 24.6383L27.9884 32.0341C28.1149 32.3565 28.2381 32.7105 28.3582 33.0961C28.4783 33.4754 28.5921 33.8736 28.6996 34.2908C28.7881 33.8736 28.8861 33.4754 28.9935 33.0961C29.1073 32.7105 29.2274 32.3565 29.3538 32.0341L32.0087 24.6383C32.0783 24.4613 32.2015 24.3033 32.3785 24.1642C32.5618 24.0188 32.7862 23.9461 33.0517 23.9461H35.6498Z" fill="#1226AA"/>
<path d="M35.777 30.811H40.8972V33.1814H35.777V30.811Z" fill="#1226AA"/>
<path d="M52 26.4873H48.1124V37.7612H44.9076V26.4873H41.02V23.9461H52V26.4873Z" fill="#1226AA"/>
</svg>
<div class="logo-text"><h1>SV Tests</h1></div>
</div>
<input id="menu-toggle" type="checkbox" />
<label class='menu-button-container' for="menu-toggle">
<div class='menu-button'></div>
</label>
<ul class="menu">
<li><a class="nav-link" href="#report_table-">main tests</a></li>
<li><a class="nav-link" href="#report_table-cores">cores</a></li>
<li><a class="nav-link" href="#report_table-imported">imported</a></li>
<li><a class="nav-link" href="https://chipsalliance.github.io/sv-tests-results/history">history</a></li>
</ul>
</section>
================================================
FILE: conf/report/report-template.html
================================================
{# vim: set ts=2 sts=2 sw=2 et: #}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>SystemVerilog Report</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.css">
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
{# Global parameters for scripts and stylesheets #}
<script>
var TOOL_NAMES = [{{report.tools.keys()|numeric_sort|map('escape_js_str')|map('quote')|join(', ')}}];
</script>
<style>:root { --TOOLS_COUNT: {{report.tools|length}}; }</style>
<link rel="stylesheet" type="text/css" href="report.css">
<script type="text/javascript" charset="utf8" src="report.js"></script>
<script type="text/javascript" charset="utf8" src="filter.js"></script>
</head>
<body>
{% include 'navbar.html' %}
<main>
<section id="filter-section">
<details>
<summary>
Advanced filters
</summary>
<button id="filter-apply-button" class="v_link-button" disabled>Apply</button>
<button id="filter-reset-button" class="v_link-button" disabled>Reset</button>
<span id="filter-error-msg"></span>
<dl class="c_filter">
<dt>Tool</dt>
<dd class="p_tool-filter">
<div class="p_checkboxes">
{% for tool, tool_info in report.tools|numeric_dictsort %}
<label title="{{tool|escape_attr}}"><input type="checkbox" value="{{tool|lower|escape_attr}}" checked>{{tool|e}}</label>
{% endfor %}
</div>
<div class="p_buttons-bar">
<button class="p_select-all-button">Select all</button>
<button class="p_invert-selection-button">Invert selection</button>
</div>
</dd>
<dt>Coverage</dt>
<dd class="p_coverage-filter">
<div class="p_entry">
<select class="p_entry-operator">
<option value=">=">>=</option>
<option value="<="><=</option>
<option value=">">></option>
<option value="<"><</option>
<option value="==">==</option>
</select>
<input type="number" min="0" max="100" class="p_entry-value" value="0"><span>%</span>
</div>
<template class="p_entry-template">
<div class="p_entry v_removable">
<select class="p_entry-relation">
<option value="&&">and</option>
<option value="||">or</option>
</select>
<select class="p_entry-operator">
<option value=">=">>=</option>
<option value="<="><=</option>
<option value=">">></option>
<option value="<"><</option>
<option value="==">==</option>
</select>
<input type="number" min="0" max="100" class="p_entry-value" value="0"><span>%</span>
<button class="v_link-button p_remove-entry-button">(remove)</button>
</div>
</template>
<button class="p_add-entry-button">Add condition</button>
</dd>
<dt>Type</dt>
<dd class="p_type-filter">
<div class="p_checkboxes">
{% for type in ["Elaboration", "Parsing", "Simulation"] %}
<label title="{{type|escape_attr}}"><input type="checkbox" value="{{type|lower|escape_attr}}" checked>{{type|e}}</label>
{% endfor %}
</div>
</dd>
</dl>
</details>
</section>
{% for group, group_data in report.groups|numeric_dictsort %}
<table id="report_table-{{group}}" class="dataTable" data-group="{{group}}">
<thead>
<tr>
<th>
<h2>{{group|e}}</h2>
</th>
<th></th>
{% for tool, tool_info in report.tools|numeric_dictsort %}
<th title="{{tool_info.version|escape_attr}}" style="--z: {{loop.length - loop.index}}">
<a class="tool_link" target="_blank" href="{{tool_info.url}}">{{tool|e}}</a>
</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for tag, tools in group_data.tags_tools|tag_dictsort %}
{% set tag_info = report.tags[tag] %}
{% set types_used_in_the_row = [] %}
{% for tool, tool_data in tools.items() %}
{% for type in tool_data.types %}
{% if type not in types_used_in_the_row %}
{% set _ = types_used_in_the_row.append(type) %}
{% endif %}
{% endfor %}
{% endfor %}
<tr data-types="{{types_used_in_the_row|join(' ')}}" data-tag="{{tag|lower|e}}">
<th title="{{tag_info.description|escape_attr}}">
{%- if tag_info.url -%}
<a class="tag_link" target="_blank" href="{{tag_info.url}}">{{tag_info.description|e}}</a>
{%- else -%}
{{tag_info.description|e}}
{%- endif -%}
</th>
<th title="{{tag_info.description|escape_attr}}">{{tag|e}}</th>
{% for tool in report.tools|numeric_sort %}
{% set attrs = [] %}
{% if tool in tools %}
{% set tool_data = tools[tool] %}
{% set test_status = tool_data.status|string %}
{% if test_status != 'test-na' %}
{% set _ = attrs.append('class=' ~ (test_status|quote)) %}
{% set _ = attrs.append('data-tool=' ~ (tool|lower|escape_attr|quote)) %}
{% if test_status == 'test-varied' %}
{% set percentage = '%0.0f'|format(100.0 * tool_data.passed_tests / tool_data.total_tests) %}
{% set _ = attrs.append('style="--val: '~(percentage)~'%"') %}
{% endif %}
{% endif %}
{% endif %}
{% if attrs|length %}
<td {{attrs|join(' ')}}>{{tool_data.passed_tests}}/{{tool_data.total_tests}}</td>
{% else %}
<td></td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</tbody>
<tfoot>
<tr>
<th colspan="2">Total tests passed</th>
{% for tool in report.tools|numeric_sort %}
{% if tool in group_data.summaries %}
{% set tool_summary = group_data.summaries[tool] %}
{% set passed_tests = tool_summary.total_passed_tests %}
{% set total_tests = tool_summary.total_tests %}
{% set passed_tests_percentage = '%0.0f'|format(100.0 * passed_tests / total_tests) %}
<td class="test-varied" style="--val: {{passed_tests_percentage}}%" title="{{tool|lower|e}} ({{passed_tests_percentage}}%)">{{passed_tests}}/{{total_tests}}</td>
{% else %}
<td></td>
{% endif %}
{% endfor %}
</tr>
<tr>
<th colspan="2">Total tags passed</th>
{% for tool in report.tools|numeric_sort %}
{% if tool in group_data.summaries %}
{% set tool_summary = group_data.summaries[tool] %}
{% set passed_tags = tool_summary.total_passed_tags %}
{% set tested_tags = tool_summary.total_tested_tags %}
{% set passed_tags_percentage = '%0.0f'|format(100.0 * passed_tags / tested_tags) %}
<td class="test-varied" style="--val: {{passed_tags_percentage}}%" title="{{tool|lower|e}} ({{passed_tags_percentage}}%)">{{passed_tags}}/{{tested_tags}}</td>
{% else %}
<td></td>
{% endif %}
{% endfor %}
</tr>
<tr>
<th colspan="2">Total time elapsed</th>
{% for tool in report.tools|numeric_sort %}
{% if tool in group_data.summaries %}
{% set tool_summary = group_data.summaries[tool] %}
<td title="{{tool|lower|e}}">{{'%0.0f'|format(tool_summary.total_time)}}s</td>
{% else %}
<td></td>
{% endif %}
{% endfor %}
</tr>
<tr>
<th colspan="2">User time elapsed</th>
{% for tool in report.tools|numeric_sort %}
{% if tool in group_data.summaries %}
{% set tool_summary = group_data.summaries[tool] %}
<td title="{{tool|lower|e}}">{{'%0.0f'|format(tool_summary.user_time)}}s</td>
{% else %}
<td></td>
{% endif %}
{% endfor %}
</tr>
<tr>
<th colspan="2">System time elapsed</th>
{% for tool in report.tools|numeric_sort %}
{% if tool in group_data.summaries %}
{% set tool_summary = group_data.summaries[tool] %}
<td title="{{tool|lower|e}}">{{'%0.0f'|format(tool_summary.system_time)}}s</td>
{% else %}
<td></td>
{% endif %}
{% endfor %}
</tr>
<tr>
<th colspan="2">Maximum ram usage</th>
{% for tool in report.tools|numeric_sort %}
{% if tool in group_data.summaries %}
{% set tool_summary = group_data.summaries[tool] %}
<td title="{{tool|lower|e}}">{{'%0.0f'|format(tool_summary.max_ram_usage)}} MB</td>
{% else %}
<td></td>
{% endif %}
{% endfor %}
</tr>
<tr>
<th colspan="2">Average throughput passed for inputs > 1KiB</th>
{% for tool in report.tools|numeric_sort %}
{% if tool in group_data.summaries %}
{% set tool_summary = group_data.summaries[tool] %}
<td title="{{tool|lower|e}}">{{'%0.0f'|format(tool_summary.passed_throughput|float)}} KiB/s</td>
{% else %}
<td></td>
{% endif %}
{% endfor %}
</tr>
</tfoot>
</table>
{% endfor %}
<section id="summary-section">
<a href="report.csv">Download a summary in csv</a>
</section>
</main>
{% include 'footer.html' %}
<div class="c_test-details-panel s_hidden">
<div class="test-details">
<div class="wrapper"></div>
<h2>TEST DETAILS</h2>
<button class="p_close-button">
<svg width="11" height="11" viewBox="0 0 11 11" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.83579 5.25L0.292893 8.79289L1.70711 10.2071L5.25 6.66421L8.79289 10.2071L10.2071 8.79289L6.66421 5.25L10.2071 1.70711L8.79289 0.292893L5.25 3.83579L1.70711 0.292893L0.292893 1.70711L3.83579 5.25Z" fill="white"/>
</svg>
</button>
</div>
<div class="grid-2">
<iframe class="p_log" name="log-frame"></iframe>
<iframe class="p_file" name="file-frame"></iframe>
</div>
<div class="p_tests-list">
<template class="p_item-template">
<button class="p_item">
<slot name="test-name"></slot>
</button>
</template>
</div>
</div>
</body>
</html>
================================================
FILE: conf/report/report.css
================================================
:root {
/* Colors */
--white: #FFFFFF;
--light-gray: #F9F9F9;
--gray: #E6E6E6;
--dark-gray: #8E8E93;
--black: #2C2C2E;
--red: #ED5545;
--green: #63C366;
--accent: #1226AA;
/* Padding */
--gap-l:30px;
--gap-m:20px;
--gap-s:10px;
/* Breakpoints */
--mobile:670px;
--tablet:1280px;
--desktop:1920px;
}
/******** GENERAL ********/
* {
box-sizing: border-box;
margin: 0px;
}
h1{
font-size: 24px;
font-family: 'Lato', sans-serif;
font-weight: 700
}
h2{
font-size: 15px;
font-family: 'Lato', sans-serif;
font-weight: 500;
padding-left: 10px;
}
h3{
font-size: 14px;
font-family: 'Roboto', sans-serif;
font-weight: 500;
}
h4{
font-size: 13px;
font-family: 'Roboto', sans-serif;
}
h5{
font-size: 12px;
font-family: 'Roboto', sans-serif;
}
p{
font-size: 12px;
font-weight: 300;
}
a {
font-size: 16px;
font-family: 'Roboto', sans-serif;
font-weight: 500;
color: var(--black);
text-decoration: underline;
}
a:hover {
color: var(--accent);
transition: ease-in 0.2s;
}
body {
background-color: var(--white);
margin: 0;
font-family: 'Roboto', sans-serif;
width: fit-content;
min-width: 100%;
font-family: sans-serif;
margin: 0;
padding: 0 0 var(--panel-height, 0) 0;
}
footer {
display: flex;
position:sticky;
width: 100%;
margin-left: 0 !important;
margin-right: 0;
align-items: center;
justify-content: center;
font-size: 10px;
flex-direction: column;
}
/******** HEADER ********/
header {
margin-left: var(--gap-m);
margin-right: var(--gap-m);
z-index: 600;
}
@media only screen and (max-width: 670px) {
header {
margin-left: var(--gap-s);
margin-right: var(--gap-s);
}
}
.menu {
display: flex;
flex-direction: row;
list-style-type: none;
margin: 0;
padding: 0;
}
.menu > li {
margin: 0 1rem;
overflow: hidden;
}
.menu-button-container {
display: none;
height: 100%;
width: 30px;
cursor: pointer;
flex-direction: column;
justify-content: center;
align-items: center;
}
#menu-toggle {
display: none;
}
.menu-button,.menu-button::before,.menu-button::after {
display: block;
background-color: var(--black);
position: absolute;
height: 3px;
width: 20px;
transition: transform 400ms cubic-bezier(0.23, 1, 0.32, 1);
border-radius: 2px;
}
.menu-button::before {
content: '';
margin-top: -8px;
}
.menu-button::after {
content: '';
margin-top: 8px;
}
#menu-toggle:checked + .menu-button-container .menu-button::before {
margin-top: 0px;
transform: rotate(405deg);
}
#menu-toggle:checked + .menu-button-container .menu-button {
background: rgba(255, 255, 255, 0);
}
#menu-toggle:checked + .menu-button-container .menu-button::after {
margin-top: 0px;
transform: rotate(-405deg);
}
@media (max-width: 700px) {
.menu-button-container {
display: none;
}
.menu {
position: absolute;
top: 0;
margin-top: 100px;
left: 0;
flex-direction: column;
width: 100%;
justify-content: center;
align-items: center;
z-index:300;
}
#menu-toggle ~ .menu li {
height: 0;
margin: 0;
padding: 0;
border: 0;
transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1);
}
#menu-toggle:checked ~ .menu li {
height: 3.5em;
padding: 0.5em;
transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1);
}
.menu > li {
display: flex;
justify-content: center;
margin: 0;
padding: 0.5em 0;
width: 100%;
color: var(--black);
background-color: var(--white);
}
.menu > li:not(:last-child) {
border-bottom: 1px solid #444;
}
}
.top-nav {
display: flex;
position: sticky;
left: 0;
flex-direction: row;
align-items: center;
justify-content: space-between;
background-color: var(--white);
height: 100px;
width: calc(100vw - 30px);
padding: var(--gap-m);
}
.nav-logo{
display: flex;
}
.logo-description {
width: 300px;
font-family: 'Lato';
font-weight: 500;
font-size: 13px;
word-break: break-all;
text-decoration: none;
}
@media only screen and (max-width: 1200px) {
.logo-description {
display: none;
}
}
.logo-text {
margin-left: var(--gap-m);
display: flex;
flex-direction: row;
align-items: center;
}
.nav-link{
font-size: 15px;
font-family: 'Lato', sans-serif;
font-weight: 700;
color: var(--black);
text-decoration: none;
}
/******** FILTERS ********/
.dataTables_filter {
float: none !important;
text-align: center;
display: flex;
justify-content: flex-end;
margin: var(--gap-m);
}
.dataTables_wrapper .dataTables_filter input {
margin-left: 0.5em;
}
#filter-section {
cursor:pointer;
color: var(--black);
text-decoration:none;
font-size: 15px;
font-family: "Roboto";
}
#filter-section > details > summary {
cursor:pointer;
color: var(--accent);
padding: var(--gap-m) 0;
font-size: 15px;
font-family: "Roboto";
font-weight: 600;
text-transform: uppercase;
}
marker {
content: "> ";
}
select {
padding: var(--gap-s);
border-radius: 5px;
margin-right: 10px;
border: 1px solid var(--dark-gray);
}
input[type="number" i]{
padding: var(--gap-s);
border-radius: 5px;
border: 1px solid var(--dark-gray);
margin-right: 5px;
}
button {
background-color: var(--white);
border-radius: 5px;
border:1px solid var(--gray);
display:inline-block;
cursor:pointer;
color: var(--black);
padding: var(--gap-s) var(--gap-m);
text-decoration:none;
font-size: 15px;
font-family: "Roboto";
}
button:hover {
background-color: var(--accent);
transition: ease-in 0.2s;
color: var(--white);
}
.p_add-entry-button{
margin-top: 5px;
}
dt {
font-family: 'Roboto';
font-style: normal;
font-weight: 600;
text-transform: uppercase;
color: var(--dark-gray);
margin-bottom: 5px;
margin-top: 20px;
}
label {
margin-right: 10px;
display: block;
}
#filter-section {
padding: var(--gap-m);
border-bottom: 1px solid var(--gray);
border-top: 1px solid var(--gray);
}
#filter-apply-button {
background-color: var(--accent);
transition: ease-in 0.2s;
color: var(--white);
}
.controls{
display:flex;
margin-top: 10px;
justify-content:flex-end;
}
.p_checkboxes{
margin-bottom: 5px;
}
input[type="checkbox" i] {
margin-right: 5px;
width: 15px;
margin-top: 3px;
height: 15px;
}
#report_table-_filter > label {
color: var(--black);
}
#report_table-cores_filter > label {
color: var(--black);
}
#report_table-imported_filter > label {
color: var(--black);
}
form {
color: #555;
display: flex;
padding: 2px;
border: 1px solid currentColor;
border-radius: 5px;
margin: 0 0 30px;
}
input[type="search"] {
background: transparent;
height: 45px;
min-width: 300px;
max-width: 500px;
padding: var(--gap-s) var(--gap-s);
font-size: 16px;
border: 1px solid var(--dark-gray);
border-radius: 5px;
padding-left: 35px;
background: url(search.svg) no-repeat left;
background-size: 20px;
background-position: 7px;
}
/******** TABLE ********/
table.dataTable thead th, table.dataTable thead td {
border-bottom: none;
}
table.dataTable {
width:100%;
overflow:auto;
border-collapse: collapse;
}
.dataTables_info {
font-size: 12px;
margin-top: 3px;
float: none !important;
text-align: left;
}
table.dataTable td, table.dataTable th:nth-of-type(2) {
border: 1px solid var(--gray);
}
tr > th:nth-of-type(1){
font-family: 'Roboto', sans-serif;
font-weight: 500;
padding-left: 20px;
padding-right: 5px;
width: 260px;
min-width: 260px;
height: 60px;
border-bottom: 1px solid var(--gray);
background-color: var(--white);
text-align:left;
color: var(--black);
}
@media only screen and (max-width: 670px) {
tr > th:nth-of-type(1){
width: 160px;
min-width: 160px;
}
}
tr > th:nth-of-type(2){
font-family: 'Roboto', sans-serif;
font-weight: 500;
padding: var(--gap-s);
min-width:60px;
text-align:center;
color: var(--dark-gray);
word-break: break-word;
border-bottom: 1px solid var(--gray);
}
td{
width:2000px;
}
th{
width:2000px;
word-break: break-word;
}
thead th {
height: 80px;
min-width: 90px;
background-color: var(--light-gray);
border-top: 1px solid var(--gray);
border-bottom: 1px solid var(--gray);
}
table.dataTable > tbody > tr > td {
text-align: center;
min-width: 90px;
color: white;
}
table.dataTable > tfoot > tr > td {
font-weight: normal !important;
text-align: center;
border: 1px solid var(--gray) !important;
overflow: hidden;
padding: 0;
}
table.dataTable > tfoot > tr, tfoot > tr> th:nth-of-type(1) {
background-color: var(--light-gray);
}
@media only screen and (max-width: 670px){
tfoot > tr > th:nth-of-type(1) {
max-width: 330px;}
}
table.dataTable, table.dataTable th, table.dataTable td {
box-sizing: border-box;
}
/******** TEST STATUS ********/
.test-failed {
background-color: var(--red);
}
.test-passed {
background-color: var(--green);
}
.test-varied {
background-color: var(--red);
background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAQSURBVHgBAQUA+v8AY8Nm/wWlAoycuazwAAAAAElFTkSuQmCC');
background-repeat:no-repeat;
background-size: var(--val, 100%) 100%;
}
/******** TABLE SORTING ********/
table.dataTable thead .sorting, table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc, table.dataTable thead .sorting_asc_disabled, table.dataTable thead .sorting_desc_disabled {
cursor: pointer;
background-repeat: no-repeat;
background-position: bottom right;
}
table.dataTable thead .sorting {
background-image: url("sort_both.png");
}
table.dataTable thead .sorting_asc {
background-image: url("sort_asc.png");
}
table.dataTable thead .sorting_desc {
background-image: url("sort_desc.png");
}
/******** STICKY COLUMNS ********/
table.dataTable > tbody > tr > th:nth-of-type(-n+2), table.dataTable > tfoot > tr > th:nth-of-type(-n+2) {
position: sticky;
z-index: 1;
}
table.dataTable > * > tr > th:nth-of-type(1) {
left: 0;
}
table.dataTable > * > tr > th:nth-of-type(2) {
left: 260px;
background-color: var(--white);
min-width: 120px;
width: 120px;
border-left: 0;
}
@media only screen and (max-width: 670px) {
table.dataTable > * > tr > th:nth-of-type(2) {
left: 160px;
min-width: 100px;
width: 100px;
}
}
table.dataTable > thead > tr > th:nth-of-type(n+2) {
position: sticky;
z-index: calc(2 + var(--z, 0));
top: -1px;
min-width: 140px;
}
table.dataTable thead th, table.dataTable thead td {
padding: 0px 5px;
}
table.dataTable > thead > tr > th:nth-of-type(-n+2) {
position: sticky;
z-index: calc(3 + var(--TOOLS_COUNT, 100));
top: 0;
background-color: var(--light-gray);
}
table.dataTable > tfoot > tr:nth-of-type(-n+2) > td {
color: white;
font-weight: bold;
}
table.dataTable tbody th, table.dataTable tbody td {
padding: 0px 15px;
}
table.dataTable tfoot th, table.dataTable tfoot td {
padding: 10px 18px 6px 15px;
}
/******** DETAILS ********/
.c_test-details-panel .p_close-button {
background: var(--black);
float: top;
grid-area: "options";
}
.c_test-details-panel {
position: fixed;
bottom: 0;
z-index: 50;
width: 100%;
display: flex;
flex-direction: column;
align-items: stretch;
justify-items: stretch;
justify-content: stretch;
overflow-y: hidden;
overflow-x: hidden;
background-color: white;
font-family: "Courier New", Courier, monospace;
align-content: space-evenly;
}
@media only screen and (max-width: 1000px) {
.c_test-details-panel {
display: flex;
flex-direction: column;
}
}
.p_log {
width: 50vw;
min-height: 30vh;
}
@media only screen and (max-width: 1000px) {
.p_log {
width: 100vw;
}
}
.p_file {
width:50%;
min-height: 30vh;
background-color: white;
}
@media only screen and (max-width: 1000px) {
.p_file {
width: 100vw;
}
}
.test-details {
height: 60px;
background-color: var(--light-gray);
display: flex;
align-items: center;
flex-direction: row;
color: var(--dark-gray);
justify-content: space-between;
margin-left: 10px;
margin-right: 10px;
}
.wrapper {
width: 60px;
}
.grid-2{
display: flex;
flex-direction: row;
}
section.log {
background-color: white;
}
@media only screen and (max-width: 1000px) {
.grid-2 {
display: flex;
flex-direction: column;
}
}
.c_test-details-panel.s_hidden {
display: none;
}
.c_test-details-panel > iframe {
background-color: #fff;
border: none;
height: 30vh;
}
.c_test-details-panel > .p_tests-list {
max-height: 20vh;
background-color: var(--white);
overflow-y: scroll;
}
.c_test-details-panel > .p_tests-list > button {
width: 20%;
height: 60px;
margin: 0px;
cursor: pointer;
border: 1px solid var(--white);
overflow:hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: white;
box-sizing: border-box;
}
@media only screen and (max-width: 670px) {
.c_test-details-panel > .p_tests-list > button {
height: 50px;
width: 50%
}
}
.c_test-details-panel > .p_tests-list > button:focus {
outline:0;
}
.c_test-details-panel .p_close-button {
background: var(--black);
border-radius: 25px;
float: top;
color: white;
padding: 12px;
width: 35px;
height: 35px;
display: flex;
}
.c_test-details-panel > .p_tests-list > .p_item {
float: left;
background-color: var(--red);
}
.c_test-details-panel > .p_tests-list > .p_item.s_passed {
background-color: var(--green);
}
.c_test-details-panel > .p_tests-list > .p_item.s_selected {
-webkit-box-shadow:inset 0px 0px 0px 5px var(--white);
-moz-box-shadow:inset 0px 0px 0px 5px var(--white);
box-shadow:inset 0px 0px 0px 5px var(--white);
filter: brightness(95%);
font-weight: bold;
}
.ui-widget-shadow {
-webkit-box-shadow: none;
box-shadow: none;
}
.ui-tooltip {
font-size: 13px;
white-space: pre-wrap;
max-width: 100%;
}
.ui-corner-all {
border-radius: 0px;
}
table.dataTable > tbody > tr > td:not(:empty):hover {
cursor: pointer;
}
table.dataTable > tbody > tr > td:not(:empty).s_selected {
-webkit-box-shadow:inset 0px 0px 0px 5px var(--gray);
-moz-box-shadow:inset 0px 0px 0px 5px var(--gray);
box-shadow:inset 0px 0px 0px 5px var(--gray);
filter: brightness(95%);
font-weight: bold;
}
/******** STICKY PAGE ********/
header, .dataTables_filter {
position: sticky;
width: calc(100vw - 30px);
left: 0;
margin-left: 0 !important;
margin-right: 0 !important;
}
#filter-section, .dataTables_info, #summary-section, footer {
position: sticky;
width: calc(100vw - 30px);
left: 10px;
margin-left: 0;
margin-right: 0;
}
iframe[seamless] {
border: none;
}
================================================
FILE: conf/report/report.js
================================================
/// Utils //////////////////////////////////////////////////////////////
function is_string(o) { return (typeof o === "string" || o instanceof String) }
function is_empty(str) { return str.length === 0 }
function deep_eq(a, b) {
if (Array.isArray(a)) {
if (!Array.isArray(b) || a.length != b.length)
return false
return a.every((v, i) => deep_eq(v, b[i]))
} else {
return a === b
}
}
function parseSimpleFraction(s, for_sorting=false) {
try {
let [nom, denom] = s.split("/").map((v) => parseInt(v))
if (for_sorting) {
// Add small offsets so that fractions with the same value will be
// sorted by denominator (e.g. 0/8 < 0/1, 1/1 < 20/20, etc).
nom += 0.000001
denom += 0.000002
}
const value = nom / denom
return isFinite(value) ? value : NaN
} catch (e) {
return NaN
}
}
class Log {
static dbg(tag, fmt, ...rest) {
console.debug(`%c[${tag}]%c ${fmt}`, "text-transform:uppercase;font-weight:bold", "", ...rest)
}
static err(tag, fmt, ...rest) {
console.error(`%c[${tag}]%c ${fmt}`, "text-transform:uppercase;font-weight:bold", "", ...rest)
}
}
/// Custom sorting for DataTable ///////////////////////////////////////
// Sorts using original order of HTML table rows
$.fn.dataTable.ext.order['original-order'] = function (settings, col) {
return [...Array(this.DataTable().data().length).keys()]
}
$.fn.dataTable.ext.order['simple-fraction'] = function (settings, col) {
return this.DataTable().data().map(function (row) {
const value = parseSimpleFraction(row[col], true)
return isFinite(value) ? value : -Infinity
})
}
/// ConfigLoader ///////////////////////////////////////////////////////
// Global map where loaded configs put data under their individual keys.
// The key is: "${tool}/${tag}", where both tool and tag are lowercase.
// The variable is considered PRIVATE - do not use it outside of ConfigLoader.
config_loader_data = {}
class ConfigLoader {
constructor() {
this._data = null
this._loaded_key = null
}
// Loads config for specified tool and tag.
// NOTE: do not call this concurrently multiple times.
async load(tool, tag) {
console.assert(is_string(tool) && !is_empty(tool), tool)
console.assert(is_string(tag) && !is_empty(tag), tag)
tool = tool.toLowerCase()
tag = tag.toLowerCase()
const key = `${tool}/${tag}`;
if (this._loaded_key === key) {
return this._data
}
const path = `results/${tool}/${tag}.config.js`
config_loader_data[key] = undefined
let script = document.createElement("script")
const loading_done = new Promise((resolve, reject) => {
script.onload = resolve
script.onerror = reject
})
script.src = path
document.head.appendChild(script)
try {
await loading_done
} catch (e) {
Log.err("config", "Loading failed.\n"
+ "tool/tag: %o/%o\nkey: %o\npath: %o\nexception: %o", tool, tag, key, path, e)
return null
}
script.remove()
if (config_loader_data[key] === undefined) {
Log.err("config", "The loaded config script didn't assign anything to a dedicated global variable. The script probably has been generated incorrectly.\n"
+ "tool/tag: %o/%o\nkey: %o\npath: %o", tool, tag, key, path)
return null
}
Log.dbg("config", "Loaded. key: %o; path: %o", key, path)
this._loaded_key = key
this._data = config_loader_data[key]
delete config_loader_data[key]
return this._data
}
// Releases data. Note that The data still resides in memory if there
// are other references to it.
unload() {
if (this._loaded_key !== null) {
const key = this._loaded_key
this._data = null;
this._loaded_key = null;
Log.dbg("config", "Unloaded. key: %o", key)
}
}
get data() { return this._data }
}
/// ReportViewerState //////////////////////////////////////////////////
class StateManager {
constructor(state_spec) {
this._spec = state_spec
Object.freeze(state_spec)
this._state = new Map()
this._subscribers = new Map()
for (const [key, spec] of Object.entries(state_spec)) {
Log.dbg("state/init", "%s: %o", key, spec.initial)
this._state.set(key, spec.initial)
this._subscribers.set(key, new Set())
}
this._state_proxy = new Proxy(this._state, {
get: this._get_state_value.bind(this),
set: this._set_state_value.bind(this),
})
}
_get_state_value(state, key, proxy) {
console.assert(state.has(key), key)
return state.get(key)
}
_set_state_value(state, key, value, proxy) {
let previous_value = state.get(key)
if (deep_eq(value, previous_value))
return true
if (this._spec[key].validator) {
if (!this._spec[key].validator(value)) {
Log.err("state/set", "%s: invalid value: %o", key, value)
return false
}
}
if (value instanceof Object)
Object.freeze(value)
state.set(key, value)
Log.dbg("state/change", "%s: %o → %o", key, previous_value, value)
this._subscribers.get(key).forEach((callable) => callable(this._state_proxy, new Map([[key, previous_value]])))
return true
}
subscribe(keys, callable) {
if (callable === undefined) {
callable = keys
keys = this._subscribers.keys()
}
for (const key of keys) {
console.assert(this._subscribe
gitextract_v_hu2ggc/
├── .editorconfig
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ ├── comment-pr.yml
│ ├── lint-review.yml
│ ├── report.sh
│ ├── summary.sh
│ ├── sv-tests-ci.yml
│ ├── sv-tests-code-quality.yml
│ └── update_report.sh
├── .gitignore
├── .gitmodules
├── .style.yapf
├── AUTHORS
├── LICENSE
├── Makefile
├── README.md
├── conf/
│ ├── environment.yml
│ ├── feature-analyzer/
│ │ ├── keywords.yml
│ │ ├── operators.yml
│ │ └── tags.yml
│ ├── fusesoc-configs/
│ │ ├── ibex-sim.yml
│ │ ├── veer-eh1-sim.yml
│ │ └── veer-eh1-synth.yml
│ ├── generators/
│ │ ├── meta-path/
│ │ │ ├── basejump.json
│ │ │ ├── hdlconvertor.json
│ │ │ ├── hdlconvertor_std2012.json
│ │ │ ├── hdlconvertor_std2017.json
│ │ │ ├── projf-explore.json
│ │ │ ├── utd-systemverilog.json
│ │ │ ├── yosys-asicworld.json
│ │ │ ├── yosys-errors.json
│ │ │ ├── yosys-memories.json
│ │ │ ├── yosys-simple.json
│ │ │ ├── yosys-sva.json
│ │ │ └── yosys-svinterfaces.json
│ │ └── templates/
│ │ ├── assignment-sim.json
│ │ ├── assignment.json
│ │ ├── binary.json
│ │ ├── encapsulation-fail.json
│ │ ├── encapsulation-success.json
│ │ ├── equality.json
│ │ ├── force-assignments.json
│ │ ├── integers.json
│ │ ├── keywords.json
│ │ ├── logical-equiv.json
│ │ ├── logical-impl.json
│ │ ├── logical.json
│ │ ├── nets.json
│ │ ├── operators-sim.json
│ │ ├── sampled-functions-gclk.json
│ │ ├── sampled-functions.json
│ │ ├── simple-logical.json
│ │ ├── simple-operators-sim.json
│ │ ├── simple-unary.json
│ │ ├── trig-functions.json
│ │ ├── unary.json
│ │ ├── uniquecase.json
│ │ ├── uvm-classes_0.json
│ │ ├── uvm-classes_0.sv
│ │ ├── uvm-classes_1.json
│ │ ├── uvm-classes_1.sv
│ │ ├── uvm-classes_2.json
│ │ ├── uvm-classes_3.json
│ │ ├── uvm-classes_3.sv
│ │ ├── wildcard-const.json
│ │ └── wildcard.json
│ ├── lrm.conf
│ ├── meta-tags.conf
│ ├── report/
│ │ ├── code-template.html
│ │ ├── code.css
│ │ ├── details-view.css
│ │ ├── filter.js
│ │ ├── filter_ui_test.py
│ │ ├── footer.html
│ │ ├── history-graph-template.html
│ │ ├── log-template.html
│ │ ├── log.css
│ │ ├── navbar.html
│ │ ├── report-template.html
│ │ ├── report.css
│ │ └── report.js
│ ├── requirements.txt
│ └── runners/
│ └── libs.json
├── generators/
│ ├── ariane
│ ├── black-parrot
│ ├── easyUVM
│ ├── fusesoc
│ ├── fx68k
│ ├── ivtest
│ ├── path_generator
│ ├── rggen
│ ├── rsd
│ ├── scr1
│ ├── template_generator
│ ├── tnoc
│ ├── veer-config
│ └── yosys_hana
├── tests/
│ ├── README.md
│ ├── chapter-10/
│ │ ├── 10.3--proc-assignment--bad.sv
│ │ ├── 10.3.1--net-decl-assignment.sv
│ │ ├── 10.3.1--one-net.sv
│ │ ├── 10.3.2--cont-assignment.sv
│ │ ├── 10.3.3--cont-assignment-delay.sv
│ │ ├── 10.3.3--cont-assignment-net-delay.sv
│ │ ├── 10.4.1--blocking-assignment.sv
│ │ ├── 10.4.2--non-blocking-assignment.sv
│ │ ├── 10.6.1--assign-deassign.sv
│ │ └── 10.6.2--force-release.sv
│ ├── chapter-11/
│ │ ├── 11.10--string_bit_array-sim.sv
│ │ ├── 11.10--string_bit_array.sv
│ │ ├── 11.10.1--string_compare.sv
│ │ ├── 11.10.1--string_concat.sv
│ │ ├── 11.10.1--string_copy.sv
│ │ ├── 11.10.3--empty_string-sim.sv
│ │ ├── 11.10.3--empty_string.sv
│ │ ├── 11.11--min_max_avg_delay.sv
│ │ ├── 11.12--let_construct.sv
│ │ ├── 11.3.5--expr_short_circuit.sv
│ │ ├── 11.3.6--assign_in_exp-sim.sv
│ │ ├── 11.3.6--assign_in_exp.sv
│ │ ├── 11.3.6--assign_in_expr-sim.sv
│ │ ├── 11.3.6--assign_in_expr.sv
│ │ ├── 11.3.6--assign_in_expr_inv.sv
│ │ ├── 11.3.6--assign_in_expression-sim.sv
│ │ ├── 11.3.6--assign_in_expression.sv
│ │ ├── 11.3.6--assignment_in_expression-sim.sv
│ │ ├── 11.3.6--assignment_in_expression.sv
│ │ ├── 11.3.6--two_assign_in_expr-sim.sv
│ │ ├── 11.3.6--two_assign_in_expr.sv
│ │ ├── 11.4.1--assignment-sim.sv
│ │ ├── 11.4.10--arith-shift-assignment-signed.sv
│ │ ├── 11.4.10--arith-shift-assignment-unsigned.sv
│ │ ├── 11.4.10--arith-shift-signed.sv
│ │ ├── 11.4.10--arith-shift-unsigned.sv
│ │ ├── 11.4.11--cond_op-sim.sv
│ │ ├── 11.4.11--cond_op.sv
│ │ ├── 11.4.12--concat_op-bit_select.sv
│ │ ├── 11.4.12--concat_op-sim.sv
│ │ ├── 11.4.12--concat_op.sv
│ │ ├── 11.4.12.1--nested_repl_op-sim.sv
│ │ ├── 11.4.12.1--nested_repl_op.sv
│ │ ├── 11.4.12.1--repl_op-sim.sv
│ │ ├── 11.4.12.1--repl_op.sv
│ │ ├── 11.4.12.2--string_concat_op.sv
│ │ ├── 11.4.12.2--string_repl_op.sv
│ │ ├── 11.4.13--set_member-sim.sv
│ │ ├── 11.4.13--set_member.sv
│ │ ├── 11.4.14.1--stream_concat-sim.sv
│ │ ├── 11.4.14.1--stream_concat.sv
│ │ ├── 11.4.14.2--reorder_stream-sim.sv
│ │ ├── 11.4.14.2--reorder_stream.sv
│ │ ├── 11.4.14.2--reorder_stream_byte-sim.sv
│ │ ├── 11.4.14.2--reorder_stream_byte.sv
│ │ ├── 11.4.14.3--unpack_stream-sim.sv
│ │ ├── 11.4.14.3--unpack_stream.sv
│ │ ├── 11.4.14.3--unpack_stream_inv.sv
│ │ ├── 11.4.14.3--unpack_stream_pad-sim.sv
│ │ ├── 11.4.14.3--unpack_stream_pad.sv
│ │ ├── 11.4.14.4--dynamic_array_stream-sim.sv
│ │ ├── 11.4.14.4--dynamic_array_stream.sv
│ │ ├── 11.4.14.4--dynamic_array_stream_with.sv
│ │ ├── 11.4.2--unary_op_dec-sim.sv
│ │ ├── 11.4.2--unary_op_dec.sv
│ │ ├── 11.4.2--unary_op_inc-sim.sv
│ │ ├── 11.4.2--unary_op_inc.sv
│ │ ├── 11.4.5--equality-op.sv
│ │ ├── 11.5.1--idx_neg_part_select-sim.sv
│ │ ├── 11.5.1--idx_neg_part_select.sv
│ │ ├── 11.5.1--idx_pos_part_select-sim.sv
│ │ ├── 11.5.1--idx_pos_part_select.sv
│ │ ├── 11.5.1--idx_select-sim.sv
│ │ ├── 11.5.1--idx_select.sv
│ │ ├── 11.5.1--non_idx_part_select-sim.sv
│ │ ├── 11.5.1--non_idx_part_select.sv
│ │ ├── 11.5.2--array_addressing-sim.sv
│ │ ├── 11.5.2--array_addressing.sv
│ │ ├── 11.5.2--multi_dim_array_addressing-sim.sv
│ │ ├── 11.5.2--multi_dim_array_addressing.sv
│ │ ├── 11.7--signed_func-sim.sv
│ │ ├── 11.7--signed_func.sv
│ │ ├── 11.7--unsigned_func-sim.sv
│ │ ├── 11.7--unsigned_func.sv
│ │ ├── 11.9--tagged_union.sv
│ │ ├── 11.9--tagged_union_member_access-sim.sv
│ │ ├── 11.9--tagged_union_member_access.sv
│ │ ├── 11.9--tagged_union_member_access_inv.sv
│ │ └── simple/
│ │ ├── 11.4.11--simple_cond_op-sim.sv
│ │ ├── 11.4.12--simple_concat_op-sim.sv
│ │ ├── 11.4.12.1--simple_repl_op-sim.sv
│ │ ├── 11.4.13--simple_set_member-sim.sv
│ │ ├── 11.4.14.3--simple_unpack_stream-sim.sv
│ │ ├── 11.5.1--simple_idx_neg_part_select-sim.sv
│ │ ├── 11.5.1--simple_idx_pos_part_select-sim.sv
│ │ ├── 11.5.1--simple_idx_select-sim.sv
│ │ ├── 11.5.1--simple_non_idx_part_select-sim.sv
│ │ └── 11.5.2--simple_array_addressing-sim.sv
│ ├── chapter-12/
│ │ ├── 12.4--if.sv
│ │ ├── 12.4--if_else.sv
│ │ ├── 12.4.1--if_else_if.sv
│ │ ├── 12.4.2--priority_if.sv
│ │ ├── 12.4.2--unique0_if.sv
│ │ ├── 12.4.2--unique_if.sv
│ │ ├── 12.5--case.sv
│ │ ├── 12.5.1--casex.sv
│ │ ├── 12.5.1--casez.sv
│ │ ├── 12.5.2--case_const.sv
│ │ ├── 12.5.4--case_set.sv
│ │ ├── 12.6.1--case_pattern.sv
│ │ ├── 12.6.1--casex_pattern.sv
│ │ ├── 12.6.1--casez_pattern.sv
│ │ ├── 12.6.2--if_pattern.sv
│ │ ├── 12.6.3--conditional_pattern.sv
│ │ ├── 12.7.1--for.sv
│ │ ├── 12.7.2--repeat.sv
│ │ ├── 12.7.3--foreach-synth.sv
│ │ ├── 12.7.3--foreach.sv
│ │ ├── 12.7.4--while.sv
│ │ ├── 12.7.5--dowhile.sv
│ │ ├── 12.7.6--forever.sv
│ │ ├── 12.8--break.sv
│ │ ├── 12.8--continue.sv
│ │ ├── 12.8--return.sv
│ │ └── 12.8--return_val.sv
│ ├── chapter-13/
│ │ ├── 13.3--task-label.sv
│ │ ├── 13.3--task.sv
│ │ ├── 13.3.1--task-automatic.sv
│ │ ├── 13.3.1--task-static.sv
│ │ ├── 13.4--function-label.sv
│ │ ├── 13.4--function.sv
│ │ ├── 13.4.1--function-return-assignment.sv
│ │ ├── 13.4.1--function-return.sv
│ │ ├── 13.4.1--function-void-return.sv
│ │ ├── 13.4.2--function-automatic.sv
│ │ ├── 13.4.2--function-recursive.sv
│ │ ├── 13.4.2--function-static.sv
│ │ ├── 13.4.3--const-function.sv
│ │ ├── 13.4.4--fork-invalid.sv
│ │ └── 13.4.4--fork-valid.sv
│ ├── chapter-14/
│ │ ├── 14.3--clocking-block-signals-error.sv
│ │ ├── 14.3--clocking-block-signals.sv
│ │ ├── 14.3--clocking-block.sv
│ │ ├── 14.3--default-clocking-block.sv
│ │ └── 14.3--global-clocking-block.sv
│ ├── chapter-15/
│ │ ├── 15.4--mailbox-blocking.sv
│ │ ├── 15.4--mailbox-non-blocking.sv
│ │ ├── 15.5.1--named-event-trigger-blocking.sv
│ │ ├── 15.5.1--named-event-trigger-non-blocking.sv
│ │ └── 15.5.2--named-event-wait.sv
│ ├── chapter-16/
│ │ ├── 16.10--property-local-var-fail.sv
│ │ ├── 16.10--property-local-var-uvm.sv
│ │ ├── 16.10--property-local-var.sv
│ │ ├── 16.10--sequence-local-var-fail.sv
│ │ ├── 16.10--sequence-local-var-uvm.sv
│ │ ├── 16.10--sequence-local-var.sv
│ │ ├── 16.11--sequence-subroutine-uvm.sv
│ │ ├── 16.12--property-disable-iff.sv
│ │ ├── 16.12--property-disj.sv
│ │ ├── 16.12--property-iff.sv
│ │ ├── 16.12--property-interface-prec-uvm.sv
│ │ ├── 16.12--property-interface-uvm.sv
│ │ ├── 16.12--property-prec-uvm.sv
│ │ ├── 16.12--property-prec.sv
│ │ ├── 16.12--property-uvm.sv
│ │ ├── 16.12--property.sv
│ │ ├── 16.13--sequence-multiclock-uvm.sv
│ │ ├── 16.14--assume-property-uvm.sv
│ │ ├── 16.14--assume-property.sv
│ │ ├── 16.15--property-disable-iff-fail.sv
│ │ ├── 16.15--property-disable-iff.sv
│ │ ├── 16.15--property-iff-uvm.sv
│ │ ├── 16.17--expect-uvm.sv
│ │ ├── 16.17--expect.sv
│ │ ├── 16.2--assert-final-uvm.sv
│ │ ├── 16.2--assert-final.sv
│ │ ├── 16.2--assert-uvm.sv
│ │ ├── 16.2--assert.sv
│ │ ├── 16.2--assert0-uvm.sv
│ │ ├── 16.2--assert0.sv
│ │ ├── 16.2--assume-final.sv
│ │ ├── 16.2--assume-uvm.sv
│ │ ├── 16.2--assume.sv
│ │ ├── 16.2--assume0.sv
│ │ ├── 16.2--cover-final.sv
│ │ ├── 16.2--cover.sv
│ │ ├── 16.2--cover0.sv
│ │ ├── 16.7--sequence-and-range-uvm.sv
│ │ ├── 16.7--sequence-and-uvm.sv
│ │ ├── 16.7--sequence-intersect-uvm.sv
│ │ ├── 16.7--sequence-or-uvm.sv
│ │ ├── 16.7--sequence-throughout-uvm.sv
│ │ ├── 16.7--sequence-uvm.sv
│ │ ├── 16.7--sequence.sv
│ │ ├── 16.9--sequence-changed-uvm.sv
│ │ ├── 16.9--sequence-cons-repetition.sv
│ │ ├── 16.9--sequence-fell-uvm.sv
│ │ ├── 16.9--sequence-goto-repetition.sv
│ │ ├── 16.9--sequence-noncons-repetition.sv
│ │ ├── 16.9--sequence-past-uvm.sv
│ │ ├── 16.9--sequence-rose-uvm.sv
│ │ └── 16.9--sequence-stable-uvm.sv
│ ├── chapter-18/
│ │ ├── 18.10--dynamic-constraint-modification_0.sv
│ │ ├── 18.11--in-line-random-variable-control_0.sv
│ │ ├── 18.11--in-line-random-variable-control_1.sv
│ │ ├── 18.11.1--in-line-constraint-checker_0.sv
│ │ ├── 18.11.1--in-line-constraint-checker_1.sv
│ │ ├── 18.12--randomization-of-scope-variables_0.sv
│ │ ├── 18.12--randomization-of-scope-variables_1.sv
│ │ ├── 18.12.1--adding-constraints-to-scope-variables_0.sv
│ │ ├── 18.12.1--adding-constraints-to-scope-variables_1.sv
│ │ ├── 18.13.1--urandom_0.sv
│ │ ├── 18.13.1--urandom_1.sv
│ │ ├── 18.13.1--urandom_2.sv
│ │ ├── 18.13.1--urandom_3.sv
│ │ ├── 18.13.2--urandom_range_0.sv
│ │ ├── 18.13.2--urandom_range_1.sv
│ │ ├── 18.13.2--urandom_range_2.sv
│ │ ├── 18.13.2--urandom_range_3.sv
│ │ ├── 18.13.3--srandom_0.sv
│ │ ├── 18.13.4--get_randstate_0.sv
│ │ ├── 18.13.5--set_randstate_0.sv
│ │ ├── 18.14--random-stability_0.sv
│ │ ├── 18.14--random-stability_1.sv
│ │ ├── 18.14--random-stability_2.sv
│ │ ├── 18.14--random-stability_3.sv
│ │ ├── 18.14.2--thread-stability_0.sv
│ │ ├── 18.14.2--thread-stability_1.sv
│ │ ├── 18.14.3--object-stability_0.sv
│ │ ├── 18.14.3--object-stability_1.sv
│ │ ├── 18.15--manually-seeding-randomize_0.sv
│ │ ├── 18.15--manually-seeding-randomize_1.sv
│ │ ├── 18.16--random-weighted-case-randcase_0.sv
│ │ ├── 18.16--random-weighted-case-randcase_2.sv
│ │ ├── 18.17--random-sequence-generation-randsequence_0.sv
│ │ ├── 18.17--random-sequence-generation-randsequence_2.sv
│ │ ├── 18.17.1--random-production-weights_0.sv
│ │ ├── 18.17.2--if-else-production-statements_0.sv
│ │ ├── 18.17.2--if-else-production-statements_0_fail.sv
│ │ ├── 18.17.2--if-else-production-statements_2.sv
│ │ ├── 18.17.2--if-else-production-statements_2_fail.sv
│ │ ├── 18.17.3--case-production-statements_0.sv
│ │ ├── 18.17.3--case-production-statements_0_fail.sv
│ │ ├── 18.17.4--repeat-production-statements_0.sv
│ │ ├── 18.17.5--interleaving-productions-rand-join_0.sv
│ │ ├── 18.17.5--interleaving-productions-rand-join_2.sv
│ │ ├── 18.17.6--aborting-productions-break-and-return_0.sv
│ │ ├── 18.17.6--aborting-productions-break-and-return_2.sv
│ │ ├── 18.17.6--aborting-productions-break-and-return_2_fail.sv
│ │ ├── 18.17.7--value-passing-between-productions_0.sv
│ │ ├── 18.4.1--rand-modifier.sv
│ │ ├── 18.4.2--randc-modifier.sv
│ │ ├── 18.5--constraint-blocks_0.sv
│ │ ├── 18.5--constraint-blocks_1.sv
│ │ ├── 18.5.1--explicit-external-constraint_0.sv
│ │ ├── 18.5.1--explicit-external-constraint_1.sv
│ │ ├── 18.5.1--explicit-external-constraint_2.sv
│ │ ├── 18.5.1--implicit-external-constraint_0.sv
│ │ ├── 18.5.1--implicit-external-constraint_1.sv
│ │ ├── 18.5.1--implicit-external-constraint_2.sv
│ │ ├── 18.5.10--variable-ordering_0.sv
│ │ ├── 18.5.10--variable-ordering_1.sv
│ │ ├── 18.5.11--static-constraint-blocks_0.sv
│ │ ├── 18.5.11--static-constraint-blocks_1.sv
│ │ ├── 18.5.12--functions-in-constraint_0.sv
│ │ ├── 18.5.12--functions-in-constraint_1.sv
│ │ ├── 18.5.13--constraint-guards_0.sv
│ │ ├── 18.5.13--constraint-guards_1.sv
│ │ ├── 18.5.14--soft-constraints_0.sv
│ │ ├── 18.5.14--soft-constraints_1.sv
│ │ ├── 18.5.14--soft-constraints_2.sv
│ │ ├── 18.5.14.1--soft-constraint-priorities_0.sv
│ │ ├── 18.5.14.1--soft-constraint-priorities_1.sv
│ │ ├── 18.5.14.1--soft-constraint-priorities_2.sv
│ │ ├── 18.5.14.1--soft-constraint-priorities_3.sv
│ │ ├── 18.5.14.1--soft-constraint-priorities_4.sv
│ │ ├── 18.5.14.2--discarding-soft-constraints_0.sv
│ │ ├── 18.5.14.2--discarding-soft-constraints_1.sv
│ │ ├── 18.5.14.2--discarding-soft-constraints_2.sv
│ │ ├── 18.5.14.2--discarding-soft-constraints_3.sv
│ │ ├── 18.5.14.2--discarding-soft-constraints_5.sv
│ │ ├── 18.5.2--constraint-inheritance_0.sv
│ │ ├── 18.5.2--constraint-inheritance_1.sv
│ │ ├── 18.5.2--pure-constraint_0.sv
│ │ ├── 18.5.2--pure-constraint_1.sv
│ │ ├── 18.5.2--pure-constraint_2.sv
│ │ ├── 18.5.2--pure-constraint_3.sv
│ │ ├── 18.5.3--set-membership_0.sv
│ │ ├── 18.5.3--set-membership_1.sv
│ │ ├── 18.5.4--distribution_0.sv
│ │ ├── 18.5.4--distribution_1.sv
│ │ ├── 18.5.4--distribution_2.sv
│ │ ├── 18.5.5--uniqueness-constraints_0.sv
│ │ ├── 18.5.5--uniqueness-constraints_1.sv
│ │ ├── 18.5.6--implication_0.sv
│ │ ├── 18.5.6--implication_1.sv
│ │ ├── 18.5.7--if-else-constraints_0.sv
│ │ ├── 18.5.7--if-else-constraints_1.sv
│ │ ├── 18.5.7--if-else-constraints_2.sv
│ │ ├── 18.5.7--if-else-constraints_3.sv
│ │ ├── 18.5.7--if-else-constraints_4.sv
│ │ ├── 18.5.8.1--foreach-iterative-constraints_0.sv
│ │ ├── 18.5.8.1--foreach-iterative-constraints_1.sv
│ │ ├── 18.5.8.2--array-reduction-iterative-constraints_0.sv
│ │ ├── 18.5.8.2--array-reduction-iterative-constraints_1.sv
│ │ ├── 18.5.9--global-constraints_0.sv
│ │ ├── 18.5.9--global-constraints_1.sv
│ │ ├── 18.6.1--randomize-method_0.sv
│ │ ├── 18.6.2--post-randomize_method_0.sv
│ │ ├── 18.6.2--post-randomize_method_1.sv
│ │ ├── 18.6.2--pre-randomize-method_0.sv
│ │ ├── 18.6.2--pre-randomize-method_1.sv
│ │ ├── 18.6.3--behavior-of-randomization-methods_0.sv
│ │ ├── 18.6.3--behavior-of-randomization-methods_1.sv
│ │ ├── 18.6.3--behavior-of-randomization-methods_2.sv
│ │ ├── 18.6.3--behavior-of-randomization-methods_3.sv
│ │ ├── 18.6.3--behavior-of-randomization-methods_4.sv
│ │ ├── 18.6.3--behavior-of-randomization-methods_5.sv
│ │ ├── 18.7--in-line-constraints--randomize_0.sv
│ │ ├── 18.7--in-line-constraints--randomize_1.sv
│ │ ├── 18.7--in-line-constraints--randomize_2.sv
│ │ ├── 18.7--in-line-constraints--randomize_3.sv
│ │ ├── 18.7--in-line-constraints--randomize_4.sv
│ │ ├── 18.7--in-line-constraints--randomize_5.sv
│ │ ├── 18.7--in-line-constraints--randomize_6.sv
│ │ ├── 18.7.1--local-scope-resolution_0.sv
│ │ ├── 18.7.1--local-scope-resolution_1.sv
│ │ ├── 18.8--disabling-random-variables-with-rand_mode_0.sv
│ │ ├── 18.8--disabling-random-variables-with-rand_mode_1.sv
│ │ ├── 18.8--disabling-random-variables-with-rand_mode_2.sv
│ │ ├── 18.8--disabling-random-variables-with-rand_mode_3.sv
│ │ ├── 18.8--disabling-random-variables-with-rand_mode_4.sv
│ │ ├── 18.8--disabling-random-variables-with-rand_mode_5.sv
│ │ ├── 18.9--controlling-constraints-with-constraint_mode_0.sv
│ │ ├── 18.9--controlling-constraints-with-constraint_mode_1.sv
│ │ └── 18.9--controlling-constraints-with-constraint_mode_2.sv
│ ├── chapter-20/
│ │ ├── 20.10--error.sv
│ │ ├── 20.10--fatal.sv
│ │ ├── 20.10--info.sv
│ │ ├── 20.10--warning.sv
│ │ ├── 20.14--coverage.sv
│ │ ├── 20.15--dist_chi_square.sv
│ │ ├── 20.15--dist_erlang.sv
│ │ ├── 20.15--dist_exponential.sv
│ │ ├── 20.15--dist_normal.sv
│ │ ├── 20.15--dist_poisson.sv
│ │ ├── 20.15--dist_t.sv
│ │ ├── 20.15--dist_uniform.sv
│ │ ├── 20.15--random.sv
│ │ ├── 20.2--exit.sv
│ │ ├── 20.2--finish.sv
│ │ ├── 20.2--stop.sv
│ │ ├── 20.3--realtime.sv
│ │ ├── 20.3--stime.sv
│ │ ├── 20.3--time.sv
│ │ ├── 20.4--printtimescale-hier.sv
│ │ ├── 20.4--printtimescale.sv
│ │ ├── 20.4--timeformat.sv
│ │ ├── 20.5--itor.sv
│ │ ├── 20.5--real-bits-conv.sv
│ │ ├── 20.5--rtoi.sv
│ │ ├── 20.5--shortreal-bits-conv.sv
│ │ ├── 20.6--bits.sv
│ │ ├── 20.6--bits_type.sv
│ │ ├── 20.6--isunbounded.sv
│ │ ├── 20.6--typename.sv
│ │ ├── 20.6--typename_type.sv
│ │ ├── 20.7--array-queries-multi-dim.sv
│ │ ├── 20.7--array-queries.sv
│ │ ├── 20.8--atan2.sv
│ │ ├── 20.8--ceil.sv
│ │ ├── 20.8--clog2.sv
│ │ ├── 20.8--exp.sv
│ │ ├── 20.8--floor.sv
│ │ ├── 20.8--hypot.sv
│ │ ├── 20.8--ln.sv
│ │ ├── 20.8--log10.sv
│ │ ├── 20.8--pow.sv
│ │ ├── 20.8--sqrt.sv
│ │ ├── 20.9--countbits.sv
│ │ ├── 20.9--isunknown.sv
│ │ ├── 20.9--onehot.sv
│ │ └── 20.9--onehot0.sv
│ ├── chapter-21/
│ │ ├── 21.2--display-boh.sv
│ │ ├── 21.2--display.sv
│ │ ├── 21.2--monitor.sv
│ │ ├── 21.2--strobe.sv
│ │ ├── 21.2--write-boh.sv
│ │ ├── 21.2--write.sv
│ │ ├── 21.3--fdisplay-boh.sv
│ │ ├── 21.3--fdisplay.sv
│ │ ├── 21.3--feof.sv
│ │ ├── 21.3--ferror.sv
│ │ ├── 21.3--fflush.sv
│ │ ├── 21.3--fgetc.sv
│ │ ├── 21.3--fgets.sv
│ │ ├── 21.3--file.sv
│ │ ├── 21.3--fmonitor.sv
│ │ ├── 21.3--fpos.sv
│ │ ├── 21.3--fread.sv
│ │ ├── 21.3--fscanf.sv
│ │ ├── 21.3--fstrobe.sv
│ │ ├── 21.3--fwrite-boh.sv
│ │ ├── 21.3--fwrite.sv
│ │ ├── 21.3--sscanf.sv
│ │ ├── 21.3--ungetc.sv
│ │ ├── 21.4--readmemb.sv
│ │ ├── 21.4--readmemh.sv
│ │ ├── 21.6--test.sv
│ │ ├── 21.6--value.sv
│ │ ├── 21.7--dumpfile.sv
│ │ └── 21.7--dumpports.sv
│ ├── chapter-22/
│ │ ├── 22.10--celldefine-basic-1.sv
│ │ ├── 22.10--celldefine-basic-2.sv
│ │ ├── 22.11--pragma-basic.sv
│ │ ├── 22.11--pragma-complex.sv
│ │ ├── 22.11--pragma-invalid.sv
│ │ ├── 22.11--pragma-nested.sv
│ │ ├── 22.11--pragma-number-multi.sv
│ │ ├── 22.11--pragma-number.sv
│ │ ├── 22.12--line-basic.sv
│ │ ├── 22.12--line-complex.sv
│ │ ├── 22.12--line-illegal-1.sv
│ │ ├── 22.12--line-illegal-2.sv
│ │ ├── 22.12--line-illegal-3.sv
│ │ ├── 22.12--line-illegal-4.sv
│ │ ├── 22.12--line-illegal-5.sv
│ │ ├── 22.3--resetall_basic.sv
│ │ ├── 22.3--resetall_illegal.sv
│ │ ├── 22.3--resetall_multiple.sv
│ │ ├── 22.4--check_included_definitions.sv
│ │ ├── 22.4--include_basic.sv
│ │ ├── 22.4--include_basic_rpath.sv
│ │ ├── 22.4--include_from_other_directory.sv
│ │ ├── 22.4--include_via_define.sv
│ │ ├── 22.4--include_with_comment.sv
│ │ ├── 22.5.1--define-expansion_1.sv
│ │ ├── 22.5.1--define-expansion_10.sv
│ │ ├── 22.5.1--define-expansion_11.sv
│ │ ├── 22.5.1--define-expansion_12.sv
│ │ ├── 22.5.1--define-expansion_13.sv
│ │ ├── 22.5.1--define-expansion_14.sv
│ │ ├── 22.5.1--define-expansion_15.sv
│ │ ├── 22.5.1--define-expansion_16.sv
│ │ ├── 22.5.1--define-expansion_17.sv
│ │ ├── 22.5.1--define-expansion_18.sv
│ │ ├── 22.5.1--define-expansion_19.sv
│ │ ├── 22.5.1--define-expansion_2.sv
│ │ ├── 22.5.1--define-expansion_20.sv
│ │ ├── 22.5.1--define-expansion_21.sv
│ │ ├── 22.5.1--define-expansion_22.sv
│ │ ├── 22.5.1--define-expansion_23.sv
│ │ ├── 22.5.1--define-expansion_24.sv
│ │ ├── 22.5.1--define-expansion_25.sv
│ │ ├── 22.5.1--define-expansion_26.sv
│ │ ├── 22.5.1--define-expansion_3.sv
│ │ ├── 22.5.1--define-expansion_4.sv
│ │ ├── 22.5.1--define-expansion_5.sv
│ │ ├── 22.5.1--define-expansion_6.sv
│ │ ├── 22.5.1--define-expansion_7.sv
│ │ ├── 22.5.1--define-expansion_8.sv
│ │ ├── 22.5.1--define-expansion_9.sv
│ │ ├── 22.5.1--define.sv
│ │ ├── 22.5.1--define_and_resetall.sv
│ │ ├── 22.5.1--include-define-expansion.sv
│ │ ├── 22.5.2--undef-basic.sv
│ │ ├── 22.5.2--undef-nonexisting.sv
│ │ ├── 22.5.3--undefineall-and-redefine.sv
│ │ ├── 22.5.3--undefineall-basic.sv
│ │ ├── 22.6--ifdef-behavioral.sv
│ │ ├── 22.6--ifdef-chained-nested.sv
│ │ ├── 22.6--ifdef-nested.sv
│ │ ├── 22.7--timescale-basic-1.sv
│ │ ├── 22.7--timescale-basic-2.sv
│ │ ├── 22.7--timescale-basic-3.sv
│ │ ├── 22.7--timescale-basic-4.sv
│ │ ├── 22.7--timescale-module.sv
│ │ ├── 22.7--timescale-reset.sv
│ │ ├── 22.8--default_nettype-redefinition.sv
│ │ ├── 22.8--default_nettype.sv
│ │ ├── 22.9--unconnected_drive-basic-2.sv
│ │ ├── 22.9--unconnected_drive-basic.sv
│ │ ├── 22.9--unconnected_drive-invalid-1.sv
│ │ ├── 22.9--unconnected_drive-invalid-2.sv
│ │ ├── 22.9--unconnected_drive-invalid-3.sv
│ │ ├── dummy_include.sv
│ │ └── include_directory/
│ │ └── defs.sv
│ ├── chapter-23/
│ │ ├── 23.2--macromodule-definition.sv
│ │ ├── 23.2--module-definition.sv
│ │ └── 23.2--module-label.sv
│ ├── chapter-24/
│ │ └── 24.3--program.sv
│ ├── chapter-25/
│ │ └── 25.3-interface.sv
│ ├── chapter-26/
│ │ ├── 26.2--package-decl.sv
│ │ └── 26.3--package-ref.sv
│ ├── chapter-5/
│ │ ├── 5.10-structure-arrays-illegal.sv
│ │ ├── 5.10-structure-arrays.sv
│ │ ├── 5.10-structure-replication.sv
│ │ ├── 5.10-structures.sv
│ │ ├── 5.11-arrays-key-index.sv
│ │ ├── 5.11-arrays-replication.sv
│ │ ├── 5.11-arrays.sv
│ │ ├── 5.12-attributes-case.sv
│ │ ├── 5.12-attributes-conditional.sv
│ │ ├── 5.12-attributes-module.sv
│ │ ├── 5.12-attributes-operator.sv
│ │ ├── 5.12-attributes-variable.sv
│ │ ├── 5.13-builtin-methods-strings.sv
│ │ ├── 5.4--coments.sv
│ │ ├── 5.6--identifiers.sv
│ │ ├── 5.6--wrong-identifiers.sv
│ │ ├── 5.6.1--escaped-identifiers.sv
│ │ ├── 5.6.1--nonescaped-access.sv
│ │ ├── 5.6.3--system-functions.sv
│ │ ├── 5.6.4--compiler-directives-begin-keywords.sv
│ │ ├── 5.6.4--compiler-directives-celldefine.sv
│ │ ├── 5.6.4--compiler-directives-debug-line.sv
│ │ ├── 5.6.4--compiler-directives-debug.sv
│ │ ├── 5.6.4--compiler-directives-default-nettype.sv
│ │ ├── 5.6.4--compiler-directives-define.sv
│ │ ├── 5.6.4--compiler-directives-include.sv
│ │ ├── 5.6.4--compiler-directives-pragma.sv
│ │ ├── 5.6.4--compiler-directives-preprocessor-macro_0.sv
│ │ ├── 5.6.4--compiler-directives-preprocessor-macro_1.sv
│ │ ├── 5.6.4--compiler-directives-resetall.sv
│ │ ├── 5.6.4--compiler-directives-timescale.sv
│ │ ├── 5.6.4--compiler-directives-unconnected-drive.sv
│ │ ├── 5.7.1--integers-left-padding-bit.sv
│ │ ├── 5.7.1--integers-left-padding.sv
│ │ ├── 5.7.1--integers-signed-illegal.sv
│ │ ├── 5.7.1--integers-signed.sv
│ │ ├── 5.7.1--integers-sized.sv
│ │ ├── 5.7.1--integers-token.sv
│ │ ├── 5.7.1--integers-underscores.sv
│ │ ├── 5.7.1--integers-unsized-illegal.sv
│ │ ├── 5.7.1--integers-unsized.sv
│ │ ├── 5.7.2-real-constants-illegal.sv
│ │ ├── 5.7.2-real-constants.sv
│ │ ├── 5.7.2-real-token.sv
│ │ ├── 5.8-time-literals.sv
│ │ ├── 5.9-string-assignment.sv
│ │ ├── 5.9-string-basics.sv
│ │ ├── 5.9-string-broken-line.sv
│ │ ├── 5.9-string-word-assignment.sv
│ │ └── 5.9.1-string-special-chars.sv
│ ├── chapter-6/
│ │ ├── 6.10--implicit_continuous_assignment.sv
│ │ ├── 6.10--implicit_port.sv
│ │ ├── 6.10--implicit_port_connection.sv
│ │ ├── 6.12--real.sv
│ │ ├── 6.12--real_bit_select.sv
│ │ ├── 6.12--real_bit_select_idx.sv
│ │ ├── 6.12--real_edge.sv
│ │ ├── 6.12--realtime.sv
│ │ ├── 6.12--shortreal.sv
│ │ ├── 6.13--void.sv
│ │ ├── 6.14--chandle.sv
│ │ ├── 6.16--string.sv
│ │ ├── 6.16.1--string_len.sv
│ │ ├── 6.16.10--string_atoreal.sv
│ │ ├── 6.16.11--string_itoa.sv
│ │ ├── 6.16.12--string_hextoa.sv
│ │ ├── 6.16.13--string_octtoa.sv
│ │ ├── 6.16.14--string_bintoa.sv
│ │ ├── 6.16.15--string_realtoa.sv
│ │ ├── 6.16.2--string_putc.sv
│ │ ├── 6.16.3--string_getc.sv
│ │ ├── 6.16.4--string_toupper.sv
│ │ ├── 6.16.5--string_tolower.sv
│ │ ├── 6.16.6--string_compare.sv
│ │ ├── 6.16.7--string_icompare.sv
│ │ ├── 6.16.8--string_substr.sv
│ │ ├── 6.16.9--string_atobin.sv
│ │ ├── 6.16.9--string_atohex.sv
│ │ ├── 6.16.9--string_atoi.sv
│ │ ├── 6.16.9--string_atooct.sv
│ │ ├── 6.17--event.sv
│ │ ├── 6.18--typedef.sv
│ │ ├── 6.19--enum_anon.sv
│ │ ├── 6.19--enum_value_inv.sv
│ │ ├── 6.19--enum_xx.sv
│ │ ├── 6.19--enum_xx_inv.sv
│ │ ├── 6.19--enum_xx_inv_order.sv
│ │ ├── 6.19.1--enum_typedef.sv
│ │ ├── 6.19.2--enum_sequence.sv
│ │ ├── 6.19.2--enum_sequence_range.sv
│ │ ├── 6.19.3--enum_type_checking.sv
│ │ ├── 6.19.3--enum_type_checking_inv.sv
│ │ ├── 6.19.4--enum_numerical_expr.sv
│ │ ├── 6.19.4--enum_numerical_expr_cast.sv
│ │ ├── 6.19.4--enum_numerical_expr_no_cast.sv
│ │ ├── 6.19.5.1--enum_first.sv
│ │ ├── 6.19.5.2--enum_last.sv
│ │ ├── 6.19.5.3--enum_next.sv
│ │ ├── 6.19.5.4--enum_prev.sv
│ │ ├── 6.19.5.5--enum_num.sv
│ │ ├── 6.19.5.6--enum_name.sv
│ │ ├── 6.20.2--parameter.sv
│ │ ├── 6.20.2--parameter_aggregate.sv
│ │ ├── 6.20.2--parameter_dep.sv
│ │ ├── 6.20.2--parameter_port_list.sv
│ │ ├── 6.20.2--parameter_range.sv
│ │ ├── 6.20.2--parameter_real.sv
│ │ ├── 6.20.3--parameter_type.sv
│ │ ├── 6.20.4--localparam.sv
│ │ ├── 6.20.4--localparam_int.sv
│ │ ├── 6.20.4--localparam_logic.sv
│ │ ├── 6.20.4--localparam_string.sv
│ │ ├── 6.20.4--localparam_unsigned_int.sv
│ │ ├── 6.20.5--specparam.sv
│ │ ├── 6.20.5--specparam_inv.sv
│ │ ├── 6.20.6--const.sv
│ │ ├── 6.23--localparam_type_decl.sv
│ │ ├── 6.23--type_op.sv
│ │ ├── 6.23--type_op_compare.sv
│ │ ├── 6.24.1--cast_op.sv
│ │ ├── 6.24.2--cast_fn.sv
│ │ ├── 6.24.2--cast_task.sv
│ │ ├── 6.24.3--bitstream_cast.sv
│ │ ├── 6.5--variable_assignment.sv
│ │ ├── 6.5--variable_mixed_assignments.sv
│ │ ├── 6.5--variable_multiple_assignments.sv
│ │ ├── 6.5--variable_redeclare.sv
│ │ ├── 6.6.7--nettype.sv
│ │ ├── 6.6.7--nettype_resolution_fn.sv
│ │ ├── 6.6.8--interconnect.sv
│ │ ├── 6.9.1--logic_vector.sv
│ │ ├── 6.9.2--vector_scalared.sv
│ │ ├── 6.9.2--vector_vectored.sv
│ │ └── 6.9.2--vector_vectored_inv.sv
│ ├── chapter-7/
│ │ ├── arrays/
│ │ │ ├── associative/
│ │ │ │ ├── alloc.sv
│ │ │ │ ├── arguments.sv
│ │ │ │ ├── assignment.sv
│ │ │ │ ├── class.sv
│ │ │ │ ├── integral.sv
│ │ │ │ ├── literals.sv
│ │ │ │ ├── locator-methods/
│ │ │ │ │ ├── find-first-index.sv
│ │ │ │ │ ├── find-first.sv
│ │ │ │ │ ├── find-index.sv
│ │ │ │ │ ├── find-last-index.sv
│ │ │ │ │ ├── find-last.sv
│ │ │ │ │ ├── find.sv
│ │ │ │ │ ├── max.sv
│ │ │ │ │ ├── min.sv
│ │ │ │ │ ├── unique-index.sv
│ │ │ │ │ └── unique.sv
│ │ │ │ ├── methods/
│ │ │ │ │ ├── delete.sv
│ │ │ │ │ ├── exists.sv
│ │ │ │ │ ├── first.sv
│ │ │ │ │ ├── last.sv
│ │ │ │ │ ├── next.sv
│ │ │ │ │ ├── num.sv
│ │ │ │ │ ├── prev.sv
│ │ │ │ │ ├── size.sv
│ │ │ │ │ └── traversal.sv
│ │ │ │ ├── nonexistent.sv
│ │ │ │ ├── other.sv
│ │ │ │ ├── string.sv
│ │ │ │ └── wildcard.sv
│ │ │ ├── dynamic/
│ │ │ │ ├── basic.sv
│ │ │ │ ├── op-delete.sv
│ │ │ │ ├── op-new.sv
│ │ │ │ └── op-size.sv
│ │ │ ├── multidimensional/
│ │ │ │ ├── basic.sv
│ │ │ │ ├── copy.sv
│ │ │ │ ├── multi.sv
│ │ │ │ └── subarrays.sv
│ │ │ ├── packed/
│ │ │ │ ├── basic.sv
│ │ │ │ ├── equality.sv
│ │ │ │ ├── onebit.sv
│ │ │ │ ├── operations.sv
│ │ │ │ ├── querying-functions/
│ │ │ │ │ ├── dimensions.sv
│ │ │ │ │ ├── high.sv
│ │ │ │ │ ├── increment.sv
│ │ │ │ │ ├── left.sv
│ │ │ │ │ ├── low.sv
│ │ │ │ │ ├── right.sv
│ │ │ │ │ ├── size.sv
│ │ │ │ │ └── unpacked-dimensions.sv
│ │ │ │ ├── slice-equality.sv
│ │ │ │ ├── slice.sv
│ │ │ │ ├── treat-as-integer.sv
│ │ │ │ ├── variable-slice-zero.sv
│ │ │ │ └── variable-slice.sv
│ │ │ └── unpacked/
│ │ │ ├── assignments.sv
│ │ │ ├── basic.sv
│ │ │ ├── equality.sv
│ │ │ ├── index.sv
│ │ │ ├── onebit.sv
│ │ │ ├── operations.sv
│ │ │ ├── ordering-methods/
│ │ │ │ ├── reverse.sv
│ │ │ │ ├── rsort.sv
│ │ │ │ ├── shuffle.sv
│ │ │ │ └── sort.sv
│ │ │ ├── reduction-methods/
│ │ │ │ ├── and.sv
│ │ │ │ ├── or.sv
│ │ │ │ ├── product.sv
│ │ │ │ ├── sum.sv
│ │ │ │ └── xor.sv
│ │ │ ├── slice-equality.sv
│ │ │ ├── slice.sv
│ │ │ ├── subroutines.sv
│ │ │ └── variable-slice.sv
│ │ ├── memories/
│ │ │ ├── basic.sv
│ │ │ └── read-write.sv
│ │ ├── queues/
│ │ │ ├── basic.sv
│ │ │ ├── bounded.sv
│ │ │ ├── delete.sv
│ │ │ ├── delete_assign.sv
│ │ │ ├── insert.sv
│ │ │ ├── insert_assign.sv
│ │ │ ├── max-size.sv
│ │ │ ├── persistence.sv
│ │ │ ├── pop_back.sv
│ │ │ ├── pop_back_assing.sv
│ │ │ ├── pop_front.sv
│ │ │ ├── pop_front_assign.sv
│ │ │ ├── push_back.sv
│ │ │ ├── push_back_assign.sv
│ │ │ ├── push_front.sv
│ │ │ ├── push_front_assign.sv
│ │ │ ├── size.sv
│ │ │ └── slice.sv
│ │ ├── structures/
│ │ │ ├── packed/
│ │ │ │ ├── basic.sv
│ │ │ │ ├── default-value.sv
│ │ │ │ ├── signed.sv
│ │ │ │ └── unsigned.sv
│ │ │ └── unpacked/
│ │ │ ├── basic.sv
│ │ │ └── default-value.sv
│ │ └── unions/
│ │ ├── packed/
│ │ │ └── basic.sv
│ │ ├── tagged/
│ │ │ ├── basic.sv
│ │ │ └── packed.sv
│ │ └── unpacked/
│ │ └── basic.sv
│ ├── chapter-8/
│ │ ├── 8.10--static_methods.sv
│ │ ├── 8.11--this.sv
│ │ ├── 8.12--assignment.sv
│ │ ├── 8.12--shallow_copy.sv
│ │ ├── 8.13--inheritance.sv
│ │ ├── 8.14--override_member.sv
│ │ ├── 8.15--super-default-new.sv
│ │ ├── 8.15--super.sv
│ │ ├── 8.16--cast_func.sv
│ │ ├── 8.17--constructor_const_arg.sv
│ │ ├── 8.18--var_local.sv
│ │ ├── 8.18--var_protected.sv
│ │ ├── 8.19--global_constant.sv
│ │ ├── 8.19--instance_constant.sv
│ │ ├── 8.20--virtual_method.sv
│ │ ├── 8.21--abstract_class.sv
│ │ ├── 8.21--abstract_class_inst.sv
│ │ ├── 8.22--dynamic_method_lookup.sv
│ │ ├── 8.23--scope_resolution.sv
│ │ ├── 8.24--out_of_block_methods.sv
│ │ ├── 8.25--parametrized_class_extend.sv
│ │ ├── 8.25.1--parametrized_class_invalid_scope_resolution.sv
│ │ ├── 8.25.1--parametrized_class_scope_resolution.sv
│ │ ├── 8.26.2--implements.sv
│ │ ├── 8.26.2--implements_extends.sv
│ │ ├── 8.26.2--implements_multiple.sv
│ │ ├── 8.26.3--type_access_extends.sv
│ │ ├── 8.26.3--type_access_implements.sv
│ │ ├── 8.26.3--type_access_implements_invalid.sv
│ │ ├── 8.26.4--illegal_forward_def_implements.sv
│ │ ├── 8.26.4--illegal_implements_parameter.sv
│ │ ├── 8.26.5--cast_between_interface_classes.sv
│ │ ├── 8.26.5--implemented_class_handle.sv
│ │ ├── 8.26.5--invalid_interface_instantiation.sv
│ │ ├── 8.26.6.1--name_conflict_resolved.sv
│ │ ├── 8.26.6.1--name_conflict_unresolved.sv
│ │ ├── 8.26.6.2--parameter_type_conflict.sv
│ │ ├── 8.26.6.2--parameter_type_conflict_unresolved.sv
│ │ ├── 8.26.6.3--diamond_relationship.sv
│ │ ├── 8.26.6.3--diamond_relationship_parametrized.sv
│ │ ├── 8.26.7--partial_implementation.sv
│ │ ├── 8.27--forward_declaration.sv
│ │ ├── 8.4--instantiation.sv
│ │ ├── 8.5--parameters.sv
│ │ ├── 8.5--properties.sv
│ │ ├── 8.5--properties_enum.sv
│ │ ├── 8.6--methods.sv
│ │ ├── 8.7--constructor.sv
│ │ ├── 8.7--constructor_param.sv
│ │ ├── 8.7--constructor_super.sv
│ │ ├── 8.8--typed_constructor.sv
│ │ ├── 8.8--typed_constructor_param.sv
│ │ └── 8.9--static_properties.sv
│ ├── chapter-9/
│ │ ├── 9.2.1--initial.sv
│ │ ├── 9.2.2.1--always.sv
│ │ ├── 9.2.2.2--always_comb.sv
│ │ ├── 9.2.2.3--always_latch.sv
│ │ ├── 9.2.2.4--always_ff.sv
│ │ ├── 9.2.3--final.sv
│ │ ├── 9.3.1--sequential_block.sv
│ │ ├── 9.3.2--parallel_block_join.sv
│ │ ├── 9.3.2--parallel_block_join_any.sv
│ │ ├── 9.3.2--parallel_block_join_none.sv
│ │ ├── 9.3.3--block_start_finish.sv
│ │ ├── 9.3.3--event.sv
│ │ ├── 9.3.3--fork_return.sv
│ │ ├── 9.3.4--block_names_par.sv
│ │ ├── 9.3.4--block_names_seq.sv
│ │ ├── 9.3.5--statement_labels_par.sv
│ │ ├── 9.3.5--statement_labels_seq.sv
│ │ ├── 9.4.1--delay_control-sim.sv
│ │ ├── 9.4.1--delay_control-two-blocks-sim.sv
│ │ ├── 9.4.1--delay_control.sv
│ │ ├── 9.4.2--event_control_edge.sv
│ │ ├── 9.4.2--event_control_negedge.sv
│ │ ├── 9.4.2--event_control_posedge.sv
│ │ ├── 9.4.2--event_control_sim.sv
│ │ ├── 9.4.2--event_control_sim_minimal.sv
│ │ ├── 9.4.2.1--event_comma_op.sv
│ │ ├── 9.4.2.1--event_or_op.sv
│ │ ├── 9.4.2.2--event_implicit.sv
│ │ ├── 9.4.2.3--event_conditional.sv
│ │ ├── 9.4.2.4--event_sequence.sv
│ │ ├── 9.4.3--event_sequence_controls.sv
│ │ ├── 9.4.5--event_blocking_assignment_delay.sv
│ │ ├── 9.4.5--event_nonblocking_assignment_delay.sv
│ │ ├── 9.4.5--event_nonblocking_assignment_event.sv
│ │ ├── 9.4.5--event_nonblocking_assignment_repeat.sv
│ │ ├── 9.4.5--event_nonblocking_assignment_repeat_int.sv
│ │ ├── 9.4.5--event_nonblocking_assignment_repeat_int_neg.sv
│ │ ├── 9.4.5--event_nonblocking_assignment_repeat_neg.sv
│ │ ├── 9.6.1--wait_fork.sv
│ │ ├── 9.6.2--disable.sv
│ │ ├── 9.6.2--disable_other.sv
│ │ ├── 9.6.3--disable_fork.sv
│ │ ├── 9.7--process_cls_await.sv
│ │ ├── 9.7--process_cls_kill.sv
│ │ ├── 9.7--process_cls_self.sv
│ │ └── 9.7--process_cls_suspend_resume.sv
│ ├── generic/
│ │ ├── class/
│ │ │ ├── class_test_0.sv
│ │ │ ├── class_test_1.sv
│ │ │ ├── class_test_11.sv
│ │ │ ├── class_test_12.sv
│ │ │ ├── class_test_13.sv
│ │ │ ├── class_test_17.sv
│ │ │ ├── class_test_18.sv
│ │ │ ├── class_test_19.sv
│ │ │ ├── class_test_21.sv
│ │ │ ├── class_test_25.sv
│ │ │ ├── class_test_26.sv
│ │ │ ├── class_test_27.sv
│ │ │ ├── class_test_28.sv
│ │ │ ├── class_test_29.sv
│ │ │ ├── class_test_30.sv
│ │ │ ├── class_test_4.sv
│ │ │ ├── class_test_48.sv
│ │ │ ├── class_test_49.sv
│ │ │ ├── class_test_51.sv
│ │ │ ├── class_test_52.sv
│ │ │ ├── class_test_53.sv
│ │ │ ├── class_test_54.sv
│ │ │ ├── class_test_55.sv
│ │ │ ├── class_test_56.sv
│ │ │ ├── class_test_57.sv
│ │ │ ├── class_test_58.sv
│ │ │ ├── class_test_59.sv
│ │ │ ├── class_test_6.sv
│ │ │ ├── class_test_60.sv
│ │ │ ├── class_test_61.sv
│ │ │ ├── class_test_62.sv
│ │ │ ├── class_test_63.sv
│ │ │ ├── class_test_64.sv
│ │ │ ├── class_test_65.sv
│ │ │ ├── class_test_66.sv
│ │ │ ├── class_test_67.sv
│ │ │ ├── class_test_68.sv
│ │ │ ├── class_test_69.sv
│ │ │ ├── class_test_7.sv
│ │ │ ├── class_test_8.sv
│ │ │ └── class_test_9.sv
│ │ ├── desc/
│ │ │ ├── desc_test_0.sv
│ │ │ ├── desc_test_1.sv
│ │ │ ├── desc_test_10.sv
│ │ │ ├── desc_test_15.sv
│ │ │ ├── desc_test_16.sv
│ │ │ ├── desc_test_17.sv
│ │ │ ├── desc_test_18.sv
│ │ │ ├── desc_test_2.sv
│ │ │ ├── desc_test_3.sv
│ │ │ ├── desc_test_4.sv
│ │ │ ├── desc_test_5.sv
│ │ │ ├── desc_test_6.sv
│ │ │ ├── desc_test_7.sv
│ │ │ ├── desc_test_8.sv
│ │ │ └── desc_test_9.sv
│ │ ├── empty/
│ │ │ ├── empty_test_0.sv
│ │ │ ├── empty_test_1.sv
│ │ │ ├── empty_test_2.sv
│ │ │ ├── empty_test_3.sv
│ │ │ ├── empty_test_4.sv
│ │ │ └── empty_test_5.sv
│ │ ├── iface/
│ │ │ ├── iface_class_test_0.sv
│ │ │ ├── iface_class_test_1.sv
│ │ │ ├── iface_class_test_10.sv
│ │ │ ├── iface_class_test_2.sv
│ │ │ └── iface_class_test_9.sv
│ │ ├── member/
│ │ │ ├── class_member_test_0.sv
│ │ │ ├── class_member_test_10.sv
│ │ │ ├── class_member_test_11.sv
│ │ │ ├── class_member_test_12.sv
│ │ │ ├── class_member_test_14.sv
│ │ │ ├── class_member_test_15.sv
│ │ │ ├── class_member_test_18.sv
│ │ │ ├── class_member_test_19.sv
│ │ │ ├── class_member_test_2.sv
│ │ │ ├── class_member_test_25.sv
│ │ │ ├── class_member_test_26.sv
│ │ │ ├── class_member_test_27.sv
│ │ │ ├── class_member_test_3.sv
│ │ │ ├── class_member_test_31.sv
│ │ │ ├── class_member_test_32.sv
│ │ │ ├── class_member_test_39.sv
│ │ │ ├── class_member_test_4.sv
│ │ │ ├── class_member_test_40.sv
│ │ │ ├── class_member_test_41.sv
│ │ │ ├── class_member_test_5.sv
│ │ │ ├── class_member_test_6.sv
│ │ │ ├── class_member_test_7.sv
│ │ │ ├── class_member_test_8.sv
│ │ │ └── class_member_test_9.sv
│ │ ├── number/
│ │ │ ├── number_test_0.sv
│ │ │ ├── number_test_1.sv
│ │ │ ├── number_test_10.sv
│ │ │ ├── number_test_11.sv
│ │ │ ├── number_test_12.sv
│ │ │ ├── number_test_13.sv
│ │ │ ├── number_test_14.sv
│ │ │ ├── number_test_15.sv
│ │ │ ├── number_test_16.sv
│ │ │ ├── number_test_2.sv
│ │ │ ├── number_test_24.sv
│ │ │ ├── number_test_25.sv
│ │ │ ├── number_test_26.sv
│ │ │ ├── number_test_27.sv
│ │ │ ├── number_test_28.sv
│ │ │ ├── number_test_29.sv
│ │ │ ├── number_test_3.sv
│ │ │ ├── number_test_30.sv
│ │ │ ├── number_test_31.sv
│ │ │ ├── number_test_32.sv
│ │ │ ├── number_test_33.sv
│ │ │ ├── number_test_34.sv
│ │ │ ├── number_test_35.sv
│ │ │ ├── number_test_36.sv
│ │ │ ├── number_test_4.sv
│ │ │ ├── number_test_42.sv
│ │ │ ├── number_test_43.sv
│ │ │ ├── number_test_44.sv
│ │ │ ├── number_test_45.sv
│ │ │ ├── number_test_46.sv
│ │ │ ├── number_test_47.sv
│ │ │ ├── number_test_48.sv
│ │ │ ├── number_test_49.sv
│ │ │ ├── number_test_5.sv
│ │ │ ├── number_test_50.sv
│ │ │ ├── number_test_51.sv
│ │ │ ├── number_test_52.sv
│ │ │ ├── number_test_53.sv
│ │ │ ├── number_test_59.sv
│ │ │ ├── number_test_6.sv
│ │ │ ├── number_test_60.sv
│ │ │ ├── number_test_61.sv
│ │ │ ├── number_test_62.sv
│ │ │ ├── number_test_64.sv
│ │ │ ├── number_test_65.sv
│ │ │ ├── number_test_66.sv
│ │ │ ├── number_test_67.sv
│ │ │ ├── number_test_68.sv
│ │ │ ├── number_test_69.sv
│ │ │ ├── number_test_7.sv
│ │ │ ├── number_test_70.sv
│ │ │ ├── number_test_71.sv
│ │ │ ├── number_test_72.sv
│ │ │ ├── number_test_8.sv
│ │ │ └── number_test_9.sv
│ │ ├── preproc/
│ │ │ ├── preproc_test_0.sv
│ │ │ ├── preproc_test_2.sv
│ │ │ ├── preproc_test_2.svh
│ │ │ ├── preproc_test_4.sv
│ │ │ ├── preproc_test_5.sv
│ │ │ ├── preproc_test_6.sv
│ │ │ ├── preproc_test_7.sv
│ │ │ └── preproc_test_8.sv
│ │ ├── struct/
│ │ │ └── struct_test_0.sv
│ │ ├── typedef/
│ │ │ ├── typedef_test_0.sv
│ │ │ ├── typedef_test_1.sv
│ │ │ ├── typedef_test_10.sv
│ │ │ ├── typedef_test_11.sv
│ │ │ ├── typedef_test_12.sv
│ │ │ ├── typedef_test_13.sv
│ │ │ ├── typedef_test_14.sv
│ │ │ ├── typedef_test_16.sv
│ │ │ ├── typedef_test_18.sv
│ │ │ ├── typedef_test_19.sv
│ │ │ ├── typedef_test_2.sv
│ │ │ ├── typedef_test_20.sv
│ │ │ ├── typedef_test_21.sv
│ │ │ ├── typedef_test_22.sv
│ │ │ ├── typedef_test_23.sv
│ │ │ ├── typedef_test_24.sv
│ │ │ ├── typedef_test_25.sv
│ │ │ ├── typedef_test_25__bad.sv
│ │ │ ├── typedef_test_26.sv
│ │ │ ├── typedef_test_27.sv
│ │ │ ├── typedef_test_28__bad.sv
│ │ │ ├── typedef_test_3.sv
│ │ │ ├── typedef_test_4.sv
│ │ │ ├── typedef_test_5.sv
│ │ │ ├── typedef_test_6.sv
│ │ │ ├── typedef_test_7.sv
│ │ │ ├── typedef_test_8.sv
│ │ │ ├── typedef_test_8__bad.sv
│ │ │ └── typedef_test_9.sv
│ │ └── union/
│ │ └── union_test_0.sv
│ ├── sanity.sv
│ ├── testbenches/
│ │ ├── uvm_agent_active.sv
│ │ ├── uvm_agent_env.sv
│ │ ├── uvm_agent_passive.sv
│ │ ├── uvm_driver_sequencer_env.sv
│ │ ├── uvm_monitor_env.sv
│ │ ├── uvm_resource_db_read_by_name.sv
│ │ ├── uvm_scoreboard_env.sv
│ │ ├── uvm_scoreboard_monitor_agent_env.sv
│ │ ├── uvm_scoreboard_monitor_env.sv
│ │ ├── uvm_sequence.sv
│ │ └── uvm_test_run_test.sv
│ └── uvm/
│ └── uvm_files.sv
└── tools/
├── BaseRunner.py
├── check-runners
├── feature-analyzer
├── history-graph
├── logparser.py
├── report_analyzer.py
├── runner
├── runners/
│ ├── Icarus.py
│ ├── Odin.py
│ ├── Slang.py
│ ├── Slang_parse.py
│ ├── Surelog.py
│ ├── Sv2v_zachjs.py
│ ├── SynligYosys.py
│ ├── Verible.py
│ ├── VeribleExtractor.py
│ ├── Verilator.py
│ ├── Yosys.py
│ ├── circt_verilog.py
│ ├── moore.py
│ ├── moore_parse.py
│ ├── sv_parser.py
│ ├── tree_sitter_systemverilog.py
│ ├── tree_sitter_verilog.py
│ └── yosys_slang.py
├── runners.mk
└── sv-report
SYMBOL INDEX (166 symbols across 24 files)
FILE: conf/report/filter.js
constant HEADER_COLUMNS_COUNT (line 3) | const HEADER_COLUMNS_COUNT = 2
class CoverageFilterEntriesController (line 51) | class CoverageFilterEntriesController {
method constructor (line 52) | constructor(state_manager, element) {
method _select_option (line 76) | static _select_option(select_element, option_value) {
method _state_changed (line 88) | _state_changed(state, changed_values) {
method _add_entry_button_clicked (line 120) | _add_entry_button_clicked(event) {
method _update_state (line 129) | _update_state() {
method _create_entry (line 161) | _create_entry() {
class CheckboxGroupController (line 180) | class CheckboxGroupController {
method constructor (line 181) | constructor(state_manager, state_key, checkbox_list) {
method _state_changed (line 200) | _state_changed(state, changed_values) {
method _checkbox_changed (line 207) | _checkbox_changed(event) {
class FilterController (line 229) | class FilterController {
method constructor (line 230) | constructor(state_manager, elements) {
method _is_filter_valid (line 244) | static _is_filter_valid(key, value) {
method _state_changed (line 268) | _state_changed(state, changed_values) {
method _apply_clicked (line 297) | _apply_clicked(event) {
method _reset_clicked (line 352) | _reset_clicked(event) {
FILE: conf/report/filter_ui_test.py
function setDriver (line 17) | def setDriver(arg=None):
function openPage (line 25) | def openPage(URL):
function addEntries (line 31) | def addEntries(iter):
function fillEntryType (line 36) | def fillEntryType(num, type):
function fillSpan (line 42) | def fillSpan(entry_id, *args):
function applyFilters (line 49) | def applyFilters():
function removeIcon (line 53) | def removeIcon(num):
function removeAll (line 57) | def removeAll():
FILE: conf/report/report.js
function is_string (line 3) | function is_string(o) { return (typeof o === "string" || o instanceof St...
function is_empty (line 4) | function is_empty(str) { return str.length === 0 }
function deep_eq (line 6) | function deep_eq(a, b) {
function parseSimpleFraction (line 16) | function parseSimpleFraction(s, for_sorting=false) {
class Log (line 32) | class Log {
method dbg (line 33) | static dbg(tag, fmt, ...rest) {
method err (line 37) | static err(tag, fmt, ...rest) {
class ConfigLoader (line 63) | class ConfigLoader {
method constructor (line 64) | constructor() {
method load (line 71) | async load(tool, tag) {
method unload (line 121) | unload() {
method data (line 130) | get data() { return this._data }
class StateManager (line 135) | class StateManager {
method constructor (line 136) | constructor(state_spec) {
method _get_state_value (line 155) | _get_state_value(state, key, proxy) {
method _set_state_value (line 160) | _set_state_value(state, key, value, proxy) {
method subscribe (line 179) | subscribe(keys, callable) {
method unsubscribe (line 190) | unsubscribe(keys, callable) {
method state (line 201) | get state() {
method state_spec (line 205) | get state_spec() {
method debounce (line 209) | static debounce(callable, timeout=0) {
class TestDetailsPanel (line 241) | class TestDetailsPanel {
method constructor (line 242) | constructor(state_manager, html_element) {
method _state_changed (line 266) | async _state_changed(state, changed_values) {
method _find_group (line 293) | async _find_group(tool, tag, test) {
method _load_tests (line 314) | async _load_tests(tool, tag, group) {
method _show_test (line 350) | _show_test(test) {
method _open_log (line 388) | _open_log(url) {
method _open_file (line 393) | _open_file(url) {
method _set_selected_item (line 398) | _set_selected_item(item) {
method _item_clicked (line 412) | _item_clicked(event) {
method _unload_and_hide (line 427) | _unload_and_hide() {
method close (line 442) | close() {
class TestResultCellsSelectionController (line 452) | class TestResultCellsSelectionController {
method constructor (line 453) | constructor(state_manager, tables) {
method _state_changed (line 471) | _state_changed(state, changed_values) {
method _scroll_selected_cell_into_view (line 480) | _scroll_selected_cell_into_view() {
method _set_selected_cell (line 491) | _set_selected_cell(tool, tag, group) {
method _set_selected_cell_element (line 515) | _set_selected_cell_element(element) {
method _cell_clicked (line 531) | _cell_clicked(event) {
class KeyboardControl (line 561) | class KeyboardControl {
method constructor (line 562) | constructor(state_manager) {
method _key_pressed (line 568) | _key_pressed(event) {
class UrlParametersController (line 582) | class UrlParametersController {
method constructor (line 583) | constructor(state_manager) {
method _state_changed (line 592) | _state_changed(state, changed_values) {
method _make_url (line 606) | static _make_url(tool, tag, test) {
method _make_title (line 618) | static _make_title(tool, tag, test) {
method _update_state_from_parameters (line 626) | _update_state_from_parameters() {
FILE: tools/BaseRunner.py
function kill_child_processes (line 21) | def kill_child_processes(parent_pid, sig=signal.SIGKILL):
class BaseRunner (line 31) | class BaseRunner:
method __init__ (line 42) | def __init__(
method get_mode (line 62) | def get_mode(self, params):
method run (line 85) | def run(self, tmp_dir, params):
method run_subprocess (line 104) | def run_subprocess(self, tmp_dir, params):
method is_success_returncode (line 152) | def is_success_returncode(self, rc, params):
method transform_log (line 161) | def transform_log(self, output):
method can_run (line 169) | def can_run(self):
method get_version_cmd (line 179) | def get_version_cmd(self):
method get_version (line 189) | def get_version(self):
method get_commit (line 210) | def get_commit(self):
method get_url (line 236) | def get_url(self):
method get_top_module_or_guess (line 244) | def get_top_module_or_guess(self, params):
method guess_top_module (line 249) | def guess_top_module(self, params):
FILE: tools/logparser.py
function parseLog (line 15) | def parseLog(log):
FILE: tools/report_analyzer.py
function get_data (line 21) | def get_data(csv_path):
function check_tool (line 41) | def check_tool(tool_reportA, tool_reportB, tool_name):
function check_test (line 89) | def check_test(test_reportA, test_reportB):
function check_reports (line 102) | def check_reports(reportA, reportB):
function prepare_comment (line 126) | def prepare_comment(summary, table_path):
function main (line 148) | def main():
FILE: tools/runners/Icarus.py
class Icarus (line 16) | class Icarus(BaseRunner):
method __init__ (line 17) | def __init__(self):
method prepare_run_cb (line 27) | def prepare_run_cb(self, tmp_dir, params):
method get_version_cmd (line 61) | def get_version_cmd(self):
method get_version (line 64) | def get_version(self):
FILE: tools/runners/Odin.py
class Odin (line 15) | class Odin(BaseRunner):
method __init__ (line 16) | def __init__(self):
method prepare_run_cb (line 22) | def prepare_run_cb(self, tmp_dir, params):
method get_version_cmd (line 34) | def get_version_cmd(self):
method get_version (line 38) | def get_version(self):
FILE: tools/runners/Slang.py
class Slang (line 15) | class Slang(BaseRunner):
method __init__ (line 16) | def __init__(
method prepare_run_cb (line 28) | def prepare_run_cb(self, tmp_dir, params):
method get_version (line 94) | def get_version(self):
FILE: tools/runners/Slang_parse.py
class Slang_parse (line 15) | class Slang_parse(Slang):
method __init__ (line 16) | def __init__(self):
FILE: tools/runners/Surelog.py
class Surelog (line 16) | class Surelog(BaseRunner):
method __init__ (line 17) | def __init__(self):
method prepare_run_cb (line 23) | def prepare_run_cb(self, tmp_dir, params):
method is_success_returncode (line 61) | def is_success_returncode(self, rc, params):
FILE: tools/runners/Sv2v_zachjs.py
class Sv2v_zachjs (line 15) | class Sv2v_zachjs(BaseRunner):
method __init__ (line 16) | def __init__(self):
method prepare_run_cb (line 24) | def prepare_run_cb(self, tmp_dir, params):
method get_version (line 35) | def get_version(self):
FILE: tools/runners/SynligYosys.py
class SynligYosys (line 18) | class SynligYosys(BaseRunner):
method __init__ (line 19) | def __init__(self):
method get_mode (line 27) | def get_mode(self, params):
method prepare_run_cb (line 33) | def prepare_run_cb(self, tmp_dir, params):
FILE: tools/runners/Verible.py
class Verible (line 15) | class Verible(BaseRunner):
method __init__ (line 16) | def __init__(self):
method prepare_run_cb (line 22) | def prepare_run_cb(self, tmp_dir, params):
FILE: tools/runners/VeribleExtractor.py
class VeribleExtractor (line 18) | class VeribleExtractor(BaseRunner):
method __init__ (line 19) | def __init__(self):
method prepare_run_cb (line 27) | def prepare_run_cb(self, tmp_dir, params):
FILE: tools/runners/Verilator.py
class Verilator (line 19) | class Verilator(BaseRunner):
method __init__ (line 20) | def __init__(self):
method prepare_run_cb (line 32) | def prepare_run_cb(self, tmp_dir, params):
FILE: tools/runners/Yosys.py
class Yosys (line 17) | class Yosys(BaseRunner):
method __init__ (line 18) | def __init__(self):
method get_mode (line 28) | def get_mode(self, params):
method prepare_run_cb (line 34) | def prepare_run_cb(self, tmp_dir, params):
method get_version_cmd (line 89) | def get_version_cmd(self):
method get_version (line 92) | def get_version(self):
FILE: tools/runners/circt_verilog.py
class circt_verilog (line 15) | class circt_verilog(BaseRunner):
method __init__ (line 16) | def __init__(
method prepare_run_cb (line 29) | def prepare_run_cb(self, tmp_dir, params):
FILE: tools/runners/moore.py
class moore (line 16) | class moore(BaseRunner):
method __init__ (line 17) | def __init__(
method prepare_run_cb (line 27) | def prepare_run_cb(self, tmp_dir, params):
method run_subprocess (line 41) | def run_subprocess(self, tmp_dir, params):
method transform_log (line 60) | def transform_log(self, log):
FILE: tools/runners/moore_parse.py
class moore_parse (line 15) | class moore_parse(moore):
method __init__ (line 16) | def __init__(self):
method prepare_run_cb (line 19) | def prepare_run_cb(self, tmp_dir, params):
FILE: tools/runners/sv_parser.py
class sv_parser (line 15) | class sv_parser(BaseRunner):
method __init__ (line 16) | def __init__(self):
method prepare_run_cb (line 22) | def prepare_run_cb(self, tmp_dir, params):
FILE: tools/runners/tree_sitter_systemverilog.py
class tree_sitter_systemverilog (line 18) | class tree_sitter_systemverilog(BaseRunner):
method __init__ (line 19) | def __init__(self):
method prepare_run_cb (line 28) | def prepare_run_cb(self, tmp_dir, params):
method can_run (line 38) | def can_run(self):
FILE: tools/runners/tree_sitter_verilog.py
class tree_sitter_verilog (line 18) | class tree_sitter_verilog(BaseRunner):
method __init__ (line 19) | def __init__(self):
method prepare_run_cb (line 27) | def prepare_run_cb(self, tmp_dir, params):
method can_run (line 37) | def can_run(self):
FILE: tools/runners/yosys_slang.py
class yosys_slang (line 18) | class yosys_slang(BaseRunner):
method __init__ (line 19) | def __init__(self):
method get_mode (line 25) | def get_mode(self, params):
method prepare_run_cb (line 41) | def prepare_run_cb(self, tmp_dir, params):
Condensed preview — 1153 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,200K chars).
[
{
"path": ".editorconfig",
"chars": 319,
"preview": "# Editor config file, see http://editorconfig.org/\nroot = true\n\n[*]\ncharset = utf-8\nindent_style = space\nend_of_line = l"
},
{
"path": ".github/dependabot.yml",
"chars": 163,
"preview": "version: 2\nupdates:\n- package-ecosystem: gitsubmodule\n directory: \"/\"\n schedule:\n interval: daily\n # UTC\n tim"
},
{
"path": ".github/workflows/comment-pr.yml",
"chars": 2601,
"preview": "name: comment-pr\n\non:\n workflow_run:\n workflows: [\"sv-tests-ci\"]\n types:\n - completed\n\njobs:\n Comment:\n "
},
{
"path": ".github/workflows/lint-review.yml",
"chars": 462,
"preview": "name: lint-review\non:\n pull_request:\n workflow_dispatch:\n\njobs:\n lint_review:\n runs-on: ubuntu-latest\n permissi"
},
{
"path": ".github/workflows/report.sh",
"chars": 103,
"preview": "#!/bin/bash\nset -euxo pipefail\nmake $@ generate-tests\ncp -ar ./out/report_*/logs ./out/\nmake $@ report\n"
},
{
"path": ".github/workflows/summary.sh",
"chars": 803,
"preview": "#!/bin/bash\nset -euxo pipefail\nset -x\nset -e\n\n#environment variables for this file are set in sv-tests-ci.yml\n\n# Get bas"
},
{
"path": ".github/workflows/sv-tests-ci.yml",
"chars": 13409,
"preview": "name: sv-tests-ci\n\non:\n push:\n branches:\n - master\n pull_request:\n workflow_dispatch:\n schedule:\n - cron:"
},
{
"path": ".github/workflows/sv-tests-code-quality.yml",
"chars": 948,
"preview": "name: \"Code Quality Checks\"\n\non:\n push:\n pull_request:\n workflow_dispatch:\n\njobs:\n Test:\n name: \"Code Quality Che"
},
{
"path": ".github/workflows/update_report.sh",
"chars": 704,
"preview": "#!/bin/bash\nset -euxo pipefail\n\nexport CURRENT_PATH=$PWD\n\nset -ex\n\ngit clone \\\n git@github.com:chipsalliance/sv-tests-r"
},
{
"path": ".gitignore",
"chars": 43,
"preview": "out\nbuild\ntests/generated\n__pycache__\nvenv\n"
},
{
"path": ".gitmodules",
"chars": 4222,
"preview": "[submodule \"third_party/tests/hdlconvertor\"]\n\tpath = third_party/tests/hdlconvertor\n\turl = https://github.com/Nic30/hdlC"
},
{
"path": ".style.yapf",
"chars": 186,
"preview": "[style]\nbased_on_style = pep8\nsplit_before_expression_after_opening_paren = True\nsplit_before_first_argument = True\nspli"
},
{
"path": "AUTHORS",
"chars": 392,
"preview": "# This is the list of sv-tests's significant contributors.\n#\n# This does not necessarily list everyone who has contribut"
},
{
"path": "LICENSE",
"chars": 739,
"preview": "Copyright (C) 2020 The Symbiflow Authors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpo"
},
{
"path": "Makefile",
"chars": 4476,
"preview": "# Copyright (C) 2020 The SymbiFlow Authors.\n#\n# Use of this source code is governed by a ISC-style\n# license that can be"
},
{
"path": "README.md",
"chars": 5411,
"preview": "# SystemVerilog Tester\n\n[](https://github.co"
},
{
"path": "conf/environment.yml",
"chars": 817,
"preview": "# Copyright (C) 2019-2021 The SymbiFlow Authors.\n#\n# Use of this source code is governed by a ISC-style\n# license that "
},
{
"path": "conf/feature-analyzer/keywords.yml",
"chars": 4146,
"preview": "# Copyright (C) 2019-2021 The SymbiFlow Authors.\n#\n# Use of this source code is governed by a ISC-style\n# license that "
},
{
"path": "conf/feature-analyzer/operators.yml",
"chars": 1496,
"preview": "# Copyright (C) 2019-2021 The SymbiFlow Authors.\n#\n# Use of this source code is governed by a ISC-style\n# license that "
},
{
"path": "conf/feature-analyzer/tags.yml",
"chars": 9497,
"preview": "# Copyright (C) 2019-2021 The SymbiFlow Authors.\n#\n# Use of this source code is governed by a ISC-style\n# license that "
},
{
"path": "conf/fusesoc-configs/ibex-sim.yml",
"chars": 732,
"preview": "# Copyright (C) 2019-2021 The SymbiFlow Authors.\n#\n# Use of this source code is governed by a ISC-style\n# license that "
},
{
"path": "conf/fusesoc-configs/veer-eh1-sim.yml",
"chars": 725,
"preview": "# Copyright (C) 2019-2021 The SymbiFlow Authors.\n#\n# Use of this source code is governed by a ISC-style\n# license that "
},
{
"path": "conf/fusesoc-configs/veer-eh1-synth.yml",
"chars": 850,
"preview": "# Copyright (C) 2019-2021 The SymbiFlow Authors.\n#\n# Use of this source code is governed by a ISC-style\n# license that "
},
{
"path": "conf/generators/meta-path/basejump.json",
"chars": 1961,
"preview": "{\n\t\"name\": \"BaseJumpSTL\",\n\t\"project\": \"basejump\",\n\t\"paths\": [\n\t\t[\n\t\t\t\"cores\",\n\t\t\t\"basejump_stl\",\n\t\t\t\"*\"\n\t\t]\n\t],\n\t\"matche"
},
{
"path": "conf/generators/meta-path/hdlconvertor.json",
"chars": 471,
"preview": "{\n\t\"name\": \"hdlconvertor\",\n\t\"project\": \"hdlconv\",\n\t\"paths\": [\n\t\t[\"tests\", \"hdlconvertor\", \"tests\", \"sv_test\", \"others\"],"
},
{
"path": "conf/generators/meta-path/hdlconvertor_std2012.json",
"chars": 341,
"preview": "{\n\t\"name\": \"hdlconvertor_std2012\",\n\t\"project\": \"hdlconv_std2012\",\n\t\"paths\": [\n\t\t[\"tests\", \"hdlconvertor\", \"tests\", \"sv_t"
},
{
"path": "conf/generators/meta-path/hdlconvertor_std2017.json",
"chars": 1525,
"preview": "{\n\t\"name\": \"hdlconvertor_std2017\",\n\t\"project\": \"hdlconv_std2017\",\n\t\"paths\": [\n\t\t[\"tests\", \"hdlconvertor\", \"tests\", \"sv_t"
},
{
"path": "conf/generators/meta-path/projf-explore.json",
"chars": 2550,
"preview": "{\n\t\"name\": \"projf\",\n\t\"project\": \"projf-explore\",\n\t\"paths\": [\n\t\t[\"tests\", \"projf-explore\", \"*\", \"*\", \"*\"]\n\t],\n\t\"matches\":"
},
{
"path": "conf/generators/meta-path/utd-systemverilog.json",
"chars": 4256,
"preview": "{\n\t\"name\": \"utd-sv\",\n\t\"project\": \"utd-sv\",\n\t\"paths\": [\n\t\t[\"tests\", \"utd-sv\"]\n\t],\n\t\"matches\": [\"*.v\"],\n\t\"type\": \"parsing\""
},
{
"path": "conf/generators/meta-path/yosys-asicworld.json",
"chars": 412,
"preview": "{\n\t\"name\": \"asicworld\",\n\t\"project\": \"yosys\",\n\t\"paths\": [\n\t\t[\"tools\", \"yosys\", \"tests\", \"asicworld\"]\n\t],\n\t\"matches\": [\"*."
},
{
"path": "conf/generators/meta-path/yosys-errors.json",
"chars": 340,
"preview": "{\n\t\"name\": \"errors\",\n\t\"project\": \"yosys\",\n\t\"should_fail_because\": \"this test imported from yosys repository contains int"
},
{
"path": "conf/generators/meta-path/yosys-memories.json",
"chars": 186,
"preview": "{\n\t\"name\": \"memories\",\n\t\"project\": \"yosys\",\n\t\"paths\": [\n\t\t[\"tools\", \"yosys\", \"tests\", \"memories\"]\n\t],\n\t\"matches\": [\"*.v\""
},
{
"path": "conf/generators/meta-path/yosys-simple.json",
"chars": 296,
"preview": "{\n\t\"name\": \"simple\",\n\t\"project\": \"yosys\",\n\t\"paths\": [\n\t\t[\"tools\", \"yosys\", \"tests\", \"simple\"]\n\t],\n\t\"matches\": [\"*.v\"],\n\t"
},
{
"path": "conf/generators/meta-path/yosys-sva.json",
"chars": 189,
"preview": "{\n\t\"name\": \"sva\",\n\t\"project\": \"yosys\",\n\t\"paths\": [\n\t\t[\"tools\", \"yosys\", \"tests\", \"sva\"]\n\t],\n\t\"matches\": [\"*.sv\"],\n\t\"blac"
},
{
"path": "conf/generators/meta-path/yosys-svinterfaces.json",
"chars": 290,
"preview": "{\r\n\t\"name\": \"svinterfaces\",\r\n\t\"project\": \"yosys\",\r\n\t\"paths\": [\r\n\t\t[\"tools\", \"yosys\", \"tests\", \"svinterfaces\"]\r\n\t],\r\n\t\"ma"
},
{
"path": "conf/generators/templates/assignment-sim.json",
"chars": 785,
"preview": "{\n\t\"name\": \"assignment_sim\",\n\t\"filename\": \"11.4.1--{1}_assignment-sim-{4}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: {1}_assi"
},
{
"path": "conf/generators/templates/assignment.json",
"chars": 570,
"preview": "{\n\t\"name\": \"assignment_op\",\n\t\"filename\": \"11.4.1--{1}_assignment.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: {1}_assignment\",\n"
},
{
"path": "conf/generators/templates/binary.json",
"chars": 1187,
"preview": "{\n\t\"name\": \"binary_op\",\n\t\"filename\": \"{2}--binary_op_{1}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: binary_op_{1}\",\n\t\t\":descr"
},
{
"path": "conf/generators/templates/encapsulation-fail.json",
"chars": 1316,
"preview": "{\n\t\"name\": \"encapsulation\",\n\t\"filename\": \"8.18--{0}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: {0}\",\n\t\t\":description: encapsu"
},
{
"path": "conf/generators/templates/encapsulation-success.json",
"chars": 836,
"preview": "{\n\t\"name\": \"encapsulation\",\n\t\"filename\": \"8.18--{0}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: {0}\",\n\t\t\":description: encapsu"
},
{
"path": "conf/generators/templates/equality.json",
"chars": 1745,
"preview": "{\n\t\"name\": \"equality_operators_sim\",\n\t\"filename\": \"11.4.5--equality_operator_{4}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: e"
},
{
"path": "conf/generators/templates/force-assignments.json",
"chars": 897,
"preview": "{\n\t\"name\": \"assignment-strengths\",\n\t\"filename\": \"10.3.4--assignment_{0}_{1}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: cont_a"
},
{
"path": "conf/generators/templates/integers.json",
"chars": 1220,
"preview": "{\n\t\"name\": \"integers\",\n\t\"filename\": \"6.11--integer_{2}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: integer_{2}\",\n\t\t\":descripti"
},
{
"path": "conf/generators/templates/keywords.json",
"chars": 3979,
"preview": "{\n\t\"name\": \"keywords\",\n\t\"filename\": \"5.6.2--keyword_{0}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: keyword_{0}\",\n\t\t\":descript"
},
{
"path": "conf/generators/templates/logical-equiv.json",
"chars": 644,
"preview": "{\n\t\"name\": \"logical_equivalence_operator_sim\",\n\t\"filename\": \"11.4.7--logical_equiv_operator_{2}.sv\",\n\t\"template\": [\n\t\t\"/"
},
{
"path": "conf/generators/templates/logical-impl.json",
"chars": 616,
"preview": "{\n\t\"name\": \"logical_implication_operator_sim\",\n\t\"filename\": \"11.4.7--logical_impl_operator_{2}.sv\",\n\t\"template\": [\n\t\t\"/*"
},
{
"path": "conf/generators/templates/logical.json",
"chars": 648,
"preview": "{\n\t\"name\": \"logical_operators_sim\",\n\t\"filename\": \"11.4.7--logical_operator_{4}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: log"
},
{
"path": "conf/generators/templates/nets.json",
"chars": 478,
"preview": "{\n\t\"name\": \"nets\",\n\t\"filename\": \"{1}--net_{0}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: net_{0}\",\n\t\t\":description: {0} net t"
},
{
"path": "conf/generators/templates/operators-sim.json",
"chars": 1084,
"preview": "{\n\t\"name\": \"operators_sim\",\n\t\"filename\": \"{2}--{1}_operator_sim_{5}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: {1}_operator_s"
},
{
"path": "conf/generators/templates/sampled-functions-gclk.json",
"chars": 714,
"preview": "{\n\t\"name\": \"sampled_functions\",\n\t\"filename\": \"20.13--{0}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: {0}_function\",\n\t\t\":descri"
},
{
"path": "conf/generators/templates/sampled-functions.json",
"chars": 501,
"preview": "{\n\t\"name\": \"sampled_functions\",\n\t\"filename\": \"20.13--{0}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: {0}_function\",\n\t\t\":descri"
},
{
"path": "conf/generators/templates/simple-logical.json",
"chars": 501,
"preview": "{\n\t\"name\": \"simple_logical_operators_sim\",\n\t\"filename\": \"11.4.7--simple_{1}_logical_operator.sv\",\n\t\"template\": [\n\t\t\"/*\","
},
{
"path": "conf/generators/templates/simple-operators-sim.json",
"chars": 944,
"preview": "{\n\t\"name\": \"operators_sim\",\n\t\"filename\": \"{2}--simple_{1}_operator_sim.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: simple_{1}_"
},
{
"path": "conf/generators/templates/simple-unary.json",
"chars": 642,
"preview": "{\n\t\"name\": \"unary_op\",\n\t\"filename\": \"{2}--simple_unary_op_{1}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: simple_unary_op_{1}\""
},
{
"path": "conf/generators/templates/trig-functions.json",
"chars": 446,
"preview": "{\n\t\"name\": \"trig_functions\",\n\t\"filename\": \"20.8--{0}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: {0}_function\",\n\t\t\":descriptio"
},
{
"path": "conf/generators/templates/unary.json",
"chars": 604,
"preview": "{\n\t\"name\": \"unary_op\",\n\t\"filename\": \"{2}--unary_op_{1}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: unary_op_{1}\",\n\t\t\":descript"
},
{
"path": "conf/generators/templates/uniquecase.json",
"chars": 768,
"preview": "{\n\t\"name\": \"uniquecase\",\n\t\"filename\": \"12.5.3--{2}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: {1}_{0}\",\n\t\t\":description: {0} "
},
{
"path": "conf/generators/templates/uvm-classes_0.json",
"chars": 263,
"preview": "{\n\t\"name\": \"uvm_classes_0\",\n\t\"filename\": \"{0}_class_0.sv\",\n\t\"template_file\": \"uvm-classes_0.sv\",\n\t\"values\": [\n\t\t[\"uvm_ag"
},
{
"path": "conf/generators/templates/uvm-classes_0.sv",
"chars": 2134,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "conf/generators/templates/uvm-classes_1.json",
"chars": 263,
"preview": "{\n\t\"name\": \"uvm_classes_1\",\n\t\"filename\": \"{0}_class_1.sv\",\n\t\"template_file\": \"uvm-classes_1.sv\",\n\t\"values\": [\n\t\t[\"uvm_ag"
},
{
"path": "conf/generators/templates/uvm-classes_1.sv",
"chars": 2403,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "conf/generators/templates/uvm-classes_2.json",
"chars": 490,
"preview": "{\n\t\"name\": \"uvm_classes_2\",\n\t\"filename\": \"{0}_class_2.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: {0}_2\",\n\t\t\":description: {0}"
},
{
"path": "conf/generators/templates/uvm-classes_3.json",
"chars": 263,
"preview": "{\n\t\"name\": \"uvm_classes_3\",\n\t\"filename\": \"{0}_class_3.sv\",\n\t\"template_file\": \"uvm-classes_3.sv\",\n\t\"values\": [\n\t\t[\"uvm_ag"
},
{
"path": "conf/generators/templates/uvm-classes_3.sv",
"chars": 739,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "conf/generators/templates/wildcard-const.json",
"chars": 823,
"preview": "{\n\t\"name\": \"wildcard_const_operators_sim\",\n\t\"filename\": \"11.4.6--wildcard_const_operator_{4}.sv\",\n\t\"template\": [\n\t\t\"/*\","
},
{
"path": "conf/generators/templates/wildcard.json",
"chars": 815,
"preview": "{\n\t\"name\": \"wildcard_operators_sim\",\n\t\"filename\": \"11.4.6--wildcard_operator_{4}.sv\",\n\t\"template\": [\n\t\t\"/*\",\n\t\t\":name: w"
},
{
"path": "conf/lrm.conf",
"chars": 15162,
"preview": "# vim: noet tabstop=64\n#\n# input database for the report generator\n# syntax:\n# <TAG NAME><tab><TAG DESCRIPTION>[<tab><TA"
},
{
"path": "conf/meta-tags.conf",
"chars": 530,
"preview": "# vim: noet tabstop=16\n#\n# meta-tags configuration file\n# syntax:\n# <META TAG NAME><tab><SPACE SEPARATED DEPENDENCY TAGS"
},
{
"path": "conf/report/code-template.html",
"chars": 242,
"preview": "<!DOCTYPE html>\n<html>\n <head>\n <meta charset=\"UTF-8\" />\n <link rel=\"stylesheet\" type=\"text/css\" href=\"{{csspath}"
},
{
"path": "conf/report/code.css",
"chars": 3986,
"preview": "@import 'details-view.css';\n\n:root {\n font-family: \"Courier New\", Consolas, monospace;\n}\npre {\n margin: 0; padding: 4p"
},
{
"path": "conf/report/details-view.css",
"chars": 913,
"preview": ":root {\n font-family: sans-serif;\n font-size: 0.8rem;\n}\n\n* {\n box-sizing: border-box;\n}\n\nbody {\n margin: 0;\n paddin"
},
{
"path": "conf/report/filter.js",
"chars": 15672,
"preview": "// NOTE: Code here uses classes and functions from report.js\n\nconst HEADER_COLUMNS_COUNT = 2\n\n/// Filter state manager /"
},
{
"path": "conf/report/filter_ui_test.py",
"chars": 1854,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2021 The SymbiFlow Authors.\n#\n# Use of this source code"
},
{
"path": "conf/report/footer.html",
"chars": 11073,
"preview": "<footer>\n <div>\n <p>\n Generated using <a href=\"https://github.com/chipsalliance/sv-tests\">sv-tests<"
},
{
"path": "conf/report/history-graph-template.html",
"chars": 1966,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <script src=\"https://cdn.jsdelivr.net/npm/chart.js@3.5.0/dist/chart.min.js\"></script>\n "
},
{
"path": "conf/report/log-template.html",
"chars": 2074,
"preview": "<!DOCTYPE html>\n<html>\n <head>\n <meta charset=\"UTF-8\" />\n <link rel=\"stylesheet\" type=\"text/css\" href=\"{{csspath}"
},
{
"path": "conf/report/log.css",
"chars": 1516,
"preview": "@import 'details-view.css';\n\n:root {\n /* Colors */\n --white: #FFFFFF;\n --light-gray: #F9F9F9;\n --gray: #E6E6E6;\n --"
},
{
"path": "conf/report/navbar.html",
"chars": 4715,
"preview": "<section class=\"top-nav\">\n <div class=\"nav-logo\">\n <svg width=\"66\" height=\"62\" viewBox=\"0 0 66 62\" fill=\"none\""
},
{
"path": "conf/report/report-template.html",
"chars": 13356,
"preview": "{# vim: set ts=2 sts=2 sw=2 et: #}\n<!DOCTYPE html>\n<html>\n <head>\n <meta charset=\"UTF-8\" />\n <title>SystemVe"
},
{
"path": "conf/report/report.css",
"chars": 14677,
"preview": ":root {\n /* Colors */\n --white: #FFFFFF;\n --light-gray: #F9F9F9;\n --gray: #E6E6E6;\n --dark-gray: #8E8E93;\n --black"
},
{
"path": "conf/report/report.js",
"chars": 21398,
"preview": "/// Utils //////////////////////////////////////////////////////////////\n\nfunction is_string(o) { return (typeof o === \""
},
{
"path": "conf/requirements.txt",
"chars": 238,
"preview": "pyyaml\njinja2\ntree_sitter==0.20.4\npygments\nyapf==0.30.0\npsutil\nmako\nmake_var\nmarkupsafe\npytablewriter\nGitPython\nsimplesa"
},
{
"path": "conf/runners/libs.json",
"chars": 107,
"preview": "{\n \"uvm\": {\n \"files\": [\"tests/uvm/src/uvm_pkg.sv\"],\n \"incdirs\": [\"tests/uvm/src\"]\n }\n}\n"
},
{
"path": "generators/ariane",
"chars": 7024,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2020 The SymbiFlow Authors.\n#\n# Use of this source code"
},
{
"path": "generators/black-parrot",
"chars": 3597,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2020 The SymbiFlow Authors.\n#\n# Use of this source code"
},
{
"path": "generators/easyUVM",
"chars": 1212,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2020 The SymbiFlow Authors.\n#\n# Use of this source code"
},
{
"path": "generators/fusesoc",
"chars": 5098,
"preview": "#!/usr/bin/env python3\n\nimport os\nimport re\nimport sys\nimport yaml\nimport subprocess\nimport collections\nimport make_var\n"
},
{
"path": "generators/fx68k",
"chars": 1224,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2020 The SymbiFlow Authors.\n#\n# Use of this source code"
},
{
"path": "generators/ivtest",
"chars": 15412,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2020-2021 The SymbiFlow Authors.\n#\n# Use of this source"
},
{
"path": "generators/path_generator",
"chars": 4123,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2020 The SymbiFlow Authors.\n#\n# Use of this source code"
},
{
"path": "generators/rggen",
"chars": 23204,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2020 The SymbiFlow Authors.\n#\n# Use of this source code"
},
{
"path": "generators/rsd",
"chars": 2351,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2020 The SymbiFlow Authors.\n#\n# Use of this source code"
},
{
"path": "generators/scr1",
"chars": 1574,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2020 The SymbiFlow Authors.\n#\n# Use of this source code"
},
{
"path": "generators/template_generator",
"chars": 1889,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2020 The SymbiFlow Authors.\n#\n# Use of this source code"
},
{
"path": "generators/tnoc",
"chars": 2351,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2020 The SymbiFlow Authors.\n#\n# Use of this source code"
},
{
"path": "generators/veer-config",
"chars": 5125,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2020 The SymbiFlow Authors.\n#\n# Use of this source code"
},
{
"path": "generators/yosys_hana",
"chars": 1450,
"preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n#\n# Copyright (C) 2020 The SymbiFlow Authors.\n#\n# Use of this source code"
},
{
"path": "tests/README.md",
"chars": 2585,
"preview": "# Tests\n\nThis directory contains various tests.\nThe tests are divided into various directories.\n\n## Chapter tests\n\nThe p"
},
{
"path": "tests/chapter-10/10.3--proc-assignment--bad.sv",
"chars": 579,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-10/10.3.1--net-decl-assignment.sv",
"chars": 390,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-10/10.3.1--one-net.sv",
"chars": 429,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-10/10.3.2--cont-assignment.sv",
"chars": 391,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-10/10.3.3--cont-assignment-delay.sv",
"chars": 413,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-10/10.3.3--cont-assignment-net-delay.sv",
"chars": 421,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-10/10.4.1--blocking-assignment.sv",
"chars": 490,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-10/10.4.2--non-blocking-assignment.sv",
"chars": 396,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-10/10.6.1--assign-deassign.sv",
"chars": 547,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-10/10.6.2--force-release.sv",
"chars": 651,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.10--string_bit_array-sim.sv",
"chars": 502,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.10--string_bit_array.sv",
"chars": 402,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.10.1--string_compare.sv",
"chars": 503,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.10.1--string_concat.sv",
"chars": 558,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.10.1--string_copy.sv",
"chars": 489,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.10.3--empty_string-sim.sv",
"chars": 479,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.10.3--empty_string.sv",
"chars": 399,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.11--min_max_avg_delay.sv",
"chars": 427,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.12--let_construct.sv",
"chars": 490,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.3.5--expr_short_circuit.sv",
"chars": 615,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.3.6--assign_in_exp-sim.sv",
"chars": 548,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.3.6--assign_in_exp.sv",
"chars": 418,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.3.6--assign_in_expr-sim.sv",
"chars": 582,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.3.6--assign_in_expr.sv",
"chars": 412,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.3.6--assign_in_expr_inv.sv",
"chars": 513,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.3.6--assign_in_expression-sim.sv",
"chars": 554,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.3.6--assign_in_expression.sv",
"chars": 424,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.3.6--assignment_in_expression-sim.sv",
"chars": 559,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.3.6--assignment_in_expression.sv",
"chars": 429,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.3.6--two_assign_in_expr-sim.sv",
"chars": 665,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.3.6--two_assign_in_expr.sv",
"chars": 503,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.1--assignment-sim.sv",
"chars": 547,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.10--arith-shift-assignment-signed.sv",
"chars": 624,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.10--arith-shift-assignment-unsigned.sv",
"chars": 600,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.10--arith-shift-signed.sv",
"chars": 590,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.10--arith-shift-unsigned.sv",
"chars": 566,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.11--cond_op-sim.sv",
"chars": 498,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.11--cond_op.sv",
"chars": 405,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.12--concat_op-bit_select.sv",
"chars": 488,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.12--concat_op-sim.sv",
"chars": 531,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.12--concat_op.sv",
"chars": 446,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.12.1--nested_repl_op-sim.sv",
"chars": 586,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.12.1--nested_repl_op.sv",
"chars": 477,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.12.1--repl_op-sim.sv",
"chars": 520,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.12.1--repl_op.sv",
"chars": 411,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.12.2--string_concat_op.sv",
"chars": 519,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.12.2--string_repl_op.sv",
"chars": 502,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.13--set_member-sim.sv",
"chars": 490,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.13--set_member.sv",
"chars": 435,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.14.1--stream_concat-sim.sv",
"chars": 579,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.14.1--stream_concat.sv",
"chars": 464,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.14.2--reorder_stream-sim.sv",
"chars": 523,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.14.2--reorder_stream.sv",
"chars": 420,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.14.2--reorder_stream_byte-sim.sv",
"chars": 531,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.14.2--reorder_stream_byte.sv",
"chars": 428,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.14.3--unpack_stream-sim.sv",
"chars": 559,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.14.3--unpack_stream.sv",
"chars": 425,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.14.3--unpack_stream_inv.sv",
"chars": 560,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.14.3--unpack_stream_pad-sim.sv",
"chars": 608,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.14.3--unpack_stream_pad.sv",
"chars": 437,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.14.4--dynamic_array_stream-sim.sv",
"chars": 973,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.14.4--dynamic_array_stream.sv",
"chars": 689,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.14.4--dynamic_array_stream_with.sv",
"chars": 723,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.2--unary_op_dec-sim.sv",
"chars": 465,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.2--unary_op_dec.sv",
"chars": 373,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.2--unary_op_inc-sim.sv",
"chars": 465,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.2--unary_op_inc.sv",
"chars": 373,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.4.5--equality-op.sv",
"chars": 821,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.5.1--idx_neg_part_select-sim.sv",
"chars": 536,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.5.1--idx_neg_part_select.sv",
"chars": 428,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.5.1--idx_pos_part_select-sim.sv",
"chars": 535,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.5.1--idx_pos_part_select.sv",
"chars": 428,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.5.1--idx_select-sim.sv",
"chars": 558,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.5.1--idx_select.sv",
"chars": 396,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.5.1--non_idx_part_select-sim.sv",
"chars": 525,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.5.1--non_idx_part_select.sv",
"chars": 422,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.5.2--array_addressing-sim.sv",
"chars": 533,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.5.2--array_addressing.sv",
"chars": 419,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.5.2--multi_dim_array_addressing-sim.sv",
"chars": 572,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.5.2--multi_dim_array_addressing.sv",
"chars": 455,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.7--signed_func-sim.sv",
"chars": 488,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.7--signed_func.sv",
"chars": 395,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.7--unsigned_func-sim.sv",
"chars": 490,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.7--unsigned_func.sv",
"chars": 389,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.9--tagged_union.sv",
"chars": 470,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.9--tagged_union_member_access-sim.sv",
"chars": 589,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.9--tagged_union_member_access.sv",
"chars": 520,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/11.9--tagged_union_member_access_inv.sv",
"chars": 627,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/simple/11.4.11--simple_cond_op-sim.sv",
"chars": 471,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/simple/11.4.12--simple_concat_op-sim.sv",
"chars": 506,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/simple/11.4.12.1--simple_repl_op-sim.sv",
"chars": 490,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/simple/11.4.13--simple_set_member-sim.sv",
"chars": 496,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/simple/11.4.14.3--simple_unpack_stream-sim.sv",
"chars": 531,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/simple/11.5.1--simple_idx_neg_part_select-sim.sv",
"chars": 517,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/simple/11.5.1--simple_idx_pos_part_select-sim.sv",
"chars": 516,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/simple/11.5.1--simple_idx_select-sim.sv",
"chars": 483,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/simple/11.5.1--simple_non_idx_part_select-sim.sv",
"chars": 505,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-11/simple/11.5.2--simple_array_addressing-sim.sv",
"chars": 515,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-12/12.4--if.sv",
"chars": 400,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-12/12.4--if_else.sv",
"chars": 424,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-12/12.4.1--if_else_if.sv",
"chars": 477,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
},
{
"path": "tests/chapter-12/12.4.2--priority_if.sv",
"chars": 477,
"preview": "// Copyright (C) 2019-2021 The SymbiFlow Authors.\n//\n// Use of this source code is governed by a ISC-style\n// license t"
}
]
// ... and 953 more files (download for full content)
About this extraction
This page contains the full source code of the chipsalliance/sv-tests GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1153 files (1.0 MB), approximately 347.1k tokens, and a symbol index with 166 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.