Forum: FPGA, VHDL & Co. Attribute und Aufzählungstypen


von Hans-Werner (Gast)


Lesenswert?

Ich möchte per Tastendruck bzw. Druck auf den Drehschalter am Spartan 3 
AN Starter Kit eine Zustandsmaschine in den nächsten Zustand schalten.
Hier die entsprechende Deklaration.
1
type wave_mod is (sin_wave_mod, square_wave_mod);
2
signal modus : wave_mod;
Und hier die Anweisung.
1
if modus /= wave_mod'high
2
then
3
  modus <= wave_mod'succ(modus);
4
else
5
  modus <= wave_mod'low;
6
end if;
Kurz gesagt: Falls noch nicht der letzte Zustand erreicht wurde dann 
wechsle in den nachfolgenden Zustand, ansonsten wechsle in den ersten 
Zustand. Das ganze sollte nur in Abhängigkeit von dem Signal modus 
definiert werden; der zugehörige Type sollte nicht in der Anweisung 
auftauchen.
modus'base'high resultiert in einer Fehlermeldung "non authorized 
access".
Was habe ich falsch verstanden ?

von Klaus F. (kfalser)


Lesenswert?

Möglicherweise braucht's eine Klammer (modus'base)'high.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Pech: die XST-Synthese kanns nicht :-/

In der Simulation klappt alles (Bild):
1
architecture Behavioral of Attributes is
2
type wave_mod is (sin_mod, triangle_mod, trapez_mod, saw_mod, square_mod);
3
signal modusA : wave_mod := trapez_mod;
4
signal modusB : wave_mod := trapez_mod;
5
begin
6
  process begin
7
     wait until rising_edge(clk);
8
     if  (modusA /= wave_mod'high)
9
     then modusA <= wave_mod'succ(modusA); 
10
     else modusA <= wave_mod'low; 
11
     end if;
12
  end process;
13
14
  process begin
15
     wait until rising_edge(clk);
16
     if  (modusB /= wave_mod'right)
17
     then modusB <= wave_mod'rightof(modusB); 
18
     else modusB <= wave_mod'left; 
19
     end if;
20
  end process;
21
end Behavioral;

von Duke Scarring (Gast)


Lesenswert?

>Pech: die XST-Synthese kanns nicht :-/

siehe auch:

xst.pdf (9.2i) ->
Ch. 6 XST VHDL Language Support ->
VHDL Constructs Supported in XST ->
Table 6-19, “VHDL Specifications” ->
Attribute ->

Supported for some predefined attributes
only: HIGH, LOW, LEFT, RIGHT, RANGE,
REVERSE_RANGE, LENGTH, POS,
ASCENDING, EVENT, LAST_VALUE.
Otherwise, ignored.

ergo: wenn man Syntheisieren will, sollte man sich das Dokument 
(xst.pdf) immer mal wieder zu Gemüte führen.

Duke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wobei die Aussage
> Otherwise, ignored.
nicht stimmt, weil es ja nicht ignoriert wird, sondern (zum Glück) zu 
einem Fehler führt.

> ergo: wenn man Syntheisieren will, sollte man sich das Dokument
> (xst.pdf) immer mal wieder zu Gemüte führen.
Daraus stammt mein Wissen um das Pech von Hans-Werner ;-)
Aber man kanns ja mal probieren, es hätte ja sein können, die Tools 
beherrschen den Syntax, nur die Doku weiß nichts davon.

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.