Ayuda a entender el diagrama UART

0

Estoy escribiendo un artículo universitario sobre UART como parte de mi educación en informática. Estoy mirando diferentes diagramas de estado de UART, un tanto desconcertados que son tan diferentes. Ya hice algunas preguntas al respecto y comencé a entender los conceptos básicos. Mi plan es hacer un buen diagrama de estado sobre el UART que poseo: el avalon_altera_uart que es parte de FPGA: s de Altera (soy dueño del FPGA Altera DE2-115). Ese UART en particular se describe en la página 68 del manual. Pero no hay un diagrama de estado para eso, así que debo aprender cómo hacer un diagrama de estado para eso y luego puedo modelarlo en NuSMV y pasar por los estados.

Mi pregunta es sobre un diagrama detallado que veo en la página 35 de esta presentación enlace

No entiendo cuáles son todas sus variables. ¿Es la UART 16 bits? ¿Significa RxD 16 bits recibidos? ¿Qué significa rsr? ¿Qué significa dcnt? ¿Qué significa b? ¿Puedo usar la comprensión de su diagrama UART para hacer un diagrama de estado de mi UART ( enlace )?

Acabo de comenzar a hacer un código en NuSMV para modelarlo, el código no es correcto y parte de él es "código ficticio" pero lo uso para desarrollar el modelo en NuSMV que debe corresponder a un diagrama de estado de altera_avalon_uart .

MODULE main
-- ACTIVITIES
-- 1. Fill in the smv definitions
-- 2. Then run this file
VAR
-- system outputs
    Bit1 : boolean; -- Boolean variable
    Bit2 : boolean;
    state : {s1, s2, s3, s4}; -- scalar variable
    -- the model has states: location, that equals to idle, start, top, data, paritybit and tsr
    location : {idle, start, stop, data, paritybit, tsr};
    load : 0 .. 1;
IVAR
-- system inputs
    input : boolean;

ASSIGN
    init (location) := idle;
    init (state) := s1;
    init (Bit1) := FALSE;
    init (Bit2) := FALSE;
    next (location) :=
        case
            (location = idle) & (load = 1) : start; -- if state is idle and load=1 then next state is start
            (location = start) : data; --if state is start then next state is data  
            TRUE : location; -- if conditions fail, then do not change location
        esac;
    next (load) :=
        case
            (location = start) & load < 1 : load + 1;
            TRUE : load; -- otherwise, do not do anything to load
        esac;
    next (state) :=
        case
            state = s1 & input = TRUE : s2;
            state = s2 & input = FALSE : s3;
            state = s2 & input = TRUE : s4;
            state = s3 & input = FALSE : s1;
            state = s3 & input = TRUE : s2;
            state = s4 & input = FALSE : s3;
            TRUE : state; -- why?
        esac;
    next (Bit1) :=
        case
        -- To Do 
            Bit1 = FALSE : Bit2;
            TRUE : Bit2;
        esac;
    next (Bit2) :=
        case
        -- To Do 
            Bit2 = FALSE : Bit2;
            TRUE : Bit2;
        esac;

He hecho el siguiente diagrama de UART que creo que no es correcto, ya que modela los bits y los bits no son exactamente los estados.

    

1 respuesta

1

Con toda probabilidad:

  • Rxd es el estado del pin de datos en serie recibido.
  • rsr es el registro de turnos de recepción.
  • dcnt es probablemente un conteo de bits.
  • b parece el estado del pin Rxd muestreado en el centro de un poco de tiempo, pero no tener el HDL disponible, eso es una suposición.

Supongo que 16 bits es posible en un uart, pero nunca he visto uno, normalmente las cosas rondan los 8 bits (a veces 9, ocasionalmente 5/6/7).

No tengo idea de eso de NuSMV, pero produce diagramas de estado de aspecto feo.

    
respondido por el Dan Mills

Lea otras preguntas en las etiquetas