Soy un poco nuevo en VHDL, y espero que algunos de ustedes puedan ayudarme aquí.
Estoy intentando establecer una conexión entre un ADC, un LED y un componente de control.
El propósito de esta aplicación es convertir un valor analógico medido en el ADC y luego emitirlo al LED.
La forma en que he diseñado la comunicación es la siguiente.
El conjunto de LED y la señal alta ( start_adc ) que el ADC lee, y comienza el ADC.
Cuando finaliza el ADC, establece la señal read high, que luego el Control lee, y luego lee el ADC_value (un valor binario - std_logic_vector (9 a 0)).
Este ADC_value se mantiene bajo control, pero el LED tiene que cambiar su estado. Así que Control establece la señal next_state high, que el LED lee y cambia su estado a otra cosa. El problema aquí es cómo desactivo next_state ?
Mi solución implicó el uso de una señal llamada received que se configuraría como alta, si se viera rising_egde(next_state) de tal manera que, si el control detectara rising_edge(received) , podría apagar next_state y luego, cuando LED shaw y falling_edge(next_state) podrían establecer received low nuevamente, y luego start_adc high.
código sabio se parece a esto
state_changer: process(clk,state)
variable count: integer range 0 to 500000000 :=0;
begin
if falling_edge(next_state) then
received <= '0';
start_adc <= '1';
elsif rising_edge(next_state) then
received <= '1';
count := 0;
start_adc <= '0';
end if;
count := count +1;
end process;
pero como puede ver, el problema es que la misma señal se configura para subir y bajar ... ¿cómo puedo solucionar este problema? ..
El aviso count también es importante.