Eoc Final
Eoc Final
ELEMENTS OF
SCHOOL OF ARTIFICIAL COMPUTING- 1
INTELLIGENCE
DESIGN AND
IMPLEMENT PROJECT A
• Integrate functional
components: ALU, registers,
control logic, and memory
access units.
• Implement each component in
HDL.
• Test thoroughly before
integrating into the complete
CPU.
ALU (Arithmetic Logic Unit)
• CHIP FullAdder {
• IN a, b, cin;
• PARTS:
• }
Multiplexer(1
Bit)
The 1-bit multiplexer selects one of two inputs based on a selector signal.
CHIP Mux {
IN a, b, sel;
OUT out;
PARTS:
Not(in=sel, out=notSel);
}
MUX(2 bits)
• CHIP Mux2 {
• IN a[2], b[2], sel;
• OUT out[2];
• 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(3 Bits)
• CHIP Mux3 {
• IN a[3], b[3], sel;
• OUT out[3];
• 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(4 Bits)
• CHIP Mux4 {
• IN a[4], b[4], sel;
• OUT out[4];
• 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(5 Bits)
• CHIP Mux5 {
• IN a[5], b[5], sel;
• OUT out[5];
• 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]);
• }
Ripple Carry Adder(2 Bits)
• CHIP RippleCarryAdder2 {
• IN a[2], b[2], cin; // Two 2-bit input buses and a carry-in
• OUT sum[2], carry; // 2-bit sum output and carry-out
• PARTS:
• // First Full Adder: Adds the least significant bits (LSBs)
• FullAdder(a=a[0], b=b[0], cin=cin, sum=sum[0], carry=carry0);
• PARTS:
• FullAdder(a=a[0], b=b[0], cin=cin, sum=sum[0],
cout=carry1);
• FullAdder(a=a[1], b=b[1], cin=carry1, sum=sum[1],
cout=carry2);
• FullAdder(a=a[2], b=b[2], cin=carry2, sum=sum[2],
cout=cout);
• }
Ripple Carry Adder(4 Bits)
• CHIP RippleCarryAdder4 {
• IN a[4], b[4], cin;
• OUT sum[4], cout;
• PARTS:
• FullAdder(a=a[0], b=b[0], cin=cin, sum=sum[0], cout=carry1);
• FullAdder(a=a[1], b=b[1], cin=carry1, sum=sum[1],
cout=carry2);
• FullAdder(a=a[2], b=b[2], cin=carry2, sum=sum[2],
cout=carry3);
• FullAdder(a=a[3], b=b[3], cin=carry3, sum=sum[3], cout=cout);
• }
Ripple Carry Adder(5 Bits)
• CHIP RippleCarryAdder5 {
• IN a[5], b[5], cin;
• OUT sum[5], cout;
• PARTS:
• FullAdder(a=a[0], b=b[0], cin=cin, sum=sum[0], cout=carry1);
• FullAdder(a=a[1], b=b[1], cin=carry1, sum=sum[1], cout=carry2);
• FullAdder(a=a[2], b=b[2], cin=carry2, sum=sum[2], cout=carry3);
• FullAdder(a=a[3], b=b[3], cin=carry3, sum=sum[3], cout=carry4);
• FullAdder(a=a[4], b=b[4], cin=carry4, sum=sum[4], cout=cout);
• }
Carry Select Block (2 bits)
• CHIP CarrySelectBlock2 {
• IN a[2], b[2], cin;
• OUT sum[2], cout;
• PARTS:
• RippleCarryAdder2(a=a, b=b, cin=false, sum=sum0, cout=carry0);
• RippleCarryAdder2(a=a, b=b, cin=true, sum=sum1, cout=carry1);
• Mux2(a=sum0, b=sum1, sel=cin, out=sum);
• Mux(a=carry0, b=carry1, sel=cin, out=cout);
• }
Carry Select Block (4 bits)
• CHIP CarrySelectBlock4 {
• IN a[4], b[4], cin;
• OUT sum[4], cout;
• PARTS:
• RippleCarryAdder4(a=a, b=b, cin=false, sum=sum0, cout=carry0);
• RippleCarryAdder4(a=a, b=b, cin=true, sum=sum1, cout=carry1);
• Mux4(a=sum0, b=sum1, sel=cin, out=sum);
• Mux(a=carry0, b=carry1, sel=cin, out=cout);
• }
Carry Select Block (16 bits)
• CHIP CarrySelectAdder16 {
• IN a[16], b[16], cin;
• OUT sum[16], cout;
• PARTS:
• CarrySelectBlock2(a=a[0..1], b=b[0..1], cin=cin, sum=sum[0..1],
cout=carry1);
• CarrySelectBlock2(a=a[2..3], b=b[2..3], cin=carry1, sum=sum[2..3],
cout=carry2);
• CarrySelectBlock3(a=a[4..6], b=b[4..6], cin=carry2, sum=sum[4..6],
cout=carry3);
• CarrySelectBlock4(a=a[7..10], b=b[7..10], cin=carry3, sum=sum[7..10],
cout=carry4);
• CarrySelectBlock5(a=a[11..15], b=b[11..15], cin=carry4, sum=sum[11..15],
cout=cout);
• }
Testing and Results
Conclusion
•
The 16-bit HACK CPU was successfully implemented,
adhering to the HACK architecture. The modular design
ensured easy debugging and integration of components. The
CPU demonstrated its ability to execute a sequence of
instructions accurately, paving the way for further
advancements in computer design.
• This project successfully designed and implemented
a 16-bit Carry-Select Adder using Nand2Tetris HDL.
The use of modular blocks (2-2-3-4-5 bits) reduced
carry propagation delay, optimizing performance.
The carry-select logic coupled with modularity
provided an efficient solution.
THANK YOU