[VHDL] secuencia de inicialización

O

Overflo

Guest
¿Cuál es el mejor método en VHDL para crear una secuencia inizialization?

Tengo que crear esta secuencia:Código:botón de reinicioEsperar 15 ms

5 mseg crear un disparador _ - _ a los datos de la muestra init

5 mseg crear un disparador _ - _ a los datos de la muestra init

120 us crear un disparador _ - _ a los datos de la muestra initLoop

esperar hasta que occurent evento

120 us crear un disparador _ - _ para obtener datos

Loop End
 
Usted puede hacer algo como esto .....
Los datos de muestra cada vez que hay un evento en señal de disparo.
Código:

restablecer la señal: std_logic: = '1 ';

Señal de disparo: std_logic: = '0 ';

caso de la señal: std_logic: = '0 ';proceso

empezar - proceso

- Botón de reset

reset <= '0 ';

- Esperar 15 ms

espere 15 ms;

- 5 mseg crear un disparador _ - _ a los datos de la muestra init

espere 5 ms;

desencadenar <= no intervención;

- 5 mseg crear un disparador _ - _ a los datos de la muestra init

espere 5 ms;

desencadenar <= no intervención;

- 120 us crear un disparador _ - _ a los datos de la muestra init

esperar a que 120 de nosotros;

desencadenar <= no intervención;

- Loop

- Espere hasta que occurent evento

- 120 us crear un disparador _ - _ para obtener datos

- Fin del ciclo

while ('1 ') loop

esperar hasta event'event;

esperar a que 120 de nosotros;

desencadenar <= no intervención;

end loop;

proceso de finalización;

 
Se puede usar un FSM

First State: restablecer el estado, permanecen en este estado como botón de reinicio mientras se empuja

Segundo estado: estado de espera, la estancia en este estado durante 15 ms, puede hacer esto con un contador de

Tercer Estado: de nuevo con un befor contra de ir al siguiente estado

...

Mi consejo es no utilizar un contador en cada estado, sino para crear un "reloj" interno de la señal, puede utilizar el reloj interno de las señales reales, no sé hasta dónde quiere ir en este sentido.

No es aconsejable utilizar un contador para cada estado.este va a consumir recursos innecesarios.Tal vez usted pueda compartir los contadores para varios estados.

Kind regards, Jef

 
¿Puede escribir un poco de VHDL?Yo undestand lo que hago, pero no puedo entender cómo escribir código para hacer esto ...

graciasAlta después de 1 hora 20 minutos:He escribir un código, ¿puede alguien, si es posible, optimizar la siguiente:

Código:library IEEE;

ieee.std_logic_1164.all uso;

ieee.std_logic_arith.all uso;

IEEE.STD_LOGIC_UNSIGNED.ALL uso;- Elimine las líneas siguientes para utilizar las declaraciones que se

- Previstas instancias de los componentes de Xilinx primitiva.

- Biblioteca UNISIM;

- el uso UNISIM.VComponents.all;entidad lcd_driver_v2 es

Port (clk: in std_logic;

RST: in std_logic;

D7_D0_in: in std_logic_vector (7 downto 0);

vacío: in std_logic;

D7_D0_out: out std_logic_vector (7 downto 0);

RS: out std_logic;

ES: out std_logic;

conteggio: out std_logic_vector (15 downto 0));

final lcd_driver_v2;lcd_driver_arch arquitectura de lcd_driver_v2 estipo_stato tipo es (stato0, stato1, stato2, stato3, stato4, stato5, stato6, stato7, stato8, stato9);

stato señal: std_logic_vector (3 downto 0);rom_array tipo es array (0 a 4) de std_logic_vector (7 downto 0);

rom constante: rom_array: = ( "00000000",

"00011110",

"00011110",

"00011110",

"00111000");

clk_200u señal: std_logic;empezar
U1_clk_div: proceso (clk)

v_count_clk variable: intervalo entero 0-10001;

empezar

if (rising_edge (clk)) entonces

v_count_clk: v_count_clk = 1;

if (v_count_clk> 10000) entonces - if (count = 20001) entonces

clk_200u <= NO clk_200u;

v_count_clk: = 0;

END IF;

END IF;

proceso de finalización;U2_state_machine: proceso (Stato, clk_200u, RST),

v_count variable: INTEGER;

empezar

if (RST = '1 ') entonces

D7_D0_out <= "00000000";

RS <= '0 ';

ES <= '1 ';

stato <= "0000";

v_count: = 0;

elsif (rising_edge (clk_200u)) entonces

v_count: v_count = 1;

Stato caso es

cuando "0000" =>

if (v_count = 76) a continuación

D7_D0_out <= "00000000";

RS <= '0 ';

ES <= '1 ';

stato <= "0001";

v_count: = 0;

algo más

D7_D0_out <= "00000000";

RS <= '0 ';

ES <= '1 ';

stato <= "0000";

END IF;

cuando "0001" =>if (v_count = 26) entonces

D7_D0_out <= "00001111";

RS <= '0 ';

ES <= '0 ';

stato <= "0010";

v_count: = 0;

algo más

D7_D0_out <= "00001111";

RS <= '0 ';

ES <= '1 ';

stato <= "0001";

END IF;

cuando "0010" =>if (v_count = 2) entonces

D7_D0_out <= "00000001";

RS <= '0 ';

ES <= '0 ';

stato <= "0011";

v_count: = 0;

algo más

D7_D0_out <= "00000001";

RS <= '0 ';

ES <= '1 ';

stato <= "0010";

END IF;

cuando "0011" =>if (v_count = 2) entonces

D7_D0_out <= "00111100";

RS <= '0 ';

ES <= '0 ';

stato <= "0100";

v_count: = 0;

algo más

D7_D0_out <= "00111100";

RS <= '0 ';

ES <= '1 ';

stato <= "0011";

END IF;

cuando "0100" =>if (v_count = 2) entonces

D7_D0_out <= "00011100";

RS <= '0 ';

ES <= '0 ';

stato <= "0101";

v_count: = 0;

algo más

D7_D0_out <= "00011100";

RS <= '0 ';

ES <= '1 ';

stato <= "0100";

END IF;

cuando "0101" =>if (v_count = 2) entonces

D7_D0_out <= "00001010";

RS <= '0 ';

ES <= '0 ';

stato <= "0110";

v_count: = 0;

algo más

D7_D0_out <= "00001010";

RS <= '0 ';

ES <= '1 ';

stato <= "0101";

END IF;

cuando "0110" =>if (v_count = 2) entonces

D7_D0_out <= "00000001";

RS <= '0 ';

ES <= '0 ';

stato <= "0111";

v_count: = 0;

algo más

D7_D0_out <= "00000001";

RS <= '0 ';

ES <= '1 ';

stato <= "0110";

END IF;

cuando "0111" =>if (v_count = 2) entonces

D7_D0_out <= "00000111";

RS <= '0 ';

ES <= '0 ';

stato <= "1000";

v_count: = 0;

algo más

D7_D0_out <= "00000111";

RS <= '0 ';

ES <= '1 ';

stato <= "0111";

END IF;

cuando "1000" =>if (v_count = 2) entonces

D7_D0_out <= "00001110";

RS <= '0 ';

ES <= '0 ';

stato <= "1001";

v_count: = 0;

algo más

D7_D0_out <= "00001110";

RS <= '0 ';

ES <= '1 ';

stato <= "1000";

END IF;

cuando "1001" =>

if (v_count = 2) entonces

if (empty = '0 ') entonces

D7_D0_out <= D7_D0_in;

RS <= '1 ';

ES <= '0 ';

stato <= "1001";

v_count: = 0;

algo más

D7_D0_out <= D7_D0_in;

RS <= '1 ';

ES <= '1 ';

stato <= "1001";

END IF;

algo más

D7_D0_out <= D7_D0_in;

RS <= '1 ';

ES <= '1 ';

stato <= "1001";

END IF;

when others =>

stato <= "0000";

caso extremo;

END IF;

conteggio <= conv_std_logic_vector (v_count, 16);

proceso de finalización;

lcd_driver_arch fin;
 
Yo, no voy a escribir el código para usted, pero si usted está tratando de obtener un controlador de Hitachi HD44780 a trabajar un vistazo a mi sitio, cavar a través de mi código.

Es una forma de hacerlo.

http://www.jefspalace.be/digital/game 20life/lcd.htm% 20de%

Kind regards, Jef

 
su sitio no funciona ...

<img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="Llorando o muy triste" border="0" />
 
Sí, sí, enlace es correcto, me acaba de hacer clic y funciona

 

Welcome to EDABoard.com

Sponsor

Back
Top