Lógica matemática detrás de la generación de códigos T0

Estoy haciendo un pequeño proyecto en la universidad donde debo convertir (codificar) entre códigos grises y binarios y también para la codificación de inversión de bus en verilog. Realmente es una tarea simple, ya que terminé con el código para los métodos de codificación mencionados anteriormente.

Ahora, al grano, debo generar códigos T0 en formato binario o gris. Me encontré con un obstáculo al tratar de entender de qué se trata este código T0. Rebuscando en Internet, solo pude encontrar revistas que ofrecen solo un esbozo vago sobre este tipo de código.

Soy realmente bueno codificando y todo lo que necesito saber es si es posible codificar un código de entrada binario a un código T0 o viceversa . Si es así, me gustaría saber la lógica matemática o los pasos realizados para generarlos. Tenga en cuenta que este es solo un mini proyecto realizado solo para familiarizarse con la lógica digital como parte del plan de estudios de mi universidad.

Si lo anterior no es factible, sugiera una técnica de codificación alternativa

Todo lo que debe saber está aquí: sapub.org/global/showpaperpdf.aspx?doi=10.5923/… En la sección 4, incluso hay un pseudocódigo que muestra cómo convertir código binario en código T0.
@lustful-rat, Gracias por la información. Pero no puedo relacionar el pseudocódigo para un flujo de bits de entrada dado o tal vez simplemente no lo entendí. ¿Te importaría simplificarlo un poco dando un ejemplo?

Respuestas (1)

Según el artículo encontrado por @lustful-rat , T0-C no es un método para codificar palabras binarias individualmente, sino un método para codificar secuencias de palabras binarias. Se utiliza en situaciones en las que las secuencias contienen con frecuencia grupos de valores que tienen un desplazamiento fijo entre sí, como pasar por una matriz de memoria por bytes o palabras.

El transmisor y el receptor acuerdan un tamaño de paso S . Si el siguiente valor a transmitir es el valor anterior más S (es decir, b ( t ) = b ( t 1 ) + S ), entonces el valor real en el bus no cambia ( B ( t ) = B ( t 1 ) ). De lo contrario, el siguiente valor se coloca en el bus ( B ( t ) = b ( t ) ).

Sin embargo, hay un problema: ¿Qué sucede si el próximo valor a transmitir no es el valor anterior más S, pero resulta ser el mismo que el valor actual en el bus ( b ( t ) = B ( t 1 ) )? En ese caso, solo hay un valor que el receptor NO debería esperar ver, y ese es b ( t 1 ) + S , porque si ese fuera realmente el valor a transmitir, el transmisor simplemente mantendría el bus en B ( t 1 ) . Entonces, si el transmisor realmente pone ese valor en el bus, entonces el receptor sabe que este es un caso especial y que b ( t ) ahora debe establecerse en B ( t 1 ) .

Siempre que la secuencia de valores contenga frecuentemente valores secuenciales, este método reduce el consumo de energía al reducir en gran medida la cantidad de transiciones en los cables de bus individuales. Para implementarlo, tanto el transmisor como el receptor deben realizar un seguimiento de b ( t 1 ) y B ( t 1 ) internamente, de modo que se pueda construir la lógica descrita anteriormente (y en el documento).

Transmitter                        Receiver
-----------                        --------
Inputs: b(t-1), b(t), B(t-1)       Inputs: b(t-1), B(t-1), B(t)
Output: B(t)                       Output: b(t)

if (b(t) == b(t-1)+S)              if (B(t) == B(t-1)) 
  B(t) = B(t-1)                      b(t) = b(t-1) + S
else if (b(t) == B(t-1))           else if (B(t) == b(t-1)+S) 
  B(t) = b(t-1)+S                    b(t) = B(t-1)
else                               else 
  B(t) = b(t)                        b(t) = B(t)
¿ Qué significa Tamaño de paso S ?
S es la diferencia entre una dirección de memoria y la siguiente. Por ejemplo, si la memoria es direccionable por bytes, pero está organizada como palabras de 32 bits, S sería 4.