hwt/synthesizer/vectorUtils.py
def fitTo_t(what: Union[RtlSignal, Value], where_t: HdlType,
            extend: bool=True, shrink: bool=True):
    """
    Slice signal "what" to fit in "where"
    or
    arithmetically (for signed by MSB / unsigned, vector with 0) extend
    "what" to same width as "where"

    little-endian impl.
    """

    whatWidth = what._dtype.bit_length()
    toWidth = where_t.bit_length()
    if toWidth == whatWidth:
        return what
    elif toWidth < whatWidth:
        # slice
        if not shrink:
            raise BitWidthErr()

        return what[toWidth:]
    else:
        if not extend:
            raise BitWidthErr()

        w = toWidth - whatWidth

        if what._dtype.signed:
            # signed extension
            msb = what[whatWidth - 1]
            ext = reduce(lambda a, b: a._concat(b), [msb for _ in range(w)])
        else:
            # 0 extend
            ext = vec(0, w)

        return ext._concat(what)
def fitTo_t(what: Union[RtlSignal, Value], where_t: HdlType,
            extend: bool=True, shrink: bool=True):
    """
    Slice signal "what" to fit in "where"
    or
    arithmetically (for signed by MSB / unsigned, vector with 0) extend
    "what" to same width as "where"

    little-endian impl.
    """

    whatWidth = what._dtype.bit_length()
    toWidth = where_t.bit_length()
    if toWidth == whatWidth:
        return what
    elif toWidth < whatWidth:
        # slice
        if not shrink:
            raise BitWidthErr()

        return what[toWidth:]
    else:
        if not extend:
            raise BitWidthErr()

        w = toWidth - whatWidth

        if what._dtype.signed:
            # signed extension
            msb = what[whatWidth - 1]
            ext = reduce(lambda a, b: a._concat(b), [msb for _ in range(w)])
        else:
            # 0 extend
            ext = vec(0, w)

        return ext._concat(what)
def fitTo_t ( what : Union [ RtlSignal , Value ] , where_t : HdlType , extend : bool = True , shrink : bool = True ) : whatWidth = what . _dtype . bit_length ( ) toWidth = where_t . bit_length ( ) if toWidth == whatWidth : return what elif toWidth < whatWidth : # slice if not shrink : raise BitWidthErr ( ) return what [ toWidth : ] else : if not extend : raise BitWidthErr ( ) w = toWidth - whatWidth if what . _dtype . signed : # signed extension msb = what [ whatWidth - 1 ] ext = reduce ( lambda a , b : a . _concat ( b ) , [ msb for _ in range ( w ) ] ) else : # 0 extend ext = vec ( 0 , w ) return ext . _concat ( what )
Slice signal "what" to fit in "where"
    or
    arithmetically (for signed by MSB / unsigned, vector with 0) extend
    "what" to same width as "where"

    little-endian impl.
Slice signal what to fit in where or arithmetically ( for signed by MSB / unsigned vector with 0 ) extend what to same width as where