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.