java模擬邏輯門

public class MyConstant {

    public static final int HIGH_SIGNAL =1; //高電平信號
    public static final int LOW_SIGNAL =0; // 低電平信號
    public static final int INVALID_SIGNAL =-1; //電路不通信號
}
public class GateUtil {

    public static int  highThroughMos(int inputSignal,int ctrlSignal){
        int outputSignal = MyConstant.INVALID_SIGNAL;
        if( ctrlSignal == MyConstant.HIGH_SIGNAL ){
            // 導通
            outputSignal = inputSignal;
        }
        return outputSignal;
    }

    public static int  lowThroughMos(int inputSignal,int ctrlSignal){
        int outputSignal = MyConstant.INVALID_SIGNAL;
        if( ctrlSignal == MyConstant.LOW_SIGNAL ){
            // 導通
            outputSignal = inputSignal;
        }
        return outputSignal;
    }

    /**
     * 非門
     * @param inputSignal
     * @return
     */
    public static int notGate(int inputSignal){
        //2個 mos  ,
        //一個低電平導通 ,控制信號爲 inputSignal,輸入信號爲  高電平
        int outputSigna1 = lowThroughMos(MyConstant.HIGH_SIGNAL, inputSignal);

        //一個 高電平導通,控制信號爲 inputSignal,輸入信號爲  低電平
        int outputSigna2 = highThroughMos(MyConstant.LOW_SIGNAL, inputSignal);

        // 串聯
        //由於這兩個mos的 控制信號一樣,所以必然一個導通,一個不導通,輸出信號由導通的 mos的輸出信號決定
        if( outputSigna1==MyConstant.INVALID_SIGNAL ){
            return outputSigna2;
        }else{
            return outputSigna1;
        }
    }

    /**
     * 與門
     * @param inputSignal1
     * @param inputSignal2
     * @return
     */
    public static int andGate( int inputSignal1,int inputSignal2 ){
        int outputSignal = notAndGate(inputSignal1, inputSignal2);
        outputSignal = notGate(outputSignal);
        return outputSignal;
    }

    /**
     * 或門
     * @param inputSignal1
     * @param inputSignal2
     * @return
     */
    public static int orGate( int inputSignal1,int inputSignal2 ){
        int outputSignal=0;

        //todo
        return outputSignal;
    }

    /**
     * todo 與非門
     */
    public static int notAndGate( int inputSignal1,int inputSignal2 ){
        int outputSignal=0;

        //一共  4個 Mos

        // 上邊 2個並聯的 mos( low mos ),輸入信號都是高電平,
        // 左邊的 控制信號是 inputSignal2,
        int outputSignalLeft = lowThroughMos(MyConstant.HIGH_SIGNAL, inputSignal2);
        if( outputSignalLeft != MyConstant.INVALID_SIGNAL ){
            return outputSignalLeft;
        }

        // 右邊的控制信號是 inputSignal1
        int outputSignalRight = lowThroughMos(MyConstant.HIGH_SIGNAL, inputSignal1);
        if( outputSignalRight !=MyConstant.INVALID_SIGNAL ){
            return outputSignalRight;
        }

        // 只需要其中之一導通即可傳遞給輸出端


        //下邊 2個 串聯的mos( high  mos ),同時導通,信號才能傳到給輸出端
        //下面的 輸入端是 低電平,控制信號 是 inputSignal2
        int outputSignalBottom = highThroughMos(MyConstant.LOW_SIGNAL, inputSignal2);
        if( outputSignalBottom == MyConstant.INVALID_SIGNAL ){
            return MyConstant.INVALID_SIGNAL;
        }

        //上面的,輸入端 是低電平( 如果有機會通的話 ),控制信號是 inputSignal1
        int outputSignalTop = highThroughMos(outputSignalBottom, inputSignal1);
        if( outputSignalTop == MyConstant.INVALID_SIGNAL ){
            return MyConstant.INVALID_SIGNAL;
        }
        return outputSignalTop;

        //還可以知道 如果下面的2個串聯的導通了 ,則inputSignal1 和 inputSignal2都爲 高電平,此時 上面的2個並聯的都沒法導通
        // 如果 上邊的2個並聯的有一個導通,則 inputSignal1,inputSignal2肯定有一個 低電平,所以 下邊的2個串聯的肯定無法導通
    }

    /**
     * todo  或非門
     */

}
public class Test {

    public static void main(String[] args){
        System.out.println( GateUtil.andGate( 0,0 ) );
        System.out.println( GateUtil.andGate( 0,1 ) );
        System.out.println( GateUtil.andGate( 1,0 ) );
        System.out.println( GateUtil.andGate( 1,1 ) );
    }


}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章