Altifigence Academy

11 / 24 · Práctica

Práctica: sigue dos etapas y las burbujas

Calcula el estado siguiente a partir del anterior y compara las etiquetas, los valores y los flancos de salida.

Modela registros que se actualizan juntos

Construye un modelo por ciclos de la función de dos etapas f(a,b)=3(a+b). Cada iteración representa un flanco ascendente. Primero consume el valor anterior de s2. Después calcula la nueva segunda etapa a partir del valor anterior de s1 y, a continuación, actualiza ambas etapas. Actualizar s1 antes de calcular s2 permite incorrectamente que una entrada atraviese dos registros en un solo flanco.

Añade manualmente pipeline-model.mjs a tu proyecto, guárdalo y ejecuta node pipeline-model.mjs en una terminal de Node.js. Acepta cuatro entradas en los flancos 0 a 3 y después drena en los flancos 4 y 5. Todas las entradas se aceptan bajo este contrato de disponibilidad permanente. Null significa una etapa vacía; no es el número cero. Un resultado cero válido sigue representando una transacción.

javascript
import assert from 'node:assert/strict';
const inputs = [[1,2], [250,10], [100,0], [255,255]];
let s1 = null, s2 = null;
const seen = [];
for (let edge = 0; edge < 6; edge++) {
  if (s2 !== null) seen.push({ edge, ...s2 });
  const next2 = s1 === null ? null : {
    tag: s1.tag, y: (s1.sum * 3) % 256
  };
  const next1 = edge < inputs.length ? {
    tag: edge, sum: inputs[edge][0] + inputs[edge][1]
  } : null;
  s1 = next1;
  s2 = next2;
}
assert.deepEqual(seen, [
  { edge: 2, tag: 0, y: 9 },
  { edge: 3, tag: 1, y: 12 },
  { edge: 4, tag: 2, y: 44 },
  { edge: 5, tag: 3, y: 250 }
]);
assert.equal(s1, null);
assert.equal(s2, null);
console.log('PIPELINE PASS: 4 ordered results, latency=2');
FlancoEntrada aceptadaSalida entregada
0tag0:1+2Ninguna
1tag1:250+10Ninguna
2tag2:100+0tag0:y9
3tag3:255+255tag1:y12
4Burbujatag2:y44
5Burbujatag3:y250

La segunda transacción conserva la suma 260 y reduce 780 a 12. La última reduce 1530 a 250. Comparar explícitamente el flanco, la etiqueta y el valor detecta errores temporales además de errores aritméticos. Las burbujas de drenaje vacían ambas etapas para que las salidas antiguas no se repitan.

Para explorar las entradas ausentes, inserta null en los flancos de aceptación elegidos e incrementa las etiquetas solo para las transacciones aceptadas. Los huecos de salida siguen a las burbujas mientras las transacciones válidas conservan una latencia de dos flancos. Este modelo no tiene contrapresión de salida. El siguiente capítulo añade un comportamiento elástico. Superar las comprobaciones de Node valida este modelo de estado, no la compilación HDL ni una ejecución de simulación de DDS.

Inténtalo tú

Si no hay entrada en el flanco 1 y B,C,D se aceptan en los flancos 2,3,4, ¿cuáles son los flancos de entrega de las etiquetas 0 a 3?

Leer la explicación

A se transfiere en el flanco 2. B,C,D se transfieren en los flancos 4,5,6. El flanco 3 contiene una burbuja de salida. Asigna etiquetas por orden de aceptación, 0,1,2,3, en lugar de usar el número físico del flanco.

Lesson files

pipeline-model.mjs ↓

Tu elección se aplica a este navegador. Puedes cambiarla en el pie de página.