Stages en others in Ex19

Discussies over FPGA-module en experimenteerbord

Postby sparky51 » Thu May 31, 2007 12:00 am


Ik probeer Ex19 te begrijpen maar loop op tenminste twee dingen vast.

1e Wat gebeurd er precies in de volgende regel:

VidEn <= '1' when q >= to_unsigned(HSYNC_c+HBACK_PORCH_c, Stages) and
q < to_unsigned(HSYNC_c+HBACK_PORCH_c+640 , Stages)
and Line >= to_unsigned(VBACK_PORCH_c, Stages) and
Line < to_unsigned(VBACK_PORCH_c+480, Stages)
else '0';

In de entity beschrijving staat dat Stages 10 is, maar ik begrijp niet wat ,Stages in dit geval doet.

2e Er staan nogal wat regels in zoals:
Line <= (others => '0');

Wat doet dit en wat betekend het keyword “others”

Ik hoop dat iemand dit mij uit kan leggen.

Groet, Hans.
sparky51
 
Posts: 50
Joined: Thu Jan 02, 2014 3:27 pm

Postby Guest » Thu May 31, 2007 12:00 am

Geplaatst door:Sparky51 op 19-2-2007 23:24:27

Ik probeer Ex19 te begrijpen maar loop op tenminste twee dingen vast.

1e Wat gebeurd er precies in de volgende regel:

VidEn <= '1' when q >= to_unsigned(HSYNC_c+HBACK_PORCH_c, Stages) and
q < to_unsigned(HSYNC_c+HBACK_PORCH_c+640 , Stages)
and Line >= to_unsigned(VBACK_PORCH_c, Stages) and
Line < to_unsigned(VBACK_PORCH_c+480, Stages)
else '0';

In de entity beschrijving staat dat Stages 10 is, maar ik begrijp niet wat ,Stages in dit geval doet.

2e Er staan nogal wat regels in zoals:
Line <= (others => '0');

Wat doet dit en wat betekend het keyword “others”

Ik hoop dat iemand dit mij uit kan leggen.

Groet, Hans.



Hallo Hans,

In de door jouw beschreven regel gebeurt het volgende:
Het signaal Vid_En (Video Enable) wordt 1, zodra de teller "q" groter is of gelijk aan (HSYNC_C+HBACK_PORCH_C) en kleiner als (HSYNC_C+HBACK_PORCH_C+480). Q geeft in dit geval de X-positie van de beeldstraal weer, waarbij q "0" wordt bij aanvang van de horizontale synchronisatie. Ook moet " Lines" (de huidige beeldlijn) groter of gelijk zijn aan de VBACK_PORCH en kleiner dan VBACK_PORCH+480. Lines wordt "0" bij aanvang van de vertical " Backporch".

In wat meer begrijpelijke termen : Vid_En wordt "1" zodra de beeldstraal zich in het zichtbare gedeelte van het videoscherm bevindt.

Doordat we gebruik maken van de relationele operatoren ">=" (groter of gelijk) en "<" kleiner dan, verwacht de VHDL-compiler dat we zowel links als rechts van de operator een (signed of unsigned) integer aanleveren. HSYNC_c en consorten zijn c geen integers, dus moeten deze eerst geconverteerd worden naar een integer. Dit gebeurt d.m.v. [B]to_unsigned [/B]. Deze functie verwacht als eerste parameter het te converteren signaal. Als 2e verwacht hij het aantal bits dat verwacht wordt. De constante "Stages" heeft als waarde 10, dus alle gebruikte integers zijn 10-bits integers.

Wat de 2e vraag betreft, daar kan ik wat korter over zijn. Indien je een vector, bestaande uit een aantal bits, wilt laden met een waarde, dan kan je dit aanvullen middels " others", waarbij others gelijk is aan het aantal nog overgebleven bits.
Stel dat je een vector "VEC" die uit 128 bits bestaat wilt laden met de waarde "000000......", dan kan je dit doen door:
VEC <= '1' & (others >='0');
Others vult hierbij de resterende 127 bits aan, welke allemaal de waarde "0" hebben. Houdt de source-code lekker klein.

Groeten,
Paul



Guest
 

Postby sparky51 » Thu May 31, 2007 12:00 am

Hallo Paul,

Bedankt voor je uitleg. De code leest nu een stuk makkelijker
Ik had geprobeerd om in de help uitleg te vinden maar dat was mij niet echt gelukt.

Misschien wil je ook nu even kijken naar mijn vraag over Ex17 en 18?

Groet, Hans

sparky51
 
Posts: 50
Joined: Thu Jan 02, 2014 3:27 pm


Return to 2006-03 FPGA-module

Who is online

Users browsing this forum: No registered users and 1 guest