Forum: FPGA, VHDL & Co. for - schleife


von chris (Gast)


Lesenswert?

die for schleife soll mehrmals hinteinander durchlafen werden,
allerings immer mit anderen startpunken.
erstes mal von 0 -5 laufen
zweites mal von 1 - 0 (also 1,2,3,4,5,0)
dreitten mal von 2 - 1 ( 2,3,4,5,0,1)

würde das so funktionieren ?

q : IN    STD_LOGIC_VECTOR( 5 DOWNTO 0);

for i in  q'RIGHT to q'LEFT loop
  if  q(i)='1'  then next <= state(i+1);
                    exit;
  end if;
end loop;


for i in  q'RIGHT+1 to q'LEFT+1 loop      -- ist der copiler
intelligent genug
  if  q(i)='1'  then next <= state(i+1);  -- von 1 bis 0 zu laufen
oder wird er von 1-6 laufen ?
                    exit;
  end if;
end loop;


for i in  q'RIGHT+2 to q'LEFT+2 loop      -- ist der copiler
intelligent genug
  if  q(i)='1'  then next <= state(i+1);  -- von 1 bis 0 zu laufen
oder wird er von 1-6 laufen ?
                    exit;
  end if;
end loop;


benuzet xilinx ise 7.1
ich glaube ich mache mir da zuviel hoffnungen was die intelligenz des
compilers angeht ?
  danke
    Chris

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Ich würde das erst mal als Statemachine ansehen, und ausrechnen,
wieviele states minimal erforderlich sind. drei Durchläufe( 2 Bit ) mal
6 Zustände (3 Bit) wären eine 5 Bit Statemachine, 4 Bit dürften nicht
reichen. Jetzt noch eine sinnvolle Codierung dieser max. 32 Zustände,
mit  Vermeidung illegaler Zustände

von Klaus F. (kfalser)


Lesenswert?

So wie Du dir das vorstellst wird es nicht funktionieren.
Es hat auch weniger mit der Intelligenz des Compilers zu tun, sondern
mit der Tatsache daß Zugriffe außerhalb der gültigen Index-grenzen als
Fehler betrachtet werden sollen, die der Compiler tunlichst melden
soll.

Probier es mit dem Modulo operator
q(i mod 6)

Klaus

von chris (Gast)


Lesenswert?

danke
für die tipps ich werde mir darüber gedanken machen
  chris

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.