Login  Register

Re: ALU Struggle

Posted by cadet1620 on Apr 19, 2014; 3:46pm
URL: http://nand2tetris-questions-and-answers-forum.52.s1.nabble.com/ALU-Struggle-tp4028020p4028025.html

bwspot wrote
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...

--Mark