mikrocontroller.net

Forum: FPGA, VHDL & Co. Frage zu Generate


Autor: Dietrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wer kann mir sagen, was an diesem Konstrukt falsch ist:
library ieee;
use ieee.std_logic_1164.all;

entity xyz
end xyz;

architecture beh of xyz is
signal ls_ack, ls_sig : std_logic;
constant cGenerate : std_logic := '0';
begin

g_GenTest: if cGenerate='0' generate
begin
p_Test: process(ls_sig)
begin
  ls_ack <= ls_sig;
end process p_Test;


else generate   --** error: near "else" expecting END

p_Test: process(ls_sig)
begin
  ls_ack <= not ls_sig;
end process p_Test;

end generate g_GenTest;

end beh;


Danke für Eure hilfe.

Dietrich

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falsch ist:
> g_GenTest: if cGenerate='0' generate
Ein if gibt es nur innerhalb eines Prozesses ;-)

Du kannst z.B. nicht einfach process drumrumschreiben, weil es 
innerhalb eines Prozesses auch keinen zweiten Prozess gibt :-/

Du willst offenbar abhängig von einem Generate-Schalter mal den einen 
oder den anderen Prozess synthetisieren?

BTW:
Du wirst z.B. auch Probleme haben, wenn deine Prozesse (p_Test) gleich 
heißen. Machs einfach so, dass die gar keinen Namen haben.

Autor: Roger Steiner (edge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if ... generate gibts natuerlich, aber kein else generate.

Mach halt zwei if ... generate Bloecke.
Beim zweiten:
g_GenTest2: : if cGenerate /= '0' generate

Uebersichtlicher wirds so
p_Test: process(ls_sig)
begin
  if cGenerate='0' then
    ls_ack <= ls_sig;
  else
    ls_ack <= not ls_sig;
  end if;
end process p_Test;

da cGenerate konstant ist, wird das Ergebnis der Synthese dasselbe sein.

Cheers, Roger

Autor: Dietrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Roger,

die Verwendung von zwei separaten Generate-Anweisungen ist natürlich
möglich.

Das Problem bei der Verwendung von else-generate besteht wohl darin, 
dass man dem else Zweig kein eigenes Generate-Label bzw. Namen geben 
kann. Ähnliches Problem wahrscheinlich bei elsif-generate Anweisungen.
Interessanterweise sind diese if-elsif-else-generate Anweisungen in 
Ashenden's "A designer's guide to VHDL, 3rd edition" aufgeführt. 
Wahrscheinlich werden sie noch nicht unterstützt, vielleicht mit VHDL 
2008 ...

Dietrich

Autor: Dietrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Lothar
>Ein if gibt es nur innerhalb eines Prozesses ;-)

Das stimmt so natürlich nicht, da es bedingte Generate-Anweisungen gibt.

Dietrich

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dietrich wrote:
> @ Lothar
> Das stimmt so natürlich nicht, da es bedingte Generate-Anweisungen gibt.
Ja, ich hatte da wohl eine Leseschwäche  :-o

Autor: Micha Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dietrich hat recht. In Peter J. Ashendens Designers Guide sthet auf S 
459, dass VHDL-87, -93 und 2002 keine elsif oder else generate 
unterstützen.
Da meines Wissens nach kein Synthesetool VHDL 2008 unterstützt, bleibt 
wohl nur die Alternative wie sie Roger vorgeschlagen hat.

Micha

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.