www.mikrocontroller.net

Forum: FPGA, VHDL & Co. AND-Verknüpfung


Autor: SvenB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

habe folgendes Problem:

signal a,b,c : std_logic;

type ty_ar is array (natural range <>) of std_logic;
signal d, e, f : ty_ar(1 downto 0);

begin


a <= (b and c) when rising_edge(clk);

-- Error message: No feasible entries for 'and'
d <= (e and f) when rising_edge(clk);

Wie bekommt man diese UND-Verknüpfung hin ?


vielen dank für eure hilfe.

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sven,

du musst die and Funktion überladen, so dass sie als Argumente ty_ar 
erwartet und einen ty_ar zurück gibt.

Thomas

Autor: SvenB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

danke für deine hilfe.

gruß,
Sven

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nebenbei bemerkt,

>a <= (b and c) when rising_edge(clk);

Dieses Konstrukt bewirkt sicher nicht das was du möchtest. a hat nur 
genau während der Flanke auf clk den Wert (b and c), zu allen anderen 
Zeiten ist es nicht definiert. Und die Flanke auf clk ist auch nur 
unendlich kurz...
Beim Synthetisieren bekommst du damit eine "warning: found latch" und in 
Hardware wird sich diese Zuweisung im Allgemeinen anders verhalten als 
in der Simulation.
Merke: Wenn du ein Flipflop beschreiben willst, dann brauchst du in VHDL 
einen Prozess der genau das macht, alle anderen Beschreibungen sind 
nicht für Hardware geeignet.

Autor: SvenB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Dieses Konstrukt bewirkt sicher nicht das was du möchtest. a hat nur
>genau während der Flanke auf clk den Wert (b and c), zu allen anderen
>Zeiten ist es nicht definiert. Und die Flanke auf clk ist auch nur
>unendlich kurz...


Quatsch comedy club!


a <= (b and c) when rising_edge(clk);


-- alternativ

process
wait until rising_edge(clk);

a <= b and c;
end process;


Beide Beschreibungen sind einwandfrei.

>Beim Synthetisieren bekommst du damit eine "warning: found latch"
Ja ? Schon ausprobiert?

Autor: SvenB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Merke: Wenn du ein Flipflop beschreiben willst, dann brauchst du in VHDL
>einen Prozess der genau das macht, alle anderen Beschreibungen sind
>nicht für Hardware geeignet.

Quatsch comedy club die 2.

Autor: SvenB (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
siehe Anhang: Synthese mit SynplifyPro

Autor: SvenB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dargestellt ist:

c <= (a and b) when rising_edge(clk);


Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> Beim Synthetisieren bekommst du damit eine "warning: found latch" und in
> Hardware wird sich diese Zuweisung im Allgemeinen anders verhalten als
> in der Simulation.
Nein, das wird kein Latch, sondern durch die steigende Flanke ein 
Register...

> Merke: Wenn du ein Flipflop beschreiben willst, dann brauchst du in VHDL
> einen Prozess der genau das macht, alle anderen Beschreibungen sind
> nicht für Hardware geeignet.
Die Synthese kann schon einiges erkennen, aber ich würde die 
Beschreibung auch als grenzwertig einstufen. Man könnte es sogar noch 
weiter treiben und ein Reset und ein Enable einführen:
    a <= '0' when b='1' else c and d when e='1' and rising_edge(clk);
Daraus macht die Synthese dann die erwartete Funktion (Anhang).

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und falls jetzt noch jemand fragt: latürnich geht das auch mit einem 
Preset...
a <= '0' when r='1' else '1' when s='1' else b and c when e='1' and rising_edge(clk);

Autor: SvenB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eigentlich ging es ja gar nicht um die Frage, wie man nebenläufig ein 
Register beschreibt...

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SvenB schrieb:
>>Beim Synthetisieren bekommst du damit eine "warning: found latch"
> Ja ? Schon ausprobiert?

Ja, vor längerer Zeit. Inzwischen scheinen sowohl ISE als auch Synplify 
damit klarzukommen - ich würde aber definitiv bei den herkömmlichen 
Beschreibungen bleiben und nicht auf die (meistens ohnehin nicht 
vorhandene) Intelligenz der Tools vertrauen.

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.