FPGA solpanel Optimizer (8 / 12 steg)
Steg 8: räknare
En räknare är register som ökar eller minskar regelbundet. Vi använder tre räknare i vårt system. Två första är mycket lika. De är de horisontella counter och vertikala counter. I vårt system har vi ett fördefinierat värde som de räknar upp till. När de når det värde som har angetts, skickar de en signal till Mikronesien som sedan inaktiveras aktuella disken och aktiverar nästa. Räknaren som aktiveras varje gång när de horisontella counter och vertikala counter klar uppräkning och nå deras värde kallas max räknaren.
Modulen max counter är den räknare som ökar i hela hela tiden systemet kalibrerar. De counter höjningarna av en varje gång den går igenom stigande kanten av klocksignalen. Varje gång ett nytt max värde identifieras av motsvarigheten, signal det en reset till max räknaren. När detta inträffar nuvarande greven som max räknaren har startar om tillbaka till noll och fortsätter att öka tills räknaren horisontella eller vertikala når slutet av sin sopa cykel. När räknaren vågräta och lodräta klar uppräkning, orsakar dess styrsignalen sedan max räknaren att börja minska. Medan max räknaren är minska, sänder det en signal till Mikronesien som flyttar servo tillbaka mot riktningen av max spänning. När räknaren max har klart minska kommer servo har flyttat solpanelen tillbaka till den plats där den sista max spänningen.
Här är en enhet beskrivning av våra vågrätt och Max räknare:
enhet horiz_counter är
Port (CLK: i STD_LOGIC;
HS: I STD_LOGIC;
CNT_L: Ut STD_LOGIC);
slutet horiz_counter;
enhet max_counter är
Port (CLK: i STD_LOGIC;
FSM_RST: I STD_LOGIC;
RESET: I STD_LOGIC;
MC: I STD_LOGIC;
CNT_RU: Ut STD_LOGIC);
slutet max_counter;
Den horisontella counter och vertikala counter är i huvudsak samma, men de ökas upp till olika värden eftersom det tar längre tid att göra det horisontellt svepet än vertikala svepet. De också har inte någon reset signaler som de kommer alltid ökas upp till det angivna värdet och sedan återställa.
Räknaren max är lite mer komplicerad. Den har två olika reset signaler. En kommer från motsvarigheten så att disken kan återställas när den max spänningen finns. Den andra kommer formuläret Mikronesien och är endast aktiv när systemet är i manuellt läge för vi inte vill att räkna när vi försöker inte att hitta den högsta spänningen.
Här är en beteendevetenskaplig beskrivning för max räknaren:
variabeln currcount: STD_LOGIC_VECTOR(12 downto 0): = "0000000000000";
om RESET = '1' eller FSM_RST = '1' då
currcount: = "0000000000000";
CNT_RU < = "0";
elsif Rising_Edge(CLK) sedan
om MC = "0" då
currcount: = currcount + 1.
CNT_RU < = "0";
elsif MC = '1' då
currcount: = currcount - 1;
om currcount = "000000000000" då
CNT_RU < = "0";
annat
CNT_RU < = '1';
slutet om;
slutet om;
slutet om;