Process - noch eine Frage

Gast #388657
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
Gast #388659
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 :)
Gast #388661
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
#388663
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.
#388664
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
Gast #388665
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

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