2

我正在尝试为逻辑门开发一个模拟器。模拟器需要计算给定电路的真值表。

这是一个示例电路。a, b, c, d,e是输入,z是输出。

在此处输入图像描述

我对编程很陌生。我找不到为大门建模的方法。你能给我一个方法吗?

4

1 回答 1

1

对于每个输入,您需要为状态(真、假)生成真值表。因此,如果您有 5 个输入 = 总组合 = 2^5。

你没有指定你需要什么语言。所以,我会给你一个流动的Java方法。

我假设您已经为不同的门定义了所有特定功能,例如,XNOR等。例如,您可以将门的功能设置为:ANDORXNORboolean 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[])并执行门逻辑并获取结果。

于 2012-06-05T10:05:35.657 回答