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.