Sida 1 av 1

Villkor i vhdl - "elsif"

Postat: 2 juni 2007, 20:37:05
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;

Postat: 2 juni 2007, 20:50:09
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

Postat: 3 juni 2007, 14:49:23
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

Postat: 3 juni 2007, 16:35:54
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å?

Postat: 3 juni 2007, 16:52:36
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:

Postat: 3 juni 2007, 16:55:07
av BJ
Okej. Tack så mycket.