AND-Verknüpfung

Gast #1666142
Lesenswert?
• ▲
▼
Hi Leute,

habe folgendes Problem:

1
signal a,b,c : std_logic;
2

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

6
begin
7

8

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

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

Wie bekommt man diese UND-Verknüpfung hin ?


vielen dank für eure hilfe.
#1666234
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.
Gast #1666254
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!

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

3

4
-- alternativ
5

6
process
7
wait until rising_edge(clk);
8

9
a <= b and c;
10
end process;

Beide Beschreibungen sind einwandfrei.

>Beim Synthetisieren bekommst du damit eine "warning: found latch"
Ja ? Schon ausprobiert?
Moderator (Firma: Titel) Persönliche Seite #1666282
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:
1
    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).
Angehängte Dateien:
#1666307
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren