\usetikzlibrary{shapes.multipart}
\usetikzlibrary {shapes.geometric}
\tikzset{inport/.style={
    draw=black, minimum width=0.1cm, minimum height=0.1cm, anchor=north, outer sep=0, inner sep=2.75
}}
\tikzset{outport/.style={
    draw=black, fill=black, minimum width=0.1cm, minimum height=0.1cm, anchor=south, outer sep=0, inner sep=2.75
}}

\makeatletter
\pgfdeclareshape{coverage}{
    % Minimum required anchors:
    \savedanchor{\northeast}{
        \pgf@y=1cm
        \pgf@x=1.5cm
    }
    \savedanchor{\southwest}{
        \pgf@y=-\pgf@y
        \pgf@x=-\pgf@x
    }

    % Special Anchors, that can be calculated from the others (lazy calculation)
    \anchor{south west} {\southwest}
    \anchor{north east} {\northeast}
    \anchor{north west} {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x} 
    \anchor{south east} {\southwest \pgf@y=\pgf@y \pgf@x=-\pgf@x} 
    \anchor{west}       {\southwest \pgf@y=0cm \pgf@x=\pgf@x}
    \anchor{east}       {\northeast \pgf@y=0cm \pgf@x=\pgf@x}
    \anchor{north}      {\northeast \pgf@y=\pgf@y \pgf@x=0cm}
    \anchor{south}      {\southwest \pgf@y=\pgf@y \pgf@x=0cm}
    \anchor{center}     {\pgfpointorigin}
    \anchor{out 2}      {\northeast \pgfpoint{0.5\pgf@x}{\pgf@y+0.2cm}}
    \anchor{out 1}      {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x \pgfpoint{0.5\pgf@x}{\pgf@y+0.2cm}}
    \anchor{in}         {\southwest \pgf@y=\pgf@y \pgf@x=0cm \pgfpoint{0.5\pgf@x}{\pgf@y-0.2cm}}
    \anchor{text}       {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox+0.5cm}}

    \backgroundpath{
        \pgfsetstrokecolor{black}
        \pgfsetfillcolor{black}
        \pgfsetarrowsstart{}
        \pgfsetarrowsend{}
        % Construct main path
        \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
        \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
        \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}}
        \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
        \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke}
        % construct middle line:
        \southwest \pgf@ya=0cm \pgf@xa=\pgf@x
        \northeast \pgf@yb=0cm \pgf@xb=\pgf@x
        \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} 
        \pgfusepath{stroke}
        % Coverage lable:
        \southwest \pgf@ya=0.5\pgf@y \pgf@xa=0cm
        \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\bf Coverage} 
        \pgfusepath{stroke}
        % Construct Output1:
        \northeast \pgf@ya=\pgf@y \pgf@xa=0.5\pgf@x
        \southwest \pgf@yb=\pgf@y \pgf@xb=0.5\pgf@x
        \pgfpathmoveto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke, fill}
        % Construct Output2:
        \northeast \pgf@ya=\pgf@y \pgf@xa=0.5\pgf@x
        \pgfpathmoveto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke, fill}
        % Construct Input1:
        \southwest \pgf@ya=\pgf@y \pgf@xa=0cm
        \pgfpathmoveto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya-0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya-0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke}
    }
}

%%%%%%%%%%%%%%%%%%%%%%

\pgfkeys{/tikz/split1 top/.initial = 50\%}
\pgfdeclareshape{split1}{%
    % Minimum required anchors:
    \savedanchor{\northeast}{
        \pgf@y=1cm
        \pgf@x=0.75cm
    }
    \savedanchor{\southwest}{
        \pgf@y=-\pgf@y
        \pgf@x=-\pgf@x
    }

    % Special Anchors, that can be calculated from the others (lazy calculation)
    \anchor{south west} {\southwest}
    \anchor{north east} {\northeast}
    \anchor{north west} {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x} 
    \anchor{south east} {\southwest \pgf@y=\pgf@y \pgf@x=-\pgf@x} 
    \anchor{west}       {\southwest \pgf@y=0cm \pgf@x=\pgf@x}
    \anchor{east}       {\northeast \pgf@y=0cm \pgf@x=\pgf@x}
    \anchor{north}      {\northeast \pgf@y=\pgf@y \pgf@x=0cm}
    \anchor{south}      {\southwest \pgf@y=\pgf@y \pgf@x=0cm}
    \anchor{center}     {\pgfpointorigin}
    \anchor{out 1}      {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x \pgfpoint{0.0\pgf@x}{\pgf@y+0.2cm}}
    \anchor{in}         {\southwest \pgf@y=\pgf@y \pgf@x=0cm \pgfpoint{0.5\pgf@x}{\pgf@y-0.2cm}}
    \anchor{text}       {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox+0.5cm}}

    \backgroundpath{
        \pgfsetfillcolor{black}
        \pgfsetstrokecolor{black}
        \pgfsetarrowsstart{}
        \pgfsetarrowsend{}
        % Construct main path
        \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
        \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
        \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}}
        \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
        \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke}
        % Construct middle line:
        \southwest \pgf@ya=0cm \pgf@xa=\pgf@x
        \northeast \pgf@yb=0cm \pgf@xb=\pgf@x
        \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} 
        % Coverage lable:
        \southwest \pgf@ya=0.5\pgf@y \pgf@xa=0cm
        \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\bf Split} 
        \pgfusepath{stroke}
        % Left lable:
        \northeast \pgf@ya=0.5\pgf@y \pgf@xa=0cm
        \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\pgfkeysvalueof{/tikz/split1 top}} 
        \pgfusepath{stroke}
        % Construct Output1:
        \northeast \pgf@ya=\pgf@y \pgf@xa=1.0\pgf@x
        \southwest \pgf@yb=\pgf@y \pgf@xb=0.0\pgf@x
        \pgfpathmoveto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke, fill}
        % Construct Input1:
        \southwest \pgf@ya=\pgf@y \pgf@xa=0cm
        \pgfpathmoveto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya-0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya-0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke}
    }
}

\pgfkeys{/tikz/split2 left/.initial = 50\%}
\pgfkeys{/tikz/split2 right/.initial = 50\%}
\pgfdeclareshape{split2}{%
    % Minimum required anchors:
    \savedanchor{\northeast}{
        \pgf@y=1cm
        \pgf@x=1.5cm
    }
    \savedanchor{\southwest}{
        \pgf@y=-\pgf@y
        \pgf@x=-\pgf@x
    }

    % Special Anchors, that can be calculated from the others (lazy calculation)
    \anchor{south west} {\southwest}
    \anchor{north east} {\northeast}
    \anchor{north west} {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x} 
    \anchor{south east} {\southwest \pgf@y=\pgf@y \pgf@x=-\pgf@x} 
    \anchor{west}       {\southwest \pgf@y=0cm \pgf@x=\pgf@x}
    \anchor{east}       {\northeast \pgf@y=0cm \pgf@x=\pgf@x}
    \anchor{north}      {\northeast \pgf@y=\pgf@y \pgf@x=0cm}
    \anchor{south}      {\southwest \pgf@y=\pgf@y \pgf@x=0cm}
    \anchor{center}     {\pgfpointorigin}
    \anchor{out 2}      {\northeast \pgfpoint{0.5\pgf@x}{\pgf@y+0.2cm}}
    \anchor{out 1}      {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x \pgfpoint{0.5\pgf@x}{\pgf@y+0.2cm}}
    \anchor{in}         {\southwest \pgf@y=\pgf@y \pgf@x=0cm \pgfpoint{0.5\pgf@x}{\pgf@y-0.2cm}}
    \anchor{text}       {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox+0.5cm}}

    \backgroundpath{
        \pgfsetfillcolor{black}
        \pgfsetstrokecolor{black}
        \pgfsetarrowsstart{}
        \pgfsetarrowsend{}
        % Construct main path
        \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
        \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
        \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}}
        \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
        \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke}
        % Construct middle line:
        \southwest \pgf@ya=0cm \pgf@xa=\pgf@x
        \northeast \pgf@yb=0cm \pgf@xb=\pgf@x
        \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} 
        % Vertical Middle Line:
        \northeast \pgf@yb=\pgf@y \pgf@xb=\pgf@x
        \pgfpathmoveto{\pgfpoint{0cm}{0cm}}
        \pgfpathlineto{\pgfpoint{0cm}{\pgf@yb}} 
        \pgfusepath{stroke}
        % Coverage lable:
        \southwest \pgf@ya=0.5\pgf@y \pgf@xa=0cm
        \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\bf Split} 
        \pgfusepath{stroke}
        % Left lable:
        \northeast \pgf@ya=0.5\pgf@y \pgf@xa=-0.5\pgf@x
        \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\pgfkeysvalueof{/tikz/split2 left}} 
        \pgfusepath{stroke}
        % Right lable:
        \northeast \pgf@ya=0.5\pgf@y \pgf@xa=0.5\pgf@x
        \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\pgfkeysvalueof{/tikz/split2 right}} 
        \pgfusepath{stroke}
        % Construct Output1:
        \northeast \pgf@ya=\pgf@y \pgf@xa=0.5\pgf@x
        \southwest \pgf@yb=\pgf@y \pgf@xb=0.5\pgf@x
        \pgfpathmoveto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke, fill}
        % Construct Output2:
        \northeast \pgf@ya=\pgf@y \pgf@xa=0.5\pgf@x
        \pgfpathmoveto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke, fill}
        % Construct Input1:
        \southwest \pgf@ya=\pgf@y \pgf@xa=0cm
        \pgfpathmoveto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya-0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya-0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke}
    }
}

\pgfkeys{/tikz/split3 left/.initial = 50\%}
\pgfkeys{/tikz/split3 middle/.initial = 50\%}
\pgfkeys{/tikz/split3 right/.initial = 50\%}
\pgfdeclareshape{split3}{%
    % Minimum required anchors:
    \savedanchor{\northeast}{
        \pgf@y=1cm
        \pgf@x=1.5cm
    }
    \savedanchor{\southwest}{
        \pgf@y=-\pgf@y
        \pgf@x=-\pgf@x
    }

    % Special Anchors, that can be calculated from the others (lazy calculation)
    \anchor{south west} {\southwest}
    \anchor{north east} {\northeast}
    \anchor{north west} {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x} 
    \anchor{south east} {\southwest \pgf@y=\pgf@y \pgf@x=-\pgf@x} 
    \anchor{west}       {\southwest \pgf@y=0cm \pgf@x=\pgf@x}
    \anchor{east}       {\northeast \pgf@y=0cm \pgf@x=\pgf@x}
    \anchor{north}      {\northeast \pgf@y=\pgf@y \pgf@x=0cm}
    \anchor{south}      {\southwest \pgf@y=\pgf@y \pgf@x=0cm}
    \anchor{center}     {\pgfpointorigin}
    \anchor{out 1}      {\northeast \pgf@y=\pgf@y \pgf@x=-\pgf@x \pgfpoint{0.666\pgf@x}{\pgf@y+0.2cm}}
    \anchor{out 2}      {\northeast \pgfpoint{0.0\pgf@x}{\pgf@y+0.2cm}}
    \anchor{out 3}      {\northeast \pgfpoint{0.666\pgf@x}{\pgf@y+0.2cm}}
    \anchor{in}         {\southwest \pgf@y=\pgf@y \pgf@x=0cm \pgfpoint{0.5\pgf@x}{\pgf@y-0.2cm}}
    \anchor{text}       {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox+0.5cm}}

    \backgroundpath{
        \pgfsetfillcolor{black}
        \pgfsetstrokecolor{black}
        \pgfsetarrowsstart{}
        \pgfsetarrowsend{}
        % Construct main path
        \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
        \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
        \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}}
        \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
        \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke}
        % Construct middle line:
        \southwest \pgf@ya=0cm \pgf@xa=\pgf@x
        \northeast \pgf@yb=0cm \pgf@xb=\pgf@x
        \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} 
        % Vertical Middle Lines:
        \southwest \pgf@ya=0cm \pgf@xa=\pgf@x
        \northeast \pgf@yb=\pgf@y \pgf@xb=\pgf@x
        \pgfpathmoveto{\pgfpoint{\pgf@xa+1cm}{0cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa+1cm}{\pgf@yb}} 
        \pgfusepath{stroke}
        %
        \northeast \pgf@ya=\pgf@y \pgf@xa=\pgf@x
        \southwest \pgf@yb=\pgf@y \pgf@xb=\pgf@x
        \pgfpathmoveto{\pgfpoint{\pgf@xa-1cm}{0cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-1cm}{\pgf@ya}} 
        \pgfusepath{stroke}
        % Coverage lable:
        \southwest \pgf@ya=0.5\pgf@y \pgf@xa=0cm
        \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\bf Split} 
        \pgfusepath{stroke}
        % Left lable:
        \northeast \pgf@ya=0.5\pgf@y \pgf@xa=-0.666\pgf@x
        \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\pgfkeysvalueof{/tikz/split3 left}} 
        \pgfusepath{stroke}
        % Middle lable:
        \northeast \pgf@ya=0.5\pgf@y \pgf@xa=0.000\pgf@x
        \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\pgfkeysvalueof{/tikz/split3 middle}} 
        \pgfusepath{stroke}
        % Right lable:
        \northeast \pgf@ya=0.5\pgf@y \pgf@xa=0.666\pgf@x
        \pgftext[at=\pgfpoint{\pgf@xa}{\pgf@ya}]{\pgfkeysvalueof{/tikz/split3 right}} 
        \pgfusepath{stroke}
        % Construct Output1:
        \northeast \pgf@ya=\pgf@y \pgf@xa=0.666\pgf@x
        \southwest \pgf@yb=\pgf@y \pgf@xb=0.666\pgf@x
        \pgfpathmoveto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke, fill}
        % Construct Output2:
        \northeast \pgf@ya=\pgf@y \pgf@xa=0.0\pgf@x
        \southwest \pgf@yb=\pgf@y \pgf@xb=0.0\pgf@x
        \pgfpathmoveto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xb+0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xb-0.1cm}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke, fill}
        % Construct Output3:
        \northeast \pgf@ya=\pgf@y \pgf@xa=0.666\pgf@x
        \pgfpathmoveto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya+0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke, fill}
        % Construct Input1:
        \southwest \pgf@ya=\pgf@y \pgf@xa=0cm
        \pgfpathmoveto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xa+0.1cm}{\pgf@ya-0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya-0.2cm}}
        \pgfpathlineto{\pgfpoint{\pgf@xa-0.1cm}{\pgf@ya}}
        \pgfpathclose
        \pgfusepath{stroke}
    }
}
\makeatother