Cómo deducir el número de estados posibles para un sumador

0

Si mi cálculo es correcto, un sumador de 4 bits tiene 65536 estados, que es exactamente 2¹⁶. ¿De dónde viene este número? Parece que debería haber algún trasfondo teórico por qué este número es exactamente 2¹⁶. ¿Es cierto, según una fórmula general o mi modelo es defectuoso?

Mi sumador se ve de acuerdo con la siguiente especificación.

MODULE bit-adder (in1, in2, cin)
VAR
    sum : boolean;
    cout : boolean;
ASSIGN
    next (sum) := (in1 xor in2) xor cin;
    next (cout) := (in1 & in2) | ((in1 | in2) & cin);
MODULE adder (in1, in2)
VAR
    bit0 : bit-adder (in1[0], in2[0], FALSE);
    bit1 : bit-adder (in1[1], in2[1], bit0.cout);
    bit2 : bit-adder (in1[2], in2[2], bit1.cout);
    bit3 : bit-adder (in1[3], in2[3], bit2.cout);
DEFINE
    sum0 := bit0.sum;
    sum1 := bit1.sum;
    sum2 := bit2.sum;
    sum3 := bit3.sum;
    overflow := bit3.cout;

Es el número de estados de mi módulo principal que se informa. Si no incluyo el módulo principal, entonces el número de estados es 1.

MODULE main

VAR
    in1 : array 0 .. 3 of boolean;
    in2 : array 0 .. 3 of boolean;
    a : adder (in1, in2);
ASSIGN
    next (in1[0]) := in1[0];
    next (in1[1]) := in1[1];
    next (in1[2]) := in1[2];
    next (in1[3]) := in1[3];
    next (in2[0]) := in2[0];
    next (in2[1]) := in2[1];
    next (in2[2]) := in2[2];
    next (in2[3]) := in2[3];
DEFINE
    op1 := toint (in1[0]) + 2 * toint (in1[1]) + 4 * toint (in1[2]) + 8 * toint
    (in1[3]);
    op2 := toint (in2[0]) + 2 * toint (in2[1]) + 4 * toint (in2[2]) + 8 * toint
    (in2[3]);
    sum := toint (a.sum0) + 2 * toint (a.sum1) + 4 * toint (a.sum2) + 8 * toint
    (a.sum3) + 16 * toint (a.overflow);

    LTLSPEC F op1 + op2 = sum

Es cuando agrego la fila a : adder (in1, in2); que el número de estados aumenta de 2 ^ 8 a 2 ^ 16. Así que es algo con el verificador de modelos y el módulo principal.

    

0 respuestas

Lea otras preguntas en las etiquetas