mikrocontroller.net

Forum: FPGA, VHDL & Co. Process - noch eine Frage


Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

darf eine Architectur mehrere Prozesse haben?
Ich habe eine mit zwei Prozessen und wenn bei da stehen passiert
nichts, nur wenn eine auskommentiert ist.
Finde das alles sehr seltsam...

Bin über jede Antwort dankbar.

TIM:)

Autor: Stief (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja klar! Eine architecture kann mehrere Prozesse beinhalten!

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
eine arcitecture kann so viele process(sensitve list) haben wie man
will,
vielleicht hast du in der sensitve list vergessen deine Signale
anzugeben.

Wenn sich ein Signal aus der sensitve list ändert, wird der Process
duchlaufen.

  chris

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Finde das alles sehr seltsam...

Wenn Du Deinen Code posten würdest, könnte man Dir besser helfen.

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hier kurz der Code:

ENTITY DFF is
    Port ( D : in  STD_LOGIC;
           Reset : in  STD_LOGIC;
        Clk: in STD_LOGIC;
           Q : out  STD_LOGIC;
           NQ : out STD_LOGIC);
end  ENTITY  DFF;

architecture Behavioral of DFF is
  signal temp: STD_LOGIC;
begin

  Kill: process (Reset)
  begin
    if(Reset = '0') then
      Q <= '0';
    end if;
  end process Kill;

  Status: process (Clk)
  begin    if (Clk'event and Clk = '1') then
    Q <= D;
    end if;
  end process Status;



--  process (Clk, Reset)
--  begin
--    if ( Reset = '0') then
--      Q <= '0';
--    elsif ( Clk'event and Clk = '1') then
--      Q <= D;
--    end if;
--  end process;

end Behavioral;


Der auskommentierte Code ist eine Zusammenfassung von den beiden
anderen Prozessen, was auch funktioniert.

Sind Status und Kill beide aktiv funktioniert es nicht, kommentiere ich
noch einen der beiden aus funktioniert der andere.

Könnt ihr mir sagen, womit das zu tun haben könnte?


TIM :)

Autor: JanZ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

du darfst nicht aus 2 verschiedenen Prozessen auf einen Ausgang
schreiben. Hier beschreibst du Q aber aus KILL und aus STATUS.

Gruß

Autor: Sven Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin...

...was eine einfache Angabe der Fehlermeldung übrigens auch erbraht
hätte.

Der auskommentierte Teil ist übrigens die "klasissche" Version des
asynchronen Reset. Nur noch rising_edge(clk) statt clkevent und clk=1
und ab dafür.

--
 SJ

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

danke für die schnelle Antwort.
Darf ich denn auf ein Signal aus zwei Prozessen schreiben, welches ich
vorher in der Architectur deklariert habe?

TIM :)

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man darf von 2 Prozessen auf ein Signal schreiben, aber man sollte dies
nur in Testbenches machen.

Bei entities, welche man synthetisieren will, sollte man es nicht
tunlichst nicht.
Du kannst Dir überlegen daß es zu einem Konflikt kommt, wenn der eine
Prozess eine '1' schreiben will, der andere aber eine '0'.
Manche Compiler können den Konflikt auflösen, indem sie die beiden
Werte oder-, bzw. und- verknüpfen.
Normalerweise ist es nicht notwendig, aus 2 Prozessen ein Signal zu
schreiben.

Autor: Alex H. (alex123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tim,

http://www.carookee.de/forum/VHDL/14/Unterschied_z...

scheint dasselbe Posting zu sein :-)

> Darf ich denn auf ein Signal aus zwei Prozessen
> schreiben, welches ich vorher in der Architectur
> deklariert habe?

Ja schon. Du musst das Signal aber als resolved
deklarieren. z.B. ist std_logic und std_logic_vector
als resolved definiert.
Normalerweise verwendet man sowas, wenn man Tristate-
Busse beschreiben möchte. (Ich würde es in keinem
anderen Fall verwenden, und bei Tristate auch sehr
"explizit" beschreiben, do dass die Tristatebuffer
vom Rest der Schaltung irgendwie separiert sind.)

Achtung, Du musst selber dafür sorgen, dass das Signal
nur "sinnvoll" getrieben wird, z.B. im einen Prozess
Tristate ist (oder zumindest H, L oder W), während´
der andere darauf schreibt. Wenn nicht, passiert
das, was Du in deinem Beispiel beschreibst ... ;-)

Der Wert des Signals wird über die sogenannte
Resolution Function bestimmt. Hierbei ergibt z.B.
0 und 0,Z,L,H,W = 0, 0 und 1,X,- = X, 0 und U = U,
analog für 1 usw ...
Schau einfach mal in die IEEE std_logic-Library (ist
normalerweise irgendwo unter Soucre Code, IEEE bei
der Installation des Simulators.

> ...was eine einfache Angabe der Fehlermeldung
> übrigens auch erbraht hätte.

Nicht unbedingt. Wenn das Signal als std_logic definiert
ist, dann ist dies aus Sicht von VHDL zulässig (std_logic
ist resolved std_ulogic). Bei std_ulogic oder bit hätte
es ne Fehlermeldung gegeben. Normalerweise bekommt man
während der Synthese auch ne Warning oder ne Note (zumindest
machen manche Synthesetools das so).

Gruss,

Alex

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

@Klaus Falser: Hast recht, braucht ein bisschen länger um die Logik zu
verstehen. Ist mir aber nun klar wieso es nicht funktionieren kann.

@Alex: Jep ist auch mein Eintrag. Da dort keine aktuelle Nachricht war,
wusste ich nicht wie aktiv das Board noch ist. Hätte sonst nicht doppelt
gepostet. Sorry.


Grüsse,

TIM :)

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.