TODOPIC
Otros Microcontroladores / Dispositivos programables => Lógica Programable => Mensaje iniciado por: wiston en 06 de Septiembre de 2010, 22:20:34
-
Bueno soy nuevo con vhdl, ya estoy estudiando el lenguaje, en estos momentos me gustaria entender bien cada instruccion de este codigo, yo entiendo algunas cosas asi que si alguien me da una manita gracias
P_Control_FSM: Process (RstN, Clk)
begin
if RstN = '0' then
Estado <= eInit;
elsif Clk'event and Clk='1' then
case Estado is
when eInit =>
if Transmite = '1' then
Estado <= eBitInit;
end if;
when eBitInit =>
if ClkBaud = '1' then
Estado <= eBitsDato;
end if;
when eBitsDato =>
if FinDsplza8bits = '1' then
Estado <= eBitFin;
end if;
when eBitFin =>
if ClkBaud = '1' then
Estado <= eInit;
end if;
end case;
end if;
end process;
-
Que tal einston el codigo es para una maquina de estados que se ejecuta cada que tenemos un flanco de subida en reloj
muy parececido a la sentencia SWITCH en lenguaje C, el CASE explora el valor de la señal estado, y ejecuta alguna de las instrucciones.
En el codigo que muestras la señal RstN es asincrona y se ejecuta en cualquier momento entonces la funcion es la siguiente:
Se genera un reset y la señal estado toma el valor eInit, despues en el primer flanco de subida del reloj se explora el valor de estado y se ejecuta las sentencias dentro de when eInit, este loop durara hasta que el bit Transmite sea 1 entonces a estado se asigna el valor de eBitInit y asi sucecivamente dando como resultado una maquina de estados.
Ya solamente como comentario al tratar de sintetizar este codigo te marcara error y esto se debe a que el CASE no esta bien terminado, similar al SWITCH debes tener una sentencia DEFAULT , te muestro como es toda la estructura CASE saludos cordiales.
case Estado is
when eInit =>
when eBitInit =>
when eBitsdato =>
when eBitfin =>
when others => null;
end case;
-
Muchas gracias parcero, eso es lo que necesito y gracias por lo de einston me gusta el alias.