4 votos

Casos de prueba para la adición de la ondulación de 16 bits

Estoy trabajando en un laboratorio de un curso que tengo en VHDL, y parte de ella es implementar un n-bits ondulación llevar a la serpiente y, a continuación, la prueba es como de 16 bits sumador. Mi problema es que yo realmente no sé CÓMO probarlo, o más bien, ¿qué aportaciones para darle a probarlo a fondo. Esta es la primera vez que he hecho algo como esto, así que lo siento si viene a través como no tengo idea de qué estoy hablando.

Mi primer pensamiento fue que desde que la serpiente es sólo un montón de idéntica serpientes llenas encadenados juntos, si se pudiera demostrar que el individuo adder bloques funcionan bien, entonces sería trivial demostrar que los 16 bits sumador ha funcionado correctamente, ya que tiene un diseño simple. Así que mis dos entradas sería XXXXXXXX01101010 y XXXXXXXX01011100 con una inicial Cin de 0. El uso de estos valores iniciales, la primera el 8 de serpientes en la cadena de cada uno realizar una adición única (como una función de las entradas y Cin) que cubra totalmente la tabla de verdad de un sumador completo. Así que si los bits correspondientes en la suma son correctos y que la llevan a no arruinar a lo largo de la manera, sería una muestra de que la serpiente funciona correctamente.

Tengo un montón de razones para pensar que este es el enfoque equivocado, sin embargo. En primer lugar, parece demasiado simple. El manual de laboratorio se refiere a los CASOS de prueba, pero, obviamente, sólo he hecho uno de los casos. También menciona que se debe obtener la información de tiempo de la simulación, pero no entiendo la forma en que funcione con un solo caso. Y lo que es más importante, la estrategia no tiene sentido para mí. Todo lo que estoy haciendo en realidad es encontrar una realmente torpe manera de probar una serpiente llena por el encadenamiento de un montón de ellos juntos y forzando el Cin para cada caso de prueba para estar vinculada a la de la prueba anterior caso. No estoy de pruebas de la funcionalidad de la totalidad de la cosa.

Como usted probablemente puede decir que estoy bastante confuso. Yo realmente no tienen ninguna idea de cómo comprobar correctamente un 16 bits sumador aparte de las pruebas de las partes individuales que lo componen. Debo tratarlo como una caja negra y se refieren sólo a mí mismo con el final de llevar a cabo y la suma? Pero ya que la suma es de 16 bits, cuánto pruebas de lo que en realidad necesita hacer para demostrar que funciona correctamente?

3voto

Steve Paulo Puntos 8263

Supongamos que queremos hacer un buen trabajo de las pruebas de este, pero sin pasar a través de toda la 2^32 espacio de posibles operandos. (No es posible para este tipo de serpiente que tiene un error que sólo afecta a una sola combinación de operandos, que requieren de una exhaustiva búsqueda de la 2^32 espacio, por lo que es ineficaz para la prueba de esa manera.)

Si el individuo complementos están funcionando correctamente, y la onda de propagación entre ellos funciona correctamente, entonces es correcto.

Me gustaría dador prioridad a algunos casos de pruebas que se centran en enfatizar el llevar ondulación, ya que los complementos han sido probados individualmente.

Mi primer caso de prueba sería la adición de 1 a 1111..1111 que provoca que una de cada bit. El resultado debe ser cero, con una de las más altas de bits.

(Cada caso de prueba debe ser tratado a lo largo de ambos conmutaciones: a + B y B + a, por cierto.)

El siguiente conjunto de casos de prueba sería la adición de 1 a varios "lone cero" patrones como 011...111, 1011...11, 110111..111, ..., 1111110. La presencia de un cero debe "comer" el llevar a la propagación correctamente en esa posición de bit, de modo que todos los bits en el resultado que se inferior a la posición cero, y todos los bits son 1 (y, por supuesto, no hay ningún final llevar a cabo el registro).

Otro conjunto de casos de prueba añadiría estos "lone 1" el poder de dos patrones de bits de los diversos patrones de: 000...1, 0000...10, 0000...100, ..., 1000..000. Por ejemplo, si a esto se añade el operando 1111.1111, a continuación, todos los bits a partir de esa posición de bit a la izquierda, claro, y todos los bits a continuación que debe estar afectada.

Siguiente, una prueba útil caso, podría ser añadir todos los 16 de los poderes de los dos (el "lone 1" vectores), así como el cero, para cada uno de los 65536 valores posibles de la frente de los operandos (y, por supuesto, ir y repetir).

Por último, me gustaría repetir los dos anteriores "lone 1" pruebas con "lone 11": todos los patrones de bits que tiene 11 incrustado en 0, en todas las posiciones posibles. De esta manera estamos llegando a situaciones que cada adder es la combinación de dos bits 1 y un acarreo, que requieren para producir 1 y llevar a cabo 1.

3voto

GetFree Puntos 495

Siempre que sea factible, un total de la prueba es una elección segura. Con 2\$^{32}\$ entrada de permutaciones, una rápida chip, y un poco de paciencia, este puede ser factible. (A la 1 de la prueba por nosotros tomaría menos de 2 horas).

Cuando sólo "la prueba de una serpiente' y no hay tiempo para una prueba completa, me iría a por una prueba al azar.

Pero en el caso de que usted sabe que yo es una ondulación de la serpiente, y podría incluir la carrys en su salida. Eso significa que usted puede probar cada sección de forma independiente, mediante la elección adecuada de los insumos. Eso significa que sólo alrededor de un 16 * ( 2 ^ 3 ) prueba que los vectores (cada combinación de B y de llevar, y que para cada sección). Que es una pequeña prueba de la prueba, pero debido a que se puede comprobar la lleva todavía tiene cobertura total.

2voto

Mark Puntos 181

Hay varios semi-automático de banco de prueba de la herramienta de suites de VHDL; creo que el campo se llama "equivalencia de pruebas" -, pero supongo que usted quiere desarrollar algo desde cero.

Tenemos equipos rápidos que pueden itterate a través de todas las posibles combinaciones muy rápidamente, así que te recomiendo que no overthink: al probar cada caso. Ya que estamos hablando de un 16 bits sumador, que significa 65536 combinaciones para la primera entrada, y 65536 para la segunda entrada. Una de 32 bits contador conectado a las entradas del sumador se hará un ciclo a través de cada posible combinación de entrada -- alambre de que el menor de 16 bits a uno de entrada y la parte superior de 16 a la otra entrada. Desencadenar el contador fuera una señal de reloj generada a partir de un estímulo proceso (a <= '1' después de 10 ns; a <= '0' después de 10 ns;)

Ahora, usted necesita para poner a prueba para ver si la salida del sumador es correcta. Las herramientas que han fishing es en gran parte dependiente de su entorno. La forma más fácil de comprender es, probablemente, para tomar la salida de la serpiente, y restar la primera entrada, y luego restar la segunda entrada, y luego ver el resultado; si no todos los ceros, levantar una bandera. VHDL ha matemáticas y comparrison funciones integradas, a fin de construir un VHDL del bloque que se hace esta operación debe ser bastante trivial. Añadir un cerrojo en la final para mantener el valor y, a continuación, sólo puede simular y, a continuación, mira el último valor de sus resultados de simulación -- si es 0, funciona, si es 1, no funcionó.

1voto

Rob Lachlan Puntos 7880

Este es un ejercicio académico. Como tal, el problema en sí es fácil, así que lo que importa es la lección, no de los detalles del problema. En este caso trivial, usted puede venir para arriba con muchos ad hoc maneras de probar con la confianza de que va a probar o refutar que el módulo funciona como se pretende. Pero la verdadera lección en este caso se trata de averiguar cómo producir la prueba de cobertura por algo que puede ser demasiado compleja para estar seguro de que un intuitivamente construido 'acceso directo' modo de prueba sea confiable para la integridad. No es que esas no son habilidades útiles, de hecho son necesarias cuando la cobertura total es computacionalmente impracticable, pero esa no es la lección aquí, de lo contrario el problema de ejemplo habría sido formulada como tal.

Para escribir un testbench, alambre hasta su uap (unidad bajo prueba), darle todas las entradas posibles (usted puede utilizar un bucle for anidado para esto), y comparar el resultado con el resultado conocido, calculado mediante la vhdl de matemáticas de la biblioteca, la que sabe que es correcto y utiliza su pc procesador para el cálculo, y si el resultado es siempre diferente, utilice la función de informe (o escribir en el archivo) para mostrar en la consola de las entradas para que el error en la prueba, para que usted pueda investigar la anomalía.

Como una nota del lado, la cobertura total es de hecho imposible una verdadera caja negra, por lo que en realidad necesita para tener una idea del diseño. Por ejemplo, usted podría crear un sumador que siempre te da la respuesta correcta para cualquier conjunto dado de insumos, a menos que las anteriores adiciones seguir un patrón específico (bienvenidos al mundo del hardware backdoors), por lo que sería necesario para la prueba de un número arbitrariamente grande de secuencias de entrada, a menos que usted sepa la cantidad máxima de memoria interna de los elementos, etc. Pero estoy divagando.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X