veryl-std 0.20.1

A modern hardware description language
Documentation
#[test(test_lzc_4)]
module test_lzc_4 {
    import lzc_pkg::<4>::*;

    var bits  : logic     <4>;
    var result: lzc_result   ;

    initial {
        bits    = '0;
        result  = lzc(bits, true);
        $assert(result.all_zero);

        for i in 0..4 {
            var exp: logic<2>;

            bits    = '0;
            bits[i] = '1;
            result  = lzc(bits, true);

            exp     = 3 - i;
            $assert(!result.all_zero);
            $assert(result.count == exp);
        }

        $finish();
    }
}

#[test(test_lzc_8)]
module test_lzc_8 {
    import lzc_pkg::<8>::*;

    var bits  : logic     <8>;
    var result: lzc_result   ;

    initial {
        bits    = '0;
        result  = lzc(bits, true);
        $assert(result.all_zero);

        for i in 0..8 {
            var exp: logic<3>;

            bits    = '0;
            bits[i] = '1;
            result  = lzc(bits, true);

            exp     = 7 - i;
            $assert(!result.all_zero);
            $assert(result.count == exp);
        }

        $finish();
    }
}

#[test(test_lzc_16)]
module test_lzc_16 {
    import lzc_pkg::<16>::*;

    var bits  : logic     <16>;
    var result: lzc_result    ;

    initial {
        bits    = '0;
        result  = lzc(bits, true);
        $assert(result.all_zero);

        for i in 0..16 {
            var exp: logic<4>;

            bits    = '0;
            bits[i] = '1;
            result  = lzc(bits, true);

            exp     = 15 - i;
            $assert(!result.all_zero);
            $assert(result.count == exp);
        }

        $finish();
    }
}

#[test(test_lzc_32)]
module test_lzc_32 {
    import lzc_pkg::<32>::*;

    var bits  : logic     <32>;
    var result: lzc_result    ;

    initial {
        bits    = '0;
        result  = lzc(bits, true);
        $assert(result.all_zero);

        for i in 0..32 {
            var exp: logic<5>;

            bits    = '0;
            bits[i] = '1;
            result  = lzc(bits, true);

            exp     = 31 - i;
            $assert(!result.all_zero);
            $assert(result.count == exp);
        }

        $finish();
    }
}

#[test(test_lzc_64)]
module test_lzc_64 {
    import lzc_pkg::<64>::*;

    var bits  : logic     <64>;
    var result: lzc_result    ;

    initial {
        bits    = '0;
        result  = lzc(bits, true);
        $assert(result.all_zero);

        for i in 0..64 {
            var exp: logic<6>;

            bits    = '0;
            bits[i] = '1;
            result  = lzc(bits, true);

            exp     = 63 - i;
            $assert(!result.all_zero);
            $assert(result.count == exp);
        }

        $finish();
    }
}

#[test(test_lzc_128)]
module test_lzc_128 {
    import lzc_pkg::<128>::*;

    var bits  : logic     <128>;
    var result: lzc_result     ;

    initial {
        bits    = '0;
        result  = lzc(bits, true);
        $assert(result.all_zero);

        for i in 0..128 {
            var exp: logic<7>;

            bits    = '0;
            bits[i] = '1;
            result  = lzc(bits, true);

            exp     = 127 - i;
            $assert(!result.all_zero);
            $assert(result.count == exp);
        }

        $finish();
    }
}