`ifdef LV_scanmodel
module MUX41_UDP (MUXOUT, SEL0, SEL1, DATA0, DATA1, DATA2, DATA3);
    output MUXOUT;
    input SEL0;
    input SEL1;
    input DATA0;
    input DATA1;
    input DATA2;
    input DATA3;

    LV_MUX mux1 (.Y(mux1_out), .S(SEL0), .A(DATA0), .B(DATA2));
    LV_MUX mux2 (.Y(mux2_out), .S(SEL0), .A(DATA1), .B(DATA3));
    LV_MUX mux3 (.Y(MUXOUT), .S(SEL1), .A(mux1_out), .B(mux2_out));

endmodule

`else
primitive MUX41_UDP (MUXOUT, SEL0, SEL1, DATA0, DATA1, DATA2, DATA3);
    output MUXOUT;
    input SEL0;
    input SEL1;
    input DATA0;
    input DATA1;
    input DATA2;
    input DATA3;
    table
         0    1    ?     0     ?     ?    :  0 ;
         0    1    ?     1     ?     ?    :  1 ;
         1    0    ?     ?     0     ?    :  0 ;
         1    0    ?     ?     1     ?    :  1 ;
         1    1    ?     ?     ?     0    :  0 ;
         1    1    ?     ?     ?     1    :  1 ;
         x    0    0     ?     0     ?    :  0 ;
         x    0    1     ?     1     ?    :  1 ;
         x    1    ?     0     ?     0    :  0 ;
         x    1    ?     1     ?     1    :  1 ;
         0    x    0     0     ?     ?    :  0 ;
         0    x    1     1     ?     ?    :  1 ;
         1    x    ?     ?     0     0    :  0 ;
         1    x    ?     ?     1     1    :  1 ;
         x    x    0     0     0     0    :  0 ;
         x    x    1     1     1     1    :  1 ;
    endtable
endprimitive

`endif
