Commits on Nov 5, 2017
  1. Rework handling of timescales in parser.

    martinwhitaker committed Nov 5, 2017
    This implements and enforces the full set of rules for determining
    timescales in SystemVerilog. The previous relaxation of the rules
    that allowed timescales to be redefined within the compilation unit
    scope has been removed. Time unit and precision redeclarations are
    now recognised after a nested module declaration.
  2. Factor out common code for warning about inconsistent timescales.

    martinwhitaker committed Nov 5, 2017
    Also reword the warning for SystemVerilog, where `timescale is not
    the only (or indeed preferred) way of specifying timescales.
Commits on Oct 31, 2017
  1. Add support for the $unit scope identifier.

    martinwhitaker committed Oct 31, 2017
    This relies on using the automatically generated name for the unit scope.
    This could collide with an escaped identifier, so it would be better to
    identify the scope by a reference to the PPackage object, but for now,
    do it the easy way.
  2. Support separate compilation units in SystemVerilog.

    martinwhitaker committed Oct 21, 2017
    The compilation unit scope is now treated as a specialised form of
    package (with an automatically generated name). All items declared
    outside a design element are added to the current compilation unit
    package. Apart from when searching for a symbol, once we get into
    elaboration we can treat these just like any other package.
  3. First step towards supporting separate compilation units in SV.

    martinwhitaker committed Oct 15, 2017
    This adds a -u option to the driver to allow the user to specify that
    they want each source file to be treated as a separate compilation
    unit, and modifies the compiler to accept a list of files (either on
    the command line or via a file specified by a new -F option). This
    list of files is then preprocessed and parsed separately, causing all
    compiler directives (including macro definitions) to only apply to the
    file containing them, as required by the SystemVerilog standard.
Commits on Oct 23, 2017
  1. Update cppcheck waiver files

    caryr committed Oct 23, 2017
Commits on Oct 22, 2017
  1. driver: Add -Wno-macro-redefinition, properly pass -Wredef to ivlpp

    nekromant committed Oct 22, 2017
    Signed-off-by: Andrew Andrianov <>
  2. ivlpp: Actually take warn_redef flag into account

    nekromant committed Oct 22, 2017
    Signed-off-by: Andrew Andrianov <>
Commits on Oct 19, 2017
  1. driver: Update manpage

    nekromant committed Oct 19, 2017
    Signed-off-by: Andrew Andrianov <>
  2. driver: Implement -Wr handling for macro redefinitions

    nekromant committed Oct 19, 2017
    Signed-off-by: Andrew Andrianov <>
Commits on Oct 18, 2017
  1. ivlpp: Add -Wredef option to enable redefinition warnings

    nekromant committed Oct 18, 2017
    Signed-off-by: Andrew Andrianov <>
Commits on Oct 8, 2017
  1. Fix for GitHub issue #98 and #167

    martinwhitaker committed Oct 8, 2017
    Two fixes needed:
      - when searching for a base class, we need to look in the root scope
        if the base class isn't found in the scope hierarchy
      - the classes in the root scope need to be stored in an ordered
        list, not a map, to ensure they are elaborated in the order they
        were declared. Without this, the compiler may try elaborating an
        extended class before its base class is known about.
  2. Add support for vec4 darray initialisation from an array pattern.

    martinwhitaker committed Oct 8, 2017
    This was just a missing case label in tgt-vvp.
  3. Generate proper error messages for invalid dynamic array initialisers.

    martinwhitaker committed Oct 8, 2017
    Invalid user code should not result in an "internal_error".
  4. ivlpp: Warn about macro redefinition

    nekromant committed Oct 8, 2017
    Verilog spec has a very nasty system of macros jumping from
    file to file, resulting in a global macro scope. We abosolutely
    MUST track macro redefinitions and warn user about them.
    Signed-off-by: Andrew Andrianov <>
Commits on Oct 7, 2017
  1. Fix for GitHub issue #165 : assertion failure on thread join.

    martinwhitaker committed Oct 7, 2017
    If a thread becomes detached due to a join_any statement, that
    thread must not attempt to join its parent, even if the parent
    is waiting on a subsequent join statement.
Commits on Oct 4, 2017
Commits on Sep 28, 2017
Commits on Sep 17, 2017
  1. Fix error in last commit.

    martinwhitaker committed Sep 17, 2017
  2. Fix use after free bug in vvp when a task or function is disabled.

    martinwhitaker committed Sep 17, 2017
    Use test_joinable() and do_join() to ensure everything gets cleaned
    up before the thread is reaped. This should fix br1016, br1017, and
Commits on Sep 11, 2017
  1. Fix for GitHub issue #162 : very wide busses cause assertion failure.

    martinwhitaker committed Sep 11, 2017
    This occurs when tgt-vvp attempts to generate a C4<..> constant
    value with a bit width >= 65536. The actual failure occurs in the
    StringHeap class, which originally supported a maximum string length
    of 65535. This fix enables the StringHeap class to support any size
    string (provided the system has sufficient memory).
Commits on Aug 12, 2017
  1. Fix for br1019 - allow multiple array words to be attached to a vpi c…

    martinwhitaker committed Aug 12, 2017
    Normally there is at most one signal attached to a vvp functor, but
    due to port collapsing, there can be more than one. If these signals
    are array words, we need to trigger vpi callbacks on all the associated
    arrays when the functor value changes.
Commits on Jul 22, 2017
  1. Fix space issue

    caryr committed Jul 22, 2017
Commits on Jun 20, 2017
Commits on Jun 16, 2017
  1. Don't allow localparams to be overridden (GitHub issue #157)

    martinwhitaker committed Jun 16, 2017
    Currently we only issue a warning if a parameter override references
    a parameter that doesn't exist, so do the same in this case.
Commits on Jun 15, 2017
  1. Ensure value passed to named event via vpi_put_value() is initialised.

    martinwhitaker committed Jun 15, 2017
    The __vpiNamedEvent::vpi_put_value() function ignores the value, but
    intermediate code looks at it.
Commits on Apr 21, 2017
  1. Fix for GitHub issue #152 - segfault on gate connection syntax error.

    martinwhitaker committed Apr 21, 2017
    If there is a syntax error in the source code, pform_makegate may be
    passed a null list of port connections. The error is already reported,
    so we just need to ignore it.