Announcing Veryl 0.14.0

The Veryl team has published a new release of Veryl, 0.14.0. Veryl is a new hardware description language as an alternate to SystemVerilog.

If you have a previous version of Veryl installed via verylup, you can get the latest version with:

$ verylup update

If you don't have it already, you can get verylup from release page.

Breaking Changes

New type checker #1216 #1239 #1240 #1264

New type checker is introduced to enable the following checks.

Please see the following blog for the detailed information.

https://veryl-lang.org/blog/new-type-checker/

This is not a breaking chage ideally, but the existing code may be broken by mistakes of new checker. If there is any mistake, please open an issue.

Remove variable declaration from package #1305

Variable declaration in package is removed because it is not synthesizable.

package PackageA {
    var X: logic; // Error
}

New Features

LSP support for file renaming and deleting #1226

veryl-ls becomes to support file renaming and deleting to avoid unexpected errors caused by these file operation.

Support clock domain annotation for interface instance #1279

Interface instances can have clock domain annotation as the same as normal variables.

var x: `a logic;

inst intf: `a InterfaceA;

Add align attribute #1283

To improve readability of complex expression, align attribute was added. For example, by adding #[align(number)], all numbers in expression is aligned.

module ModuleA {
    #[align(number, identifier)]
    let _c : logic = {
        a  [0 ] repeat 1 , a  [0 ] repeat 1 ,
        aa [1 ] repeat 8 , aa [1 ] repeat 8 ,
        aaa[2 ] repeat 16, aaa[2 ] repeat 16,
    };
}

Support default member of modport #1288

Default member syntax ..[direction] is introduced to make modport definition concise. In most cases, the direction of slave-like modport is converse of master-like modport. So the special direction converse([modport_name]) is useful to make clear the definition of master/slave pair.

interface InterfaceA {
    var a: logic;
    var b: logic;

    modport master {
        a: output,
        b: input ,
    }

    modport slave {
        ..converse(master)
    }

    modport monitor {
        ..input
    }

Enable assign to concatenation #1298

Concatenation can be used as the left hand side of assign declaration.

assign {a, b} = 1;

Other Changes

Check out everything that changed in Release v0.14.0.