Verificación de ASIC ¿Debo verificar todas las combinaciones posibles?

7

Actualmente estoy realizando la verificación de caja negra ASIC.

Supongamos que tengo un módulo con 200 puertos de entrada con 12 bits de ancho cada uno y un puerto de salida con un ancho de 64 bits. Digamos, su combinación pura dentro.

                                  [11:0]      +------------+
                 inputport 0   ------/------> |            |
                      .        -------------> |            |       [63:0]
                      .        -------------> |     duv    | --------/----> outputport
                      .        -------------> |            |
                 inputport 200 -------------> |            |
                                              +------------+

Para probar el puerto de salida, ¿necesito probar todas las combinaciones posibles de los 200 puertos de entrada?

Si no, ¿cuál es una buena manera de verificar dicho módulo?

¿Hay una buena manera de monitorear todos los casos de esquina?

¿Saldrán eventualmente los errores durante el proceso?

    
pregunta e19293001

2 respuestas

8

Tienes un número absurdo de posibles conjuntos de entrada en tu espacio de entrada. No puedes probarlos todos, punto. Tienes que probar un subconjunto de los conjuntos de entrada y utilizar una heurística valiosa para elegir los conjuntos que haces la prueba.

Esto es lo que deben hacer sus pruebas (esto se deriva de las recomendaciones de pruebas DO-254 que usa mi compañía):

  • Cada salida debe cambiar al menos una vez
  • Cada entrada debe cambiar al menos una vez

Eso es un mínimo, no un máximo. En casos como este, realizamos un análisis de cobertura de decisión de condición mínima (MCDC) para ver qué otros conjuntos de entrada debemos probar. Siempre lo he explicado así:

Imagina que tu caja negra es una puerta AND con 200 entradas. No puede probar cada conjunto de entrada, por lo que prueba un subconjunto de todo el espacio de entrada. Primero, siga las reglas que mencioné anteriormente: debe probar al menos dos casos: uno que hace que la salida sea 0 / Falso y otro que hace que la salida sea 1 / Verdadero. Para la puerta AND esto es fácil: todos 0 / Falso y todos 1 / Verdadero. Eso prueba que su salida puede cambiar. Lo siguiente que debe hacer es elegir conjuntos de entrada para que haya un conjunto de entrada para el que cada entrada sea el factor decisivo en la salida. Para una entrada Y de 200 entradas, esto le proporciona 200 conjuntos de entradas diferentes: el primero tiene todas las entradas Verdadero, excepto la entrada # 1, el segundo tiene todas las entradas Verdadero, excepto el # 2, etc. Usando esta metodología, verifica que cada entrada tenga un efecto independiente en la salida. Si alguna entrada que sea falsa no produce una salida falsa, entonces sabe que tiene un problema.

Dijiste que tu lógica es todo combinatoria. Esto es preferible a una gran cantidad de cierres / chanclas, pero aún así no es perfecto. Tiene que trabajar hacia atrás desde la salida para determinar los conjuntos de entrada para los que cada entrada individual tiene un efecto decisivo en la salida. Si su lógica es complicada, tendrá mucho trabajo por delante, pero esta es la forma más rápida y completa de probar su caja negra lógica.

En cuanto a los aspectos prácticos estás por tu cuenta. La empresa en la que trabajo utiliza hardware personalizado para realizar pruebas de caja negra de FPGA a nivel de pin (y teóricamente ASIC si pudiera proporcionarnos una pieza para colocar en una placa) a velocidades operativas. Es completo y automatizado, pero cada dispositivo de prueba es personalizado para el proyecto dado, por lo que el uso de este enfoque requiere un contrato y no solo la compra de artículos de estante y su combinación.

Uno de los problemas que tendrá que se alivie con nuestro enfoque es simplemente conectar todos los cables. Supongo que la mayoría de las personas sugerirían un analizador lógico obscenamente grande, pero tienes miles de pines, por lo que tendrías que probar subconjuntos de pines a la vez. Uno de los aspectos positivos del enfoque que utilizamos es que supervisa todos los pines en todo momento, por lo que le permite ver que las salidas que espera cambiar cambian, pero también que las salidas que no deberían cambiar tampoco. No puede obtener eso si utiliza un analizador lógico con menos pines que el número de entradas / salidas que tiene.

    
respondido por el AngryEE
10

OK, la caja negra no es un problema, siempre y cuando se conozca la funcionalidad. Necesitará algo así como 64 funciones lógicas en (máximo) 2400 variables.

En el peor de los casos, tiene un producto no comprobable. Esto es así, por ejemplo, si cada una de las 64 salidas depende de todos los estados de entrada. Me imagino que los valores de diferentes puertos se comparan por igualdad, o mayor, y esos resultados se usan en una combinación lógica. En ese caso, podría probar los valores alrededor del valor de comparación, lo que puede disminuir drásticamente el número de combinaciones.

Diga que la salida Y debe ser alta si el puerto A > puerto B. Puede aplicar el valor 0x25 al puerto B y verificar cuál es la salida para los valores 0x24, 0x25 y 0x26 del puerto A. Repetir para 0x211 y 0xE5A (solo estoy inventando números). Entonces has reducido 2 \ $ ^ {24} \ $ = 16 777 216 combinaciones a 9.

Puede que tengas un problema aquí. Incluso si esa es la comparación que debe hacer, el resultado puede ser interno y solo se obtiene después de alguna función lógica con resultados internos similares. Así es como se hace un producto no comprobable.

Habría dividido el diseño en varios ASIC, donde los resultados intermedios van de un ASIC a otro. De esta manera, es posible que solo tenga que probar las combinaciones \ $ O (\ sqrt {N}) \ $, en lugar de \ $ O (N) \ $. 1000 mil millones de pruebas pueden ser imposibles, pero 1 millón no es un número tan grande. También puede disminuir el número de E / S si hay funciones mutuamente independientes.

Una solución para el chip único podría ser tener almohadillas de prueba para resultados intermedios en el dado, de modo que puedan probarse en la oblea con pruebas de sondas voladoras .

    
respondido por el stevenvh

Lea otras preguntas en las etiquetas