逻辑门仿真的数据模型

时间:2012-05-19 21:46:45

标签: data-structures logic

我正在开发一种用于逻辑门的模拟器。模拟器需要计算给定电路的真值表。

这是一个示例电路。 abcde为输入,并输出z

enter image description here

我在编程方面很陌生。我找不到建模大门的方法。你能告诉我一个方法吗?

1 个答案:

答案 0 :(得分:1)

对于每个输入,您需要为状态生成真值表(true,false)。所以,如果你有5个输入=总组合= 2 ^ 5。

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

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