inside_exhaust.vh 1.17 KB
Newer Older
1 2 3 4 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
function [WIDTH-1:0] incr;
    input [WIDTH-1:0] inp;
    reg carry;
    integer idx;
    begin
        carry = 1;
        idx = 0;
        while (carry) begin
            carry = 0;
            if (inp[idx] === 1'b0)
                inp[idx] = 1'b1;
            else if (inp[idx] === 1'b1)
                inp[idx] = 1'bx;
            else if (inp[idx] === 1'bx)
                inp[idx] = 1'bz;
            else begin
                inp[idx] = 1'b0;
                idx = idx + 1;
                carry = idx < WIDTH;
            end
        end
        incr = inp;
    end
endfunction

reg [WIDTH-1:0] a, b, c;
initial begin : x
    integer i, j, k;
    a = 0; b = 0; c = 0;

    for (i = 0; i < 4**WIDTH; ++i) begin
        for (j = 0; j < 4**WIDTH; ++j) begin
            $display("%b ==? %b = 1'b%b",
                a, b, test_weq(a, b));
35 36
            $display("%b !=? %b = 1'b%b",
                a, b, test_wne(a, b));
37 38 39 40 41 42 43 44 45 46
            for (k = 0; k < 4**WIDTH; ++k) begin
                $display("%b inside {%b, %b} = 1'b%b",
                    a, b, c, test_inside(a, b, c));
                c = incr(c);
            end
            b = incr(b);
        end
        a = incr(a);
    end
end