Page 1 of 1

PostPosted: Thu May 31, 2007 12:00 am
by sparky51

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.

PostPosted: Thu May 31, 2007 12:00 am
by Guest
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




PostPosted: Thu May 31, 2007 12:00 am
by sparky51
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