So... the canonical representation of the Mux looked a bit like overkill as a specification, and sure enough, after staring at the truth table for a few minutes a much simpler specification popped out, and lo and behold, it works :).
I know I'm supposed to be embracing ignorance ;) but the proof of why the simpler implementation is equivalent to the canonical representation is eluding me (it's over 20 years since I studied any mathematics). I'm thinking ahead to more complex designs where a simpler specification is non-obvious. Can anyone recommend a reference/text for what I'm trying to achieve? Should I just invest some time learning the laws of Boolean algebra and work through examples of those...
In general, it's enough that two functions have the same truth table to prove that
they are the same. Since we don't want to give away the Mux, consider instead the
"Greater than or equal to 2" function. This function outputs 1 if two or more
of its inputs are 1.
i see now that i could have switched the AB '10' column with the '11' column without affecting the results. Is there some way to know ahead of time the most optimal way to setup the K-map for the future in the case of more complex versions?
For Karnaugh maps to work correctly, the rows and columns must be arranged in a specific order so that when you move between adjacent cells left/right or up/down only one variable changes state. When you label the rows or columns in binary, you need to use Gray code order, not normal counting order.
2-bit Gray code is: 00 01 10 11
3-bit Gray code is: 000 001 011 010 110 111 101 100