¿Necesita ayuda con la implementación del circuito RTL (Nivel de transferencia de registro)? - Algoritmo GCD euclidiano

2

Estoy buscando ayuda con respecto al siguiente algoritmo y la implementación del circuito lógico. Aquí está en pseudocódigo:

if b = 0
    swap values of a and b.  b has the GCD. done. 
if a = 0
    b has the GCD. done.
if a < b
    swap values of a and b.

Loop: a = a - b
    if a >= b
        go back to Loop.
    if a > 0
        swap values of a and b
        go back to Loop

b has the GCD. done.

He escrito algún código RTL y no parece ser un problema; ¡El problema real es mi diseño de circuito!

¿Supongo que uno usaría una implementación de división de cambio y resta? Supongo que realmente necesito ayuda para decidir qué registros y chips aritméticos usaría. Vamos a usar Logisim.

    
pregunta D. Spigle

1 respuesta

2

Debido a que este algoritmo involucra un bucle, será mucho más fácil de implementar en un microcontrolador o microprocesador que en la lógica digital.

Sin embargo, si tiene una buena razón para hacerlo en lógica digital, como que necesita un control absoluto sobre la velocidad de la implementación, o si desea que decenas o cientos de procesadores ejecuten el algoritmo en paralelo, puede, por supuesto Hágase en lógica digital.

En lugar de utilizar "registros y chips aritméticos" empaquetados individualmente, sería mucho preferible utilizar un dispositivo lógico programable. Lo más probable es que uses un FPGA; pero también sería posible un CPLD, particularmente con las nuevas familias de CPLD que son realmente pequeñas FPGA disfrazadas.

Si usa un FPGA, simplemente usará una herramienta síntesis para convertir su código RTL en un archivo de configuración para el dispositivo. Cargará el archivo de configuración en el dispositivo y comenzará la operación.

No hay necesidad de traducir la RTL al nivel de la puerta de forma manual, ya que lo hace la herramienta de síntesis.

    
respondido por el The Photon

Lea otras preguntas en las etiquetas