Machineboy空

[From Nand to Tetris] Project 1 (1) Elementary logic gates(Not,And, Or, Xor, Mux, DMux) 본문

Computer/CS

[From Nand to Tetris] Project 1 (1) Elementary logic gates(Not,And, Or, Xor, Mux, DMux)

안녕도라 2025. 1. 17. 15:42

 

https://m.blog.naver.com/junb7/222792228046

 

논리게이트의 종류(AND, OR, NOT, NAND, NOR, XOR, XNOR)

안녕하세요, 동반자 여러분. 이번 포스트는 다양한 논리게이트의 종류에 대해서 알아보시는 시간을 갖고자 ...

blog.naver.com

 


Elementary logic gates

 

1) Not

/**
 * Not gate:
 * if (in) out = 0, else out = 1
 */
CHIP Not {
    IN in;
    OUT out;

    PARTS:
    Nand(a= in, b= in, out= out);
}

 

2) And

/**
 * 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 = temp);
    Not(in = temp, out = out);
}

3) Or

/**
 * Or gate:
 * if (a or b) out = 1, else out = 0 
 */
CHIP Or {
    IN a, b;
    OUT out;

    PARTS:
    Not(in= a, out= temp1);
    Not(in= b, out= temp2);
    Nand(a= temp1, b= temp2, out= out);
}

4) Xor

/**
 * 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:
    Not(in= a, out= notA);
    Not(in= b, out= notB);
    And(a= a, b= notB, out= temp1);
    And(a= b, b= notA, out= temp2);
    Or(a= temp1, b= temp2, out= out);
}

5) Mux

/** 
 * Multiplexor:
 * if (sel = 0) out = a, else out = b
 */
CHIP Mux {
    IN a, b, sel;
    OUT out;

    PARTS:
    Not(in= sel, out= notS);
    And(a= a, b=notS , out= temp1);
    And(a= sel, b= b, out= temp2);
    Or(a= temp1, b= temp2, out= out);
}

6) DMux

/**
 * 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= notS);
    And(a= notS, b= in, out= a);
    And(a= sel, b= in, out= b);
}