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