always_sense.sv 1.59 KB
Newer Older
1
`include "always_sense.vh"
2
module mod(
3 4
    input wire `INPUTS,
    output reg `OUTPUTS
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
);
    localparam ZERO = 0;

    task automatic t;
        output reg o;
        o = inp1;
    endtask

    function automatic flop;
        input reg i;
        flop = i;
    endfunction
    function automatic flip;
        input reg i;
        flip = flop(~i);
    endfunction

    function automatic f;
        input reg i; // ignored
        f = inp2;
    endfunction
    function automatic g;
        input reg inp1; // ignored
        g = f(ZERO) & mod.inp1;
    endfunction

    function void u;
        output reg o;
        o = inp1;
    endfunction

    task automatic asgn;
        output reg o;
        input reg i;
        o = i;
    endtask

    always_comb
        t(out1);
    always_comb
        out2 = f(ZERO);
    always_comb
        out3 = f(ZERO) & inp1;
    always_comb
        out4 = g(ZERO);
    always_comb
        out5 = flip(inp1);
    always_comb begin
        reg x;
        x = g(ZERO);
        out6 = x;
    end
    always_comb
        u(out7);
    parameter ONE = 1;
    if (ONE)
        always_comb begin
            asgn(out8, flip(inp1));
            out9 = f(ZERO);
        end
    always_latch
        if (inp1)
            outA = f(ZERO);

    struct packed {
        logic x, y;
    } s;
    assign s = {inp1, inp2};
    function automatic h;
        input reg i; // ignored
        h = s.y;
    endfunction
    always_comb
        outB = h(ZERO);
79 80 81 82 83 84
    function automatic i;
        input reg x; // ignored
        i = s[ONE];
    endfunction
    always_comb
        asgn(.i(i(ZERO)), .o(outC));
85
endmodule