// This file is part of www.nand2tetris.org // and the book "The Elements of Computing Systems" // by Nisan and Schocken, MIT Press. // File name: projects/03/a/Register.hdl /** * 16-bit register: * If load[t] == 1 then out[t+1] = in[t] * else out does not change */ CHIP Register { IN in[16], load; OUT out[16]; PARTS: // Put your code here: Not(in=load, out=nload); And(a=in[0], b=load, out=w1b0); And(a=b0, b=nload, out=w2b0); Or(a=w1b0, b=w2b0, out=w3b0); DFF(in=w3b0, out=b0, out=out[0]); And(a=in[1], b=load, out=w1b1); And(a=b1, b=nload, out=w2b1); Or(a=w1b1, b=w2b1, out=w3b1); DFF(in=w3b1, out=b1, out=out[1]); And(a=in[2], b=load, out=w1b2); And(a=b2, b=nload, out=w2b2); Or(a=w1b2, b=w2b2, out=w3b2); DFF(in=w3b2, out=b2, out=out[2]); And(a=in[3], b=load, out=w1b3); And(a=b3, b=nload, out=w2b3); Or(a=w1b3, b=w2b3, out=w3b3); DFF(in=w3b3, out=b3, out=out[3]); And(a=in[4], b=load, out=w1b4); And(a=b4, b=nload, out=w2b4); Or(a=w1b4, b=w2b4, out=w3b4); DFF(in=w3b4, out=b4, out=out[4]); And(a=in[5], b=load, out=w1b5); And(a=b5, b=nload, out=w2b5); Or(a=w1b5, b=w2b5, out=w3b5); DFF(in=w3b5, out=b5, out=out[5]); And(a=in[6], b=load, out=w1b6); And(a=b6, b=nload, out=w2b6); Or(a=w1b6, b=w2b6, out=w3b6); DFF(in=w3b6, out=b6, out=out[6]); And(a=in[7], b=load, out=w1b7); And(a=b7, b=nload, out=w2b7); Or(a=w1b7, b=w2b7, out=w3b7); DFF(in=w3b7, out=b7, out=out[7]); And(a=in[8], b=load, out=w1b8); And(a=b8, b=nload, out=w2b8); Or(a=w1b8, b=w2b8, out=w3b8); DFF(in=w3b8, out=b8, out=out[8]); And(a=in[9], b=load, out=w1b9); And(a=b9, b=nload, out=w2b9); Or(a=w1b9, b=w2b9, out=w3b9); DFF(in=w3b9, out=b9, out=out[9]); And(a=in[10], b=load, out=w1b10); And(a=b10, b=nload, out=w2b10); Or(a=w1b10, b=w2b10, out=w3b10); DFF(in=w3b10, out=b10, out=out[10]); And(a=in[11], b=load, out=w1b11); And(a=b11, b=nload, out=w2b11); Or(a=w1b11, b=w2b11, out=w3b11); DFF(in=w3b11, out=b11, out=out[11]); And(a=in[12], b=load, out=w1b12); And(a=b12, b=nload, out=w2b12); Or(a=w1b12, b=w2b12, out=w3b12); DFF(in=w3b12, out=b12, out=out[12]); And(a=in[13], b=load, out=w1b13); And(a=b13, b=nload, out=w2b13); Or(a=w1b13, b=w2b13, out=w3b13); DFF(in=w3b13, out=b13, out=out[13]); And(a=in[14], b=load, out=w1b14); And(a=b14, b=nload, out=w2b14); Or(a=w1b14, b=w2b14, out=w3b14); DFF(in=w3b14, out=b14, out=out[14]); And(a=in[15], b=load, out=w1b15); And(a=b15, b=nload, out=w2b15); Or(a=w1b15, b=w2b15, out=w3b15); DFF(in=w3b15, out=b15, out=out[15]); }