SpoonByte wrote
Its can get tough and I've sometimes spent a few days trying different ideas before stumbling on the answer and sometimes I'd have to strategically give up (I couldn't figure out the Mux myself and had to look it up after spending a week on it with like a dozen different attempts).
Don't take this the wrong way, but stumbling around until you happen to come across something that happens to work is not a good way to do any kind of engineering. Having said that, sometimes you have little choice and, at the end of the day, you've gotta do what you've gotta do. Regardless of how you get to a solution, however, there is plenty of room for true learning to take place if you then make the time and effort to understand why that solution works, and even better, how you could have gotten to that solution from your initial starting point.
It reminds me of some of the math proofs (and other problems) that I've tackled over the years. There have been times that I couldn't figure out how to get from the starting point to the ending point, but I could figure out how to get from the ending point back to the starting point. That gave me a roadmap to use in going the other way and there have been quite a few "Ah hah!" moments when I did so -- insights that I would otherwise have missed had I just settled for having found a solution.
One thing I found that helped me with the ALU was that I went through each of the 18 functions and verified that the specific combo of control bits ACTUALLY produced the desired output. And for a few of them I took it a step further and covered up Table 2.5b and tried to predict what values for the control bits I would need to get the desired output. I think taking this extra time helped me get a better intuition for what the ALU is doing under the hood.
This is a very good exercise -- in fact, I would recommend taking it a step further and working through all 64 of the functions. There are a couple of interesting nuggets in there. If you set up a spreadsheet, you can have it do most of the grunt work for you to produce an expression for each combination that you can then examine and simplify.