我正在开发一种用于逻辑门的模拟器。模拟器需要计算给定电路的真值表。
这是一个示例电路。 a
,b
,c
,d
,e
为输入,并输出z
。
我在编程方面很陌生。我找不到建模大门的方法。你能告诉我一个方法吗?
答案 0 :(得分:1)
对于每个输入,您需要为状态生成真值表(true,false)。所以,如果你有5个输入=总组合= 2 ^ 5。
您没有指定您需要的语言。所以,我会给你一个流畅的Java
方法。
我假设您已经为不同的门定义了所有特定功能,例如XNOR
,AND
,OR
等。例如,您可以拥有XNOR
的功能门为:boolean XNOR(boolean ip1, boolean ip2)
现在,该过程简化为输入的所有组合(2 ^ 5)的生成。这简化了一个简单的排列问题 - 你可以这样做:(想法是将值从数组的末尾更改为开头。因为它只需要两个值就很容易实现)
//inputs - all initialized to FALSE; - ready for 1st case of (2^5)
//Let the inputs a,b,c,d,e correspond to values of this array
boolean inp[]=new boolean[5];
//need a pointer variable for the array
//first pointing to the last-1 element of the array
int main_col=inp.length-2;
//Generate the combinations for input from all FALSE to until you reach all inputs to TRUE values
boolean looptf=true;
while(looptf){
call_Appropriate_gates_from_inputs(inp);
inp[inp.length-1]=!inp[inp.length-1]; //last array element value changed
call_Appropriate_gates_from_inputs(inp);
inp[inp.length-1]=!inp[inp.length-1]; //reset
for(int i=inp.length-2;i>=0;i--){
if (inp[i]){
inp[i]=false;
if (main_col==i){
main_col--;
if (main_col<0){
looptf=false;
break;
}
}
}else{
inp[i]=true;
break;
}
}//for
}//while
现在您可以定义方法call_Appropriate_gates_from_inputs(boolean[])
并执行门逻辑并获得结果。