Villkor i vhdl - "elsif"

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Villkor i vhdl - "elsif"

Inlägg av BJ »

Jag undrar vad det blir av "elsif" egentligen.

När jag programmerar så försöker jag göra så att det bara är ett villkor i varje nivå:

Kod: Markera allt

when t_0 =>

  if (signal_1 = '1') then
    s_tillstaand <= t_1;
  else
    if (signal_2 = '1') then
      s_tillstaand <= t_2;
    else
      s_tillstaand <= t_0;
    end if;
  end if;
Där ser man ju precis vad som kommer att hända.

Men vad blir det om man gör så här:

Kod: Markera allt

when t_0 =>

  if (signal_1 = '1') then
    s_tillstaand <= t_1;
  elsif (signal_2 = '1') then
    s_tillstaand <= t_2;
  else
    s_tillstaand <= t_0;
  end if;
Vad händer om båda signalerna är 1 då? Tar den det första valet, eller kan det bli vad som helst? Om man har t.ex. 10 stycken så lägger den väl inte på en logiknivå för varje villkor. Eller blir det en tabell med (antalet signaler) x (antalet villkor)? Det vore kul att veta hur det fungerar. Är det olika för olika syntesprogram och simulerings-program?

Man använder ju ofta det andra sättet till nollställning och klocka:

Kod: Markera allt

if (nollstaellning = '1') then

  s_tillstaand <= t_0;

elsif (klocka'event and klocka = '1') then

  (och så programmet här.)

end if;
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Jag vet inte 100% men rent logiskt borde första ifsatsen köras och då den är uppfyld testas inte nästa iom att dom "hänger ihop".

Så det borde bli "s_tillstaand <= t_1"; (s_tillstand nor t_1).

EDIT: NOR och inte XOR
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

elseif är som att skriva en ifsats till med den skillnaden att du har filtrerat bort det som den första ifsatsen tar.

Kod: Markera allt

IF A = 1 THEN
   RESPONSE="A"

   ELSEIF A =2
      RESPONSE="B"

   ELSE
      RESPONSE="C"
ENDIF
A=1 --> RESPONSE=A
A=2 --> RESPONSE=B
A!=1 eller 2 --> RESPONSE=C
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Inlägg av BJ »

Jaha. Det verkar som om ni svarar likadant ungefär. (Men jag förstår inte det där med nor...)
Om man tar flera stycken då, sorteras dom ut i rätt ordning uppifrån och ner då, alltså?
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

Om du menar "!=" så betyder det INTE lika med. Dvs A är varken 1 eller 2. det kan allstå vara 3 eler 0 eller 14 :)

I ordning skall if satserna tagas :wink:
Senast redigerad av v-g 3 juni 2007, 16:56:11, redigerad totalt 1 gång.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Inlägg av BJ »

Okej. Tack så mycket.
Skriv svar