Entendiendo un lenguaje de descripción de hardware, circa 1965

5

Esta pregunta está en la cerca entre RC y EE; como el estilo de diseño tiene medio siglo, decidí preguntarle primero a la audiencia de RC.

En 1965, los desarrolladores de computadoras soviéticos utilizaron un HDL rudimentario en la documentación de fabricación. La lógica combinacional de Bitwise se veía bastante comprensible, con · para AND, + para OR, y un overbar para NOT.

Sin embargo, los registros se definieron de una manera más críptica.

Por ejemplo (convirtiendo las abreviaturas rusas al inglés pero manteniendo toda la otra notación como está para la autenticidad), un bit típico del acumulador en medio de la mantisa se definió como

14bRxAcc = C·[ShREn·15bRAcc + HoldEn·14bRAcc + ShLEn·13bRAcc] + 
             [ShMant4En·18bRAcc + ReplEn·14bNextAcc]·C
14bRAcc = K·14bRxAcc
  • RAcc y RxAcc son las matrices de bits almacenados del acumulador
  • ShREn , HoldEn , ShLEn : habilitar desplazamiento a la derecha, habilitar retener, habilitar desplazamiento a la izquierda
  • ShMant4En - cambiar la mantisa en 4 bits habilitado, ReplEn - reemplazar habilitar
  • NextAcc - el nuevo valor del acumulador
  • C y K son las fases opuestas de la señal del reloj.

La división de la asignación RxACC en dos cláusulas ORed expresa la limitación de 3 cláusulas OR por elemento estándar.

Aquí podemos ver los desplazadores secuenciales hacia la izquierda y hacia la derecha, y una palanca de cambios más rápida (4 posiciones de bit por ciclo de reloj), más la asignación de un valor calculado del bit.

Sin embargo, si reescribimos esto a Verilog con retardo cero

assign RxAcc[14] = C & (ShREn & RAcc[15] | HoldEn & RAcc[14] | ShLEn & Racc[13]) |
                   (ShMant4En & RAcc[18] | ReplEn & NextAcc[14]) & C;
assign RAcc[14] = K & RxAcc[14];

no funcionará, porque en cualquier momento, C o K es cero.

Cabe señalar que el diseño era estático; fue posible hacer un solo paso de la CPU desde la consola.

Mi pregunta es, ¿cuál sería la definición correspondiente de Verilog de RAcc y RxAcc, teniendo en cuenta que ambos podrían ser utilizados por la lógica combinacional?

¿Es seguro asumir que siempre que se menciona C o K en una fórmula, la expresión debe tomarse como un latch en lugar de una puerta AND?

    
pregunta Leo B.

2 respuestas

4

No puedo responder cómo hacer esto en Verilog, pero creo que es seguro decir que C / K se está utilizando aquí para controlar la propagación de una señal a través de un pestillo.

Creo que la intención original era, obviamente, que C / K controlara un pestillo aquí. La implicación entonces es que esta HDL fue hecha para circuitos secuenciales y que realizó todas las asignaciones al mismo tiempo (es decir, fue 'cronometrada'). Entonces, los nuevos valores de RAcc y RxAcc se calculan en función de los valores anteriores, luego los nuevos valores se escriben en RAcc y RxAcc en el mismo momento. El problema de que C o K sea cero no se produce.

Para decirlo de otra manera, este HDL parece usar un modelo donde la asignación de variable significa "depositar este valor en esta variable al final del ciclo de evaluación actual", mientras que la referencia / evaluación de variable significa "recuperar el valor que tenía esta variable al inicio del ciclo de evaluación actual ".

Para decirlo de otra manera, las variables en este HDL parecen tener sus propios cierres virtuales sincronizados por el reloj del simulador. Los nuevos valores se introducen en todas las variables al mismo tiempo (llámelos si lo desea), pero las variables no "aceptan" los nuevos valores hasta el final del ciclo de simulación. Tener este comportamiento similar a un registro integrado en el lenguaje hace que sea muy fácil representar los latches utilizando este lenguaje C / K.

Este comportamiento similar a un registro para RAcc / RxAcc se puede desencadenar por la forma en que se declararon anteriormente en el archivo, o este puede ser el comportamiento predeterminado. No puedo decir por el fragmento que se muestra. Si es el comportamiento predeterminado, este lenguaje puede tener una sintaxis especial que se utiliza para los circuitos combinatorios cuando se desea almacenar / recuperar un valor al instante.

También tenga en cuenta: es posible que este lenguaje no tenga un programa de simulador real que lo acompañe; el "simulador" para el que fue escrito puede haber sido la mente humana. Si se pretendía que fuera un lenguaje humano en lugar de un lenguaje informático, no es necesario que las reglas del lenguaje se especifiquen rígidamente: puede confiar en el contexto y la comprensión humana para aclarar el significado.

    
respondido por el Ken Gober
2

Cualquier lógica que requiera un reloj de dos fases (¿no superposición?) es probablemente dinámica, en el sentido de que se basa en el hecho de que los voltajes de los nodos no cambiarán entre el final de una fase y el comienzo de la siguiente.

Dicha lógica no puede simularse con una lógica de cero demora, pero el uso juicioso de ciertos tipos de demoras puede hacer que sea viable.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas