Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Variable assignment without data type validation #1012

Open
captainliuy opened this issue Oct 12, 2024 · 0 comments
Open

Variable assignment without data type validation #1012

captainliuy opened this issue Oct 12, 2024 · 0 comments
Labels
tools Tools feature

Comments

@captainliuy
Copy link

captainliuy commented Oct 12, 2024

Example from playground:

// module definition
module ModuleA #(
    param ParamA: u32 = 10,
    const ParamB: u32 = 10, // trailing comma is allowed
) (
    i_clk : input  clock            ,
    i_rst : input  reset            ,
    i_sel : input  logic            ,
    i_data: input  logic<ParamA> [2], // `[]` means unpacked array
    o_data: output logic<ParamA>    , // `<>` means packed array
) {
    // const parameter declaration
    //   `param` is not allowed in module
    const ParamC: u32 = 10;

    // variable declaration
    var r_data0: logic<ParamA>;
    var r_data1: logic<ParamA>;

    // value binding
    let _w_data2: logic<ParamA> = i_data;

    // always_ff statement with reset
    //   `always_ff` can take a mandatory clock and a optional reset
    //   `if_reset` means `if (i_rst)`. This conceals reset porality
    //   `()` of `if` is not required
    //   `=` in `always_ff` is non-blocking assignment
    always_ff (i_clk, i_rst) {
        if_reset {
            r_data0 = 0;
        } else if i_sel {
            r_data0 = i_data[0];
        } else {
            r_data0 = i_data[1];
        }
    }

    // always_ff statement without reset
    always_ff (i_clk) {
        r_data1 = r_data0;
    }

    assign o_data = r_data1;
}   

All the statements below contain errors, but they can still compile successfully.
let _w_data2: logic<ParamA> = i_data;
let _w_data2: logic<ParamA> = i_data[2];
let _w_data2: logic<ParamA> = i_sel;
let _w_data2: logic<ParamA> = i_sel[2];

@dalance dalance added the tools Tools feature label Oct 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
tools Tools feature
Projects
None yet
Development

No branches or pull requests

2 participants