Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
8 years ago

Academic Q: Why doesn't Quartus Synthesis Allow Some Restricted Classes?

Was pleased to discover SV supports scalable tasks/functions to the extent that if you bury it in a class you can set the 'type' by parameter.

Why then can't this be synthesized? For example, why can't I synthesize this:

    class generic# (type T=logic);
        static function int find_first_msb(input T vector); 
            for(int i=$bits(vector)-1;i>=0;i--)
                if(vector) 
                    return i;
            return -1;
        endfunction//find_first_msb
    endclass
    ...
    msb  = generic#(uint32)::find_first_msb(decimal);

Rather, I have to create a fixed-width version.

    function int find_first_msb(input uint32 vector);
        for(int i=$bits(vector)-1;i>=0;i--)
            if(vector) 
                return i;
        return -1;
    endfunction//find_first_msb

There's nothing to prevent this limited (but useful!) functionality from being synthesized.

~SysTom

3 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Static class methods are synthesizable in other tools, but apparently not in the tool you are using. They allow you to have parameterizable functions.

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Thanks Tricky, dave_59.

    Yep, the tool is Quartus.

    Thanks again, Tom