mirror of
https://github.com/StepanovPlaton/Nand2Tetris.git
synced 2026-04-03 20:30:47 +04:00
Complete project 2
This commit is contained in:
16
Assignments/1_Boolean_Logic/And.hdl
Normal file
16
Assignments/1_Boolean_Logic/And.hdl
Normal file
@@ -0,0 +1,16 @@
|
||||
// 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/1/And.hdl
|
||||
/**
|
||||
* And gate:
|
||||
* if (a and b) out = 1, else out = 0
|
||||
*/
|
||||
CHIP And {
|
||||
IN a, b;
|
||||
OUT out;
|
||||
|
||||
PARTS:
|
||||
Nand(a=a, b=b, out=outn);
|
||||
Not(in=outn, out=out);
|
||||
}
|
||||
31
Assignments/1_Boolean_Logic/And16.hdl
Normal file
31
Assignments/1_Boolean_Logic/And16.hdl
Normal file
@@ -0,0 +1,31 @@
|
||||
// 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/1/And16.hdl
|
||||
/**
|
||||
* 16-bit And gate:
|
||||
* for i = 0, ..., 15:
|
||||
* out[i] = a[i] And b[i]
|
||||
*/
|
||||
CHIP And16 {
|
||||
IN a[16], b[16];
|
||||
OUT out[16];
|
||||
|
||||
PARTS:
|
||||
And(a=a[0], b=b[0], out=out[0]);
|
||||
And(a=a[1], b=b[1], out=out[1]);
|
||||
And(a=a[2], b=b[2], out=out[2]);
|
||||
And(a=a[3], b=b[3], out=out[3]);
|
||||
And(a=a[4], b=b[4], out=out[4]);
|
||||
And(a=a[5], b=b[5], out=out[5]);
|
||||
And(a=a[6], b=b[6], out=out[6]);
|
||||
And(a=a[7], b=b[7], out=out[7]);
|
||||
And(a=a[8], b=b[8], out=out[8]);
|
||||
And(a=a[9], b=b[9], out=out[9]);
|
||||
And(a=a[10], b=b[10], out=out[10]);
|
||||
And(a=a[11], b=b[11], out=out[11]);
|
||||
And(a=a[12], b=b[12], out=out[12]);
|
||||
And(a=a[13], b=b[13], out=out[13]);
|
||||
And(a=a[14], b=b[14], out=out[14]);
|
||||
And(a=a[15], b=b[15], out=out[15]);
|
||||
}
|
||||
18
Assignments/1_Boolean_Logic/DMux.hdl
Normal file
18
Assignments/1_Boolean_Logic/DMux.hdl
Normal file
@@ -0,0 +1,18 @@
|
||||
// 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/1/DMux.hdl
|
||||
/**
|
||||
* Demultiplexor:
|
||||
* [a, b] = [in, 0] if sel = 0
|
||||
* [0, in] if sel = 1
|
||||
*/
|
||||
CHIP DMux {
|
||||
IN in, sel;
|
||||
OUT a, b;
|
||||
|
||||
PARTS:
|
||||
Not(in=sel, out=nsel);
|
||||
And(a=nsel, b=in, out=a);
|
||||
And(a=sel, b=in, out=b);
|
||||
}
|
||||
20
Assignments/1_Boolean_Logic/DMux4Way.hdl
Normal file
20
Assignments/1_Boolean_Logic/DMux4Way.hdl
Normal file
@@ -0,0 +1,20 @@
|
||||
// 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/1/DMux4Way.hdl
|
||||
/**
|
||||
* 4-way demultiplexor:
|
||||
* [a, b, c, d] = [in, 0, 0, 0] if sel = 00
|
||||
* [0, in, 0, 0] if sel = 01
|
||||
* [0, 0, in, 0] if sel = 10
|
||||
* [0, 0, 0, in] if sel = 11
|
||||
*/
|
||||
CHIP DMux4Way {
|
||||
IN in, sel[2];
|
||||
OUT a, b, c, d;
|
||||
|
||||
PARTS:
|
||||
DMux(in=in, sel=sel[1], a=x, b=y);
|
||||
DMux(in=x, sel=sel[0], a=a, b=b);
|
||||
DMux(in=y, sel=sel[0], a=c, b=d);
|
||||
}
|
||||
24
Assignments/1_Boolean_Logic/DMux8Way.hdl
Normal file
24
Assignments/1_Boolean_Logic/DMux8Way.hdl
Normal file
@@ -0,0 +1,24 @@
|
||||
// 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/1/DMux8Way.hdl
|
||||
/**
|
||||
* 8-way demultiplexor:
|
||||
* [a, b, c, d, e, f, g, h] = [in, 0, 0, 0, 0, 0, 0, 0] if sel = 000
|
||||
* [0, in, 0, 0, 0, 0, 0, 0] if sel = 001
|
||||
* [0, 0, in, 0, 0, 0, 0, 0] if sel = 010
|
||||
* [0, 0, 0, in, 0, 0, 0, 0] if sel = 011
|
||||
* [0, 0, 0, 0, in, 0, 0, 0] if sel = 100
|
||||
* [0, 0, 0, 0, 0, in, 0, 0] if sel = 101
|
||||
* [0, 0, 0, 0, 0, 0, in, 0] if sel = 110
|
||||
* [0, 0, 0, 0, 0, 0, 0, in] if sel = 111
|
||||
*/
|
||||
CHIP DMux8Way {
|
||||
IN in, sel[3];
|
||||
OUT a, b, c, d, e, f, g, h;
|
||||
|
||||
PARTS:
|
||||
DMux(in=in, sel=sel[2], a=x, b=y);
|
||||
DMux4Way(in=x, sel=sel[0..1], a=a, b=b, c=c, d=d);
|
||||
DMux4Way(in=y, sel=sel[0..1], a=e, b=f, c=g, d=h);
|
||||
}
|
||||
18
Assignments/1_Boolean_Logic/Mux.hdl
Normal file
18
Assignments/1_Boolean_Logic/Mux.hdl
Normal file
@@ -0,0 +1,18 @@
|
||||
// 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/1/Mux.hdl
|
||||
/**
|
||||
* Multiplexor:
|
||||
* if (sel = 0) out = a, else out = b
|
||||
*/
|
||||
CHIP Mux {
|
||||
IN a, b, sel;
|
||||
OUT out;
|
||||
|
||||
PARTS:
|
||||
Not(in=sel, out=nsel);
|
||||
And(a=nsel, b=a, out=aa);
|
||||
And(a=sel, b=b, out=bb);
|
||||
Or(a=aa, b=bb, out=out);
|
||||
}
|
||||
31
Assignments/1_Boolean_Logic/Mux16.hdl
Normal file
31
Assignments/1_Boolean_Logic/Mux16.hdl
Normal file
@@ -0,0 +1,31 @@
|
||||
// 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/1/Mux16.hdl
|
||||
/**
|
||||
* 16-bit multiplexor:
|
||||
* for i = 0, ..., 15:
|
||||
* if (sel = 0) out[i] = a[i], else out[i] = b[i]
|
||||
*/
|
||||
CHIP Mux16 {
|
||||
IN a[16], b[16], sel;
|
||||
OUT out[16];
|
||||
|
||||
PARTS:
|
||||
Mux(a=a[0], b=b[0], sel=sel, out=out[0]);
|
||||
Mux(a=a[1], b=b[1], sel=sel, out=out[1]);
|
||||
Mux(a=a[2], b=b[2], sel=sel, out=out[2]);
|
||||
Mux(a=a[3], b=b[3], sel=sel, out=out[3]);
|
||||
Mux(a=a[4], b=b[4], sel=sel, out=out[4]);
|
||||
Mux(a=a[5], b=b[5], sel=sel, out=out[5]);
|
||||
Mux(a=a[6], b=b[6], sel=sel, out=out[6]);
|
||||
Mux(a=a[7], b=b[7], sel=sel, out=out[7]);
|
||||
Mux(a=a[8], b=b[8], sel=sel, out=out[8]);
|
||||
Mux(a=a[9], b=b[9], sel=sel, out=out[9]);
|
||||
Mux(a=a[10], b=b[10], sel=sel, out=out[10]);
|
||||
Mux(a=a[11], b=b[11], sel=sel, out=out[11]);
|
||||
Mux(a=a[12], b=b[12], sel=sel, out=out[12]);
|
||||
Mux(a=a[13], b=b[13], sel=sel, out=out[13]);
|
||||
Mux(a=a[14], b=b[14], sel=sel, out=out[14]);
|
||||
Mux(a=a[15], b=b[15], sel=sel, out=out[15]);
|
||||
}
|
||||
20
Assignments/1_Boolean_Logic/Mux4Way16.hdl
Normal file
20
Assignments/1_Boolean_Logic/Mux4Way16.hdl
Normal file
@@ -0,0 +1,20 @@
|
||||
// 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/1/Mux4Way16.hdl
|
||||
/**
|
||||
* 4-way 16-bit multiplexor:
|
||||
* out = a if sel = 00
|
||||
* b if sel = 01
|
||||
* c if sel = 10
|
||||
* d if sel = 11
|
||||
*/
|
||||
CHIP Mux4Way16 {
|
||||
IN a[16], b[16], c[16], d[16], sel[2];
|
||||
OUT out[16];
|
||||
|
||||
PARTS:
|
||||
Mux16(a=a, b=b, sel=sel[0], out=x);
|
||||
Mux16(a=c, b=d, sel=sel[0], out=y);
|
||||
Mux16(a=x, b=y, sel=sel[1], out=out);
|
||||
}
|
||||
26
Assignments/1_Boolean_Logic/Mux8Way16.hdl
Normal file
26
Assignments/1_Boolean_Logic/Mux8Way16.hdl
Normal file
@@ -0,0 +1,26 @@
|
||||
// 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/1/Mux8Way16.hdl
|
||||
/**
|
||||
* 8-way 16-bit multiplexor:
|
||||
* out = a if sel = 000
|
||||
* b if sel = 001
|
||||
* c if sel = 010
|
||||
* d if sel = 011
|
||||
* e if sel = 100
|
||||
* f if sel = 101
|
||||
* g if sel = 110
|
||||
* h if sel = 111
|
||||
*/
|
||||
CHIP Mux8Way16 {
|
||||
IN a[16], b[16], c[16], d[16],
|
||||
e[16], f[16], g[16], h[16],
|
||||
sel[3];
|
||||
OUT out[16];
|
||||
|
||||
PARTS:
|
||||
Mux4Way16(a=a, b=b, c=c, d=d, sel=sel[0..1], out=x);
|
||||
Mux4Way16(a=e, b=f, c=g, d=h, sel=sel[0..1], out=y);
|
||||
Mux16(a=x, b=y, sel=sel[2], out=out);
|
||||
}
|
||||
15
Assignments/1_Boolean_Logic/Not.hdl
Normal file
15
Assignments/1_Boolean_Logic/Not.hdl
Normal file
@@ -0,0 +1,15 @@
|
||||
// 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/1/Not.hdl
|
||||
/**
|
||||
* Not gate:
|
||||
* if (in) out = 0, else out = 1
|
||||
*/
|
||||
CHIP Not {
|
||||
IN in;
|
||||
OUT out;
|
||||
|
||||
PARTS:
|
||||
Nand(a=in, b=in, out=out);
|
||||
}
|
||||
31
Assignments/1_Boolean_Logic/Not16.hdl
Normal file
31
Assignments/1_Boolean_Logic/Not16.hdl
Normal file
@@ -0,0 +1,31 @@
|
||||
// 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/01/Not16.hdl
|
||||
/**
|
||||
* 16-bit Not gate:
|
||||
* for i = 0, ..., 15:
|
||||
* out[i] = Not(a[i])
|
||||
*/
|
||||
CHIP Not16 {
|
||||
IN in[16];
|
||||
OUT out[16];
|
||||
|
||||
PARTS:
|
||||
Not(in=in[0], out=out[0]);
|
||||
Not(in=in[1], out=out[1]);
|
||||
Not(in=in[2], out=out[2]);
|
||||
Not(in=in[3], out=out[3]);
|
||||
Not(in=in[4], out=out[4]);
|
||||
Not(in=in[5], out=out[5]);
|
||||
Not(in=in[6], out=out[6]);
|
||||
Not(in=in[7], out=out[7]);
|
||||
Not(in=in[8], out=out[8]);
|
||||
Not(in=in[9], out=out[9]);
|
||||
Not(in=in[10], out=out[10]);
|
||||
Not(in=in[11], out=out[11]);
|
||||
Not(in=in[12], out=out[12]);
|
||||
Not(in=in[13], out=out[13]);
|
||||
Not(in=in[14], out=out[14]);
|
||||
Not(in=in[15], out=out[15]);
|
||||
}
|
||||
17
Assignments/1_Boolean_Logic/Or.hdl
Normal file
17
Assignments/1_Boolean_Logic/Or.hdl
Normal file
@@ -0,0 +1,17 @@
|
||||
// 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/1/Or.hdl
|
||||
/**
|
||||
* Or gate:
|
||||
* if (a or b) out = 1, else out = 0
|
||||
*/
|
||||
CHIP Or {
|
||||
IN a, b;
|
||||
OUT out;
|
||||
|
||||
PARTS:
|
||||
Not(in=a, out=na);
|
||||
Not(in=b, out=nb);
|
||||
Nand(a=na, b=nb, out=out);
|
||||
}
|
||||
31
Assignments/1_Boolean_Logic/Or16.hdl
Normal file
31
Assignments/1_Boolean_Logic/Or16.hdl
Normal file
@@ -0,0 +1,31 @@
|
||||
// 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/1/Or16.hdl
|
||||
/**
|
||||
* 16-bit Or gate:
|
||||
* for i = 0, ..., 15:
|
||||
* out[i] = a[i] Or b[i]
|
||||
*/
|
||||
CHIP Or16 {
|
||||
IN a[16], b[16];
|
||||
OUT out[16];
|
||||
|
||||
PARTS:
|
||||
Or(a=a[0], b=b[0], out=out[0]);
|
||||
Or(a=a[1], b=b[1], out=out[1]);
|
||||
Or(a=a[2], b=b[2], out=out[2]);
|
||||
Or(a=a[3], b=b[3], out=out[3]);
|
||||
Or(a=a[4], b=b[4], out=out[4]);
|
||||
Or(a=a[5], b=b[5], out=out[5]);
|
||||
Or(a=a[6], b=b[6], out=out[6]);
|
||||
Or(a=a[7], b=b[7], out=out[7]);
|
||||
Or(a=a[8], b=b[8], out=out[8]);
|
||||
Or(a=a[9], b=b[9], out=out[9]);
|
||||
Or(a=a[10], b=b[10], out=out[10]);
|
||||
Or(a=a[11], b=b[11], out=out[11]);
|
||||
Or(a=a[12], b=b[12], out=out[12]);
|
||||
Or(a=a[13], b=b[13], out=out[13]);
|
||||
Or(a=a[14], b=b[14], out=out[14]);
|
||||
Or(a=a[15], b=b[15], out=out[15]);
|
||||
}
|
||||
21
Assignments/1_Boolean_Logic/Or8Way.hdl
Normal file
21
Assignments/1_Boolean_Logic/Or8Way.hdl
Normal file
@@ -0,0 +1,21 @@
|
||||
// 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/1/Or8Way.hdl
|
||||
/**
|
||||
* 8-way Or gate:
|
||||
* out = in[0] Or in[1] Or ... Or in[7]
|
||||
*/
|
||||
CHIP Or8Way {
|
||||
IN in[8];
|
||||
OUT out;
|
||||
|
||||
PARTS:
|
||||
Or(a=in[0], b=in[1], out=x1);
|
||||
Or(a=in[2], b=in[3], out=x2);
|
||||
Or(a=in[4], b=in[5], out=x3);
|
||||
Or(a=in[6], b=in[7], out=x4);
|
||||
Or(a=x1, b=x2, out=y1);
|
||||
Or(a=x3, b=x4, out=y2);
|
||||
Or(a=y1, b=y2, out=out);
|
||||
}
|
||||
17
Assignments/1_Boolean_Logic/Xor.hdl
Normal file
17
Assignments/1_Boolean_Logic/Xor.hdl
Normal file
@@ -0,0 +1,17 @@
|
||||
// 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/1/Xor.hdl
|
||||
/**
|
||||
* Exclusive-or gate:
|
||||
* if ((a and Not(b)) or (Not(a) and b)) out = 1, else out = 0
|
||||
*/
|
||||
CHIP Xor {
|
||||
IN a, b;
|
||||
OUT out;
|
||||
|
||||
PARTS:
|
||||
Nand(a=a,b=b,out=nab);
|
||||
Or(a=a,b=b,out=orab);
|
||||
And(a=nab, b=orab, out=out);
|
||||
}
|
||||
64
Assignments/2_Boolean_Arithmetic/ALU.hdl
Normal file
64
Assignments/2_Boolean_Arithmetic/ALU.hdl
Normal file
@@ -0,0 +1,64 @@
|
||||
// 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/2/ALU.hdl
|
||||
/**
|
||||
* ALU (Arithmetic Logic Unit):
|
||||
* Computes out = one of the following functions:
|
||||
* 0, 1, -1,
|
||||
* x, y, !x, !y, -x, -y,
|
||||
* x + 1, y + 1, x - 1, y - 1,
|
||||
* x + y, x - y, y - x,
|
||||
* x & y, x | y
|
||||
* on the 16-bit inputs x, y,
|
||||
* according to the input bits zx, nx, zy, ny, f, no.
|
||||
* In addition, computes the two output bits:
|
||||
* if (out == 0) zr = 1, else zr = 0
|
||||
* if (out < 0) ng = 1, else ng = 0
|
||||
*/
|
||||
// Implementation: Manipulates the x and y inputs
|
||||
// and operates on the resulting values, as follows:
|
||||
// if (zx == 1) sets x = 0 // 16-bit constant
|
||||
// if (nx == 1) sets x = !x // bitwise not
|
||||
// if (zy == 1) sets y = 0 // 16-bit constant
|
||||
// if (ny == 1) sets y = !y // bitwise not
|
||||
// if (f == 1) sets out = x + y // integer 2's complement addition
|
||||
// if (f == 0) sets out = x & y // bitwise and
|
||||
// if (no == 1) sets out = !out // bitwise not
|
||||
|
||||
CHIP ALU {
|
||||
IN
|
||||
x[16], y[16], // 16-bit inputs
|
||||
zx, // zero the x input?
|
||||
nx, // negate the x input?
|
||||
zy, // zero the y input?
|
||||
ny, // negate the y input?
|
||||
f, // compute (out = x + y) or (out = x & y)?
|
||||
no; // negate the out output?
|
||||
OUT
|
||||
out[16], // 16-bit output
|
||||
zr, // if (out == 0) equals 1, else 0
|
||||
ng; // if (out < 0) equals 1, else 0
|
||||
|
||||
PARTS:
|
||||
Mux16(a=x, b=false, sel=zx, out=zxr);
|
||||
Not16(in=zxr, out=nxr);
|
||||
Mux16(a=zxr, b=nxr, sel=nx, out=xr);
|
||||
|
||||
Mux16(a=y, b=false, sel=zy, out=zyr);
|
||||
Not16(in=zyr, out=nyr);
|
||||
Mux16(a=zyr, b=nyr, sel=ny, out=yr);
|
||||
|
||||
Add16(a=xr, b=yr, out=s);
|
||||
And16(a=xr, b=yr, out=a);
|
||||
Mux16(a=a, b=s, sel=f, out=r);
|
||||
|
||||
Not16(in=r, out=nr);
|
||||
Mux16(a=r, b=nr, sel=no, out=out, out[15]=ng, out[0..7]=r1, out[8..15]=r2);
|
||||
|
||||
Or8Way(in=r1, out=o1);
|
||||
Or8Way(in=r2, out=o2);
|
||||
Or(a=o1, b=o2, out=nzr);
|
||||
Not(in=nzr, out=zr);
|
||||
|
||||
}
|
||||
30
Assignments/2_Boolean_Arithmetic/Add16.hdl
Normal file
30
Assignments/2_Boolean_Arithmetic/Add16.hdl
Normal file
@@ -0,0 +1,30 @@
|
||||
// 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/2/Add16.hdl
|
||||
/**
|
||||
* 16-bit adder: Adds two 16-bit two's complement values.
|
||||
* The most significant carry bit is ignored.
|
||||
*/
|
||||
CHIP Add16 {
|
||||
IN a[16], b[16];
|
||||
OUT out[16];
|
||||
|
||||
PARTS:
|
||||
HalfAdder(a=a[0], b=b[0], sum=out[0], carry=c1);
|
||||
FullAdder(a=a[1], b=b[1], c=c1, sum=out[1], carry=c2);
|
||||
FullAdder(a=a[2], b=b[2], c=c2, sum=out[2], carry=c3);
|
||||
FullAdder(a=a[3], b=b[3], c=c3, sum=out[3], carry=c4);
|
||||
FullAdder(a=a[4], b=b[4], c=c4, sum=out[4], carry=c5);
|
||||
FullAdder(a=a[5], b=b[5], c=c5, sum=out[5], carry=c6);
|
||||
FullAdder(a=a[6], b=b[6], c=c6, sum=out[6], carry=c7);
|
||||
FullAdder(a=a[7], b=b[7], c=c7, sum=out[7], carry=c8);
|
||||
FullAdder(a=a[8], b=b[8], c=c8, sum=out[8], carry=c9);
|
||||
FullAdder(a=a[9], b=b[9], c=c9, sum=out[9], carry=c10);
|
||||
FullAdder(a=a[10], b=b[10], c=c10, sum=out[10], carry=c11);
|
||||
FullAdder(a=a[11], b=b[11], c=c11, sum=out[11], carry=c12);
|
||||
FullAdder(a=a[12], b=b[12], c=c12, sum=out[12], carry=c13);
|
||||
FullAdder(a=a[13], b=b[13], c=c13, sum=out[13], carry=c14);
|
||||
FullAdder(a=a[14], b=b[14], c=c14, sum=out[14], carry=c15);
|
||||
FullAdder(a=a[15], b=b[15], c=c15, sum=out[15], carry=c16);
|
||||
}
|
||||
17
Assignments/2_Boolean_Arithmetic/FullAdder.hdl
Normal file
17
Assignments/2_Boolean_Arithmetic/FullAdder.hdl
Normal file
@@ -0,0 +1,17 @@
|
||||
// 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/2/FullAdder.hdl
|
||||
/**
|
||||
* Computes the sum of three bits.
|
||||
*/
|
||||
CHIP FullAdder {
|
||||
IN a, b, c; // 1-bit inputs
|
||||
OUT sum, // Right bit of a + b + c
|
||||
carry; // Left bit of a + b + c
|
||||
|
||||
PARTS:
|
||||
HalfAdder(a=a, b=b, sum=x, carry=c1);
|
||||
HalfAdder(a=x, b=c, sum=sum, carry=c2);
|
||||
Or(a=c1, b=c2, out=carry);
|
||||
}
|
||||
16
Assignments/2_Boolean_Arithmetic/HalfAdder.hdl
Normal file
16
Assignments/2_Boolean_Arithmetic/HalfAdder.hdl
Normal file
@@ -0,0 +1,16 @@
|
||||
// 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/2/HalfAdder.hdl
|
||||
/**
|
||||
* Computes the sum of two bits.
|
||||
*/
|
||||
CHIP HalfAdder {
|
||||
IN a, b; // 1-bit inputs
|
||||
OUT sum, // Right bit of a + b
|
||||
carry; // Left bit of a + b
|
||||
|
||||
PARTS:
|
||||
Xor(a=a, b=b, out=sum);
|
||||
And(a=a, b=b, out=carry);
|
||||
}
|
||||
15
Assignments/2_Boolean_Arithmetic/Inc16.hdl
Normal file
15
Assignments/2_Boolean_Arithmetic/Inc16.hdl
Normal file
@@ -0,0 +1,15 @@
|
||||
// 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/2/Inc16.hdl
|
||||
/**
|
||||
* 16-bit incrementer:
|
||||
* out = in + 1
|
||||
*/
|
||||
CHIP Inc16 {
|
||||
IN in[16];
|
||||
OUT out[16];
|
||||
|
||||
PARTS:
|
||||
Add16(a=in, b[0]=true, b[1..15]=false, out=out);
|
||||
}
|
||||
Reference in New Issue
Block a user