My though process is just to do what the table shows or the worksheet.
Based on the input bits zero or not zero x,y , negate or not negate x,y , then or or and x,y , then not out or leave it alone. I feel like i need to use dmux to start with above, but still cannot see the whole picture.
* The ALU. Computes a pre-defined set of functions out = f(x,y)
* where x and y are two 16-bit inputs. The function f is selected
* by a set of 6 control bits denoted zx, nx, zy, ny, f, no.
* The ALU operation can be described using the following pseudocode:
* if zx=1 set x = 0 // 16-bit zero constant
* if nx=1 set x = !x // Bit-wise negation
* if zy=1 set y = 0 // 16-bit zero constant
* if ny=1 set y = !y // Bit-wise negation
* if f=1 set out = x + y // Integer 2's complement addition
* else set out = x & y // Bit-wise And
* if no=1 set out = !out // Bit-wise negation
You are thinking correctly. You need to do what the the pseudo-code in the ALU.hdl comments shows, in that order. Note that in hardware you cannot replace the value of a "variable" since it is a physical wire so the pseudo-code should really look more like
if zx=1 then x1=0 else x1=x
if nz=1 then x2=!x1 else x2=x1
Each if-then-else is a choice between two 16-bit values. You mada a part in project 1 that does that...