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 ) );
}
}