Paso 8: contadores
Un contador es el registro que aumenta o disminuye en forma periódica. Utilizamos tres contadores en nuestro sistema. Los dos primeros son muy similares. Son el contador horizontal y el vertical contador. En nuestro sistema, tenemos un valor predefinido que cuentan hasta. Cuando alcanzan el valor que se ha especificado, envía una señal de control para el FSM que desactiva el contador actual y activa la siguiente. El contador que se activa cada vez después de que el contador horizontal y el vertical contador fin incrementando y alcanzan su valor se llama el contador máximo.
El módulo de contador máximo es el contador que se incrementa a lo largo de todo el tiempo que el sistema se está calibrando. Los incrementos de contador por uno cada vez que pasa por el flanco ascendente de la señal de reloj. Cuando se detecta un nuevo valor máximo por el comparador, envía una señal de reset para el contador máximo. Cuando esto ocurre, la cuenta actual que tiene el contador máximo se reinicia a cero y continúa incrementar hasta que el contador horizontal o vertical llega al final de su ciclo de barrido. Una vez que el contador horizontal/vertical termina incrementando, su señal de control provoca entonces el contador máximo empezar a disminuir. Mientras que el contador máximo está disminuyendo, está enviando una señal de control al FSM que se mueve el servo hacia la dirección de la tensión máxima. Una vez terminada el contador máximo disminuyendo el servo habrá vuelto el panel solar al lugar donde estaba el último voltaje máximo.
Aquí está una descripción de la entidad de nuestros contadores Horizontal y Max:
horiz_counter entidad es
Puerto (CLK: en RAMB16_S36;
HS: En RAMB16_S36;
CNT_L: A RAMB16_S36);
end horiz_counter;
max_counter entidad es
Puerto (CLK: en RAMB16_S36;
FSM_RST: En RAMB16_S36;
RESET: En RAMB16_S36;
MC: En RAMB16_S36;
CNT_RU: A RAMB16_S36);
end max_counter;
El contador horizontal y el vertical contador son esencialmente los mismos, sin embargo incrementa hasta valores diferentes porque toma más tiempo para hacer el barrido horizontal de barrido vertical. Que no tienen ninguna señal de reset ya que siempre se incremente hasta su valor especificado y luego reiniciar.
El contador máximo es un poco más complejo. Tiene dos señales de reinicio diferentes. Uno viene del comparador para que el contador puede restablecerse cuando el voltaje máximo. La otra viene forma el FSM y sólo está activa cuando el sistema está en modo manual porque no queremos contar cuando no se trata de encontrar la tensión máxima.
Aquí está una descripción conductual para el contador máximo:
currcount variable: STD_LOGIC_VECTOR(12 downto 0): = "0000000000000";
Si RESET = '1' o FSM_RST = '1' then
currcount: = "0000000000000";
CNT_RU < = '0';
ELSIF Rising_Edge(CLK) entonces
Si MC = '0' then
currcount: = currcount + 1;
CNT_RU < = '0';
ELSIF MC = '1' then
currcount: = currcount - 1;
Si currcount = "000000000000" entonces
CNT_RU < = '0';
otra cosa
CNT_RU < = '1';
End if;
End if;
End if;