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


von Tim (Gast)


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:)

von Stief (Gast)


Lesenswert?

Ja klar! Eine architecture kann mehrere Prozesse beinhalten!

von chris (Gast)


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

von Xenu (Gast)


Lesenswert?

>Finde das alles sehr seltsam...

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

von Tim (Gast)


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 :)

von JanZ (Gast)


Lesenswert?

Hi,

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

Gruß

von Sven Johannes (Gast)


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

von Tim (Gast)


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 :)

von Klaus F. (kfalser)


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.

von Alex H. (alex123)


Lesenswert?

Hallo Tim,

http://www.carookee.de/forum/VHDL/14/Unterschied_zwischen_Prozee.10877964-0-01105

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

von Tim (Gast)


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 :)

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.